2011-04-27 108 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