C#混音同時錄製採集聲卡和麥克風話筒

 

在項目中,咱們可能須要同時錄製聲卡的聲音和麥克風的聲音,好比直播間,在線教學。那麼如何實現呢?固然是採用SharpCapture!下面開始演示關鍵代碼,您也能夠在文末下載所有源碼:函數

設置受權

第一步:在引用了SharpCapture.dll以後,調用SharpCapture方法以前,必定要先經過下面代碼來設置受權信息,若是是試用版,直接輸入Test便可。post

KeyMgr.SetKey("Test");

獲取IMixer的示例

從以前的一篇博文中,咱們介紹了一張圖看懂SharpCapture,從那篇文章咱們能夠看出,SharpCapture經過IMixer進行混音,混音就是指將聲卡的聲音和麥克風的聲音錄製爲一路聲音,方便後續處理。那麼如何獲取該接口的示例,從而使用該接口提供的各個方法呢?請看下面的代碼:ui

//麥克風採集,默認採集第一個麥克風
microphone = CaptureFactory.GetMicrophoneCapture(0);

//聲卡數據採集
soundcard = CaptureFactory.GetSoundcardCapture();

//建立混音器
mixer = CaptureFactory.GetAudioMixter(microphone, soundcard, SoundcardMixMode.DoubleChannel, true);

混音器須要您傳入聲卡採集器和麥克風採集器,同時設置混音的方式,好比這裏是左右聲道都參與混音,同時輸出時保留雙聲道.若是您不知道該如何設置,能夠使用該設置便可.this

綁定事件

獲取到了IMixer的示例後,爲其綁定事件MixedAudioDataCaptured。每當引擎採集到聲音數據並混音以後,就會將數據上交給該事件的響應函數上,您就能夠進行下一步的處理,好比保存爲音頻文件。url

//註冊採集到聲音數據的事件,每當採集到聲音數據,就經過該事件上報
mixer.AudioMixed += new SGDelegate<byte[]>(MixedAudioDataCaptured);

處理數據

能夠在獲取到聲音字節流後進行後續處理。spa

/// <summary>
/// 採集到聲音數據
/// </summary>
/// <param name="audioData">聲音數據</param>
public void MixedAudioDataCaptured(byte[] audioData)
{
    if (this.InvokeRequired)
    {
        this.BeginInvoke(new SGDelegate<byte[]>(MixedAudioDataCaptured), audioData);
    }
    else
    {
        //寫入wav文件中
        if (mixWav != null)
        {
            mixWav.WriteAudioData(audioData);
        }
    }
}

開始採集

處理完上述步驟後,就能夠開始採集了。以下:.net

//開始採集和混音
microphone.Start();
soundcard.Start();

中止採集

您能夠經過下面的代碼中止採集:code

//中止採集和混音
microphone.Stop();
soundcard.Stop();

demo源碼下載

點擊下載源碼blog

相關文章
相關標籤/搜索