如何将音频流式传输到特定的输出设备?

How to stream audio to a specific output device?

一直在努力寻找一种方法将音频从文件或网络流式传输到特定的输出设备,而不仅仅是默认设备。尝试使用 mciSendString 虽然 open command 确实接受设备 id/filename 我还没有找到使用它的方法,我什至不确定这是否是我正在寻找的或不是,但考虑到它说 ... or the filename of the device driver 我猜是(?),但如果我错了请纠正我,这不是 specify your output device 类型参数。

如果它是正确的,那么你如何枚举已安装的设备驱动程序,已经查看了 IMMDevice 界面,因为它似乎可以将文件名存储在注册表中,但不是输出设备注册表项有一个 driver filename 类型的值条目,或者至少我还没有找到。

所以我的问题是,您将如何将音频流式传输到特定的输出设备,它不必通过 mciSendString 完成,这正是我研究的内容,因为它是最重要的方法之一谈到播放音频的功能

注意:请不要向我推荐像 NAudio 这样的第 3 方库,我问这个问题的原因是没有得到对库的推荐,否则我已经使用了一个和永远不会写这个,只是看到很多答案是这样的:Use {LibName}, it has what you want 或类似的东西。

如果写的内容奇怪或在某些地方措辞不正确,基本上最终目标应该是这样的:

Installed Output Devices:
 - Output1
 - Output2
 - Output3

Method For Playing:
  //will play x.mp3 through output device 1
  PlayAudio(output: "Output1", mp3File: "x.mp3");

  //will play x.mp3 through output device 2
  PlayAudio(output: "Output2", mp3File: "x.mp3");

  //will play x.mp3 through output device 3
  PlayAudio(output: "Output3", mp3File: "x.mp3");

你好像在找这个API:mciSendCommand()

To set the WaveAudio device (soundcard) used by the Multimedia Control, you must use the mciSendCommand API. The Multimedia Control does not directly provide a method to let you set the device used for playing or recording.

  • MCI_SETMCI_WAVE_SET_PARMS 调用 mciSendCommand() 将 wOutput 设置为所需的播放设备 ID。
  • 然后通过 mciSendCommand() 获取 IDDevice) mciGetDeviceID("waveaudio")

它不是 100% 清楚 wOutput 想要什么,它可能与 waveOutGetDevCaps()

返回的 ID 相同

我只是个搬运工

请参考: