2011-04-27 106 views
0

我在Csharp的应用程序中开发,我想要读取外部声卡中的声音文件,是否有一种功能可以使用名称播放声音声卡的名称和音频文件的名称。 因此,如果我想创建3个按钮,并且我有3个声卡,并且每个按钮都与声卡有关(例如button1与声卡1有关......),这些代码可以帮助我播放特定的音频文件声卡 ???请给我一个代码,因为我正在准备一个普通的警报,这样的代码会帮助我很多。如何在特定的声卡中播放声音

预先感谢您

+0

嗯,我不相信有一种方法可以将输出定位到特定的音频设备。你可能会发现我的答案[这个问题](http://stackoverflow.com/questions/5675786/how-can-i-notify-my-application-that-the-default-sound-playback-device-haschange )有趣。它完成了类似于你想要达到的目标,尽管以一种更为迂回的方式。 (这是*非常*不寻常,一台电脑有多个声卡,少三个。) – 2011-04-27 11:22:23

+0

另请参阅[这个问题的Windows XP](http://stackoverflow.com/questions/4115667/change-playback-device- programatically-xp/4117384#4117384)和[这是Windows Vista和更高版本](http://stackoverflow.com/questions/1555156/c-how-to-programatically-change-the-playback-device)。 – 2011-04-27 11:24:12

+0

@Cody Gray:这并不罕见。即使是单个低端/板载声卡,也可以切换到多个输出设备(例如S/PDIF vs Speakers)。 USB耳机也很常见。 – 2011-04-27 14:09:24

回答

2

我不知道的.NET框架内这样做的方式。但是您可以使用直接声音API:

DirectSoundEnumerate找到可用设备,然后在DirectSoundCreate中使用所需设备的GUID。

请不要通过乱搞注册表(或根本)来改变PC的默认设备。这对你的用户来说是一个很大的麻烦。

Here的一些示例代码,用于在本地播放DirectX中的声音。

您可以查看Managed DirectX和/或XNA。通过为您提供DirectSound的托管包装,它可能会让您的生活更轻松。

+0

@Cody Gray,@ Ben Schwehn:非常感谢您的回复,但昨天我找到了NAudio的解决方案,我认为它可以工作。 – nicolecastel 2011-04-29 14:56:54

+0

感谢您的反馈。以前不知道NAudio! – 2011-04-29 16:00:54

+0

@ Ben Schwehn:如果你有兴趣,我可以给你发送代码 – nicolecastel 2011-05-01 16:17:55