【问题标题】:How to send audio data playing on PC to C++ program as input如何将 PC 上播放的音频数据发送到 C++ 程序作为输入
【发布时间】:2020-12-07 18:42:55
【问题描述】:

在编程方面,我是初学者,我想用 C++ 做一个个人项目来发展我的技能。我想到的项目包括在我的笔记本电脑(运行 Windows 10)上播放音频,分析它,并将数据发送到 arduino,这将改变 LED 灯的颜色和亮度,与正在播放的音频同步。我想要它,这样我就可以简单地,例如,在 Spotify 上播放一首歌或在 Youtube 上播放音乐视频等,程序将从该音频流中获取数据作为输入。在其他地方,我看到程序使用来自录制的 WAV 文件的音频或来自麦克风的流作为输入,但不是我想的那样。我想将此程序用于聚会,因此使用麦克风作为解决方法并不理想。

这甚至可能吗?如果是这样,我应该如何解决这个问题?是否有我应该查看的某些 API 或什么?如果程序将音频作为输入,我是否还能在蓝牙扬声器之类的设备上播放音乐?还是一次只能将数据发送到一个地方?

比我更擅长编程的室友使用 Swift 在 Mac 上完成了这项工作,虽然我没有 Mac,但使用 Linux 会更容易吗?

【问题讨论】:

  • 我的建议是在您精通 C++ 之前忘记音频编程。音频编程非常复杂。当然,在 Linux 中,除了基础之外几乎什么都做不了。
  • @MichaelChourdakis 高级音频处理在现代 Linux 系统上非常可行。但我同意这是一个高级主题,需要先掌握基本的 C++ 能力。
  • @JesperJuhl 一切皆有可能,直到您尝试进入市场并使用专业设备和专业水平的乐器和效果器。但这是另一次讨论:)
  • 看看C库libsoundio。它是跨平台的,专为实时应用而设计。这不是很复杂。

标签: c++ visual-c++


【解决方案1】:

现代 Windows 具有“立体声混音”录音设备,仅此而已。启用方法如下:https://technicalustad.com/enable-stereo-mix-in-windows-10/

设置完成后,在您的 C++ 程序中使用您想要的任何录制 API。

这是一个执行您要求的示例,打开录音设备,开始录音,并将音频示例发送到参数中提供的类:https://docs.microsoft.com/en-us/windows/win32/coreaudio/capturing-a-stream 您可能希望为您的应用程序用 CPU 时间换取延迟,即不要为hnsActualDuration/REFTIMES_PER_MILLISEC/2 睡觉,改为Sleep( 0 )Sleep( 1 )

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2014-02-06
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多