来自麦克风的声音与来自扬声器的声音

Posted

技术标签:

【中文标题】来自麦克风的声音与来自扬声器的声音【英文标题】:Sound from mic vs sound from speaker 【发布时间】:2012-01-22 15:14:35 【问题描述】:

我想分别从麦克风和扬声器采集音频。我怎样才能区分它们?我可以使用 Wave API 捕获其中一个或另一个,例如 WaveInOpen()。

当我使用 waveInGetNumDevs() 和 waveInGetDevCaps()/waveoutGetDevCaps() 枚举设备时,似乎没有与特定端点设备(例如,麦克风或扬声器)相关的信息。我只看到以下是适配器设备:

高清读取音频输入 高清读取音频输出 网络摄像头...

【问题讨论】:

您不希望音频输入设备是麦克风,输出设备是扬声器吗? 不,他可能是指混音器作为扬声器 我的意思是媒体播放器输出的音频。使用完全相同的应用程序,我可以捕获麦克风输入和媒体播放器发出的音频。问题是我使用的任何功能似乎都没有指示音频的来源。当然,我知道是麦克风还是媒体播放器,但不是我的应用程序。 【参考方案1】:

我实际上并不了解 Windows API,所以我的答案可能不是最好的,也许还有更好的方法。

    HRESULT hr = CoInitialize(NULL);
    IMMDeviceEnumerator *pEnum = NULL;
    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum);
    if(SUCCEEDED(hr))
    
      IMMDeviceCollection *pDevices;
      // Enumerate the output devices.
      hr = pEnum->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &pDevices);
      // You can choose between eAll, eCapture or eRender
    

这样您就可以区分输入(捕获)和输出(渲染)。 (这就是你想要的吧?)

代码取自this article。您可以查看它以了解正确的 API 调用和库,它甚至可以为您提供更多信息。

希望对您有所帮助。

【讨论】:

感谢您的建议,但我忘了提到代码适用于 XP - 我的错。

以上是关于来自麦克风的声音与来自扬声器的声音的主要内容,如果未能解决你的问题,请参考以下文章

即使在 linux 中没有麦克风,声音输入中也存在声音输出

使用 ActionScript 3 从 Air 中的麦克风查找活动时,如何忽略应用程序播放的声音?

Electron实现麦克风声音系统扬声器声音桌面视频混合录制

Electron实现麦克风声音系统扬声器声音桌面视频混合录制

录制内部声音(来自软件合成器的输出)而不是来自麦克风

在 Android 上分析来自麦克风的声音(谐波、分音、泛音)[关闭]