2014-01-31 103 views
2

我正在WPF應用程序中需要錄製來自我的用戶的音頻消息。我跟着代碼here和它的工作正常。現在的問題是,如果它是一個桌面,我只是檢查是否有內置麥克風,而不是如果有任何外部麥克風連接或沒有。而且我還想知道用戶是否禁用了麥克風。你能告訴我如何檢查是否連接了任何外部麥克風。如果用戶無法錄製音頻,我需要顯示一條錯誤消息。如何檢查麥克風是否可用於錄音

+0

waveInDevices的列表包括所有連接的麥克風。外接麥克風或內置麥克風之間沒有區別。 –

+0

@thefiloe是你說沒有辦法找出是否有任何外部麥克風連接? – Raj123

+1

那麼,你可以嘗試使用MMDevices(Wasapi)。 Wasapi提供了關於設備的更多細節(查看IMMdevice的PropertyStore)。但是,如果你真的想使用過時的waveIn API,恐怕不用等待它是否是外部設備。 –

回答

1

爲了檢測C#中硬件的變化,您可以使用WM_DEVICECHANGE message,其中通知應用程序對設備或計算機的硬件配置進行了更改。

因爲我遠離這方面的專家,所以我寧願將您指向StackOverflow上的Detecting when a microphone is unplugged問題,而不是試圖向您解釋。該帖子接受的答案應該可以幫助您檢測麥克風何時被拔出。從接受答案的鏈接的問題:

using System.Runtime.InteropServices; 
const int WM_DEVICECHANGE = 0x0219; 
// new device is pluggedin 
const int DBT_DEVICEARRIVAL = 0x8000; 
//device is removed 
const int DBT_DEVICEREMOVECOMPLETE = 0x8004; 
//device is changed 
const int DBT_DEVNODES_CHANGED = 0x0007; 
protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_DEVICECHANGE 
    { 
     //Your code here. 
    } 
    base.WndProc(ref m); 
} 

這裏有一些進一步的鏈接,可以幫助您與您的項目:

Sound Activated Recorder with Spectrogram in C#從CodeProject
.NET Voice Recorder從9頻道
.NET Voice Recorder CodePlex從