c++ - 如何将PC上播放的音频数据发送给C++程序作为输入

标签 c++ visual-c++

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

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

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

最佳答案

现代 Windows 有“立体声混音”录音设备,就是为了这个目的。启用方法如下:https://technicalustad.com/enable-stereo-mix-in-windows-10/

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

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

关于c++ - 如何将PC上播放的音频数据发送给C++程序作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57043016/

相关文章:

c++ - 使用 boost::asio::ip::tcp::socket 作为 shared_ptr

c++ - 寻找适用于 Visual Studio 2008/2010 的 C++ 数据库库

c++ - 即时推导

c++ - 您可以在 autoexp.dat 预览中使用连续的 #if block 吗?

c++ - 这不是尾递归吗? (堆栈溢出错误)

c++ - 如何在 C 文件中访问 C++ 枚举

C++ BigInteger 类似于 Chew Keong TAN 的 C# 版本

c++ - 为什么 Visual Studio 2010 会给我此代码的语法错误?

c++ - [Windows] 网络到主机不工作

c++ - XML - SelectNodes - 如何获取具有某些值的属性的节点 (MFC)