2016-10-10 182 views
0

我似乎無法從默認音頻設備錄製音頻,並將其播放到另一個音頻設備上。 我不想錄制麥克風,但音頻設備..如何從默認音頻設備錄製和播放音頻

當我演電影,我可以聽到聲音,通過我的耳機,我想那聲音複製到任何音頻設備,我選擇..

如果您有任何建議,這不必須與NAudio ..

據我所知,NAudio不能這樣做..

這是我用在這個時候任務的代碼,但是隻需要輸入從我的麥克風:代碼片斷與n音訊..

void playSoundCopy(int dv0) 
{ 
    disposeWave0();// stop previous sounds before starting 
    var waveOut0 = new WaveOut(); 
    waveOut0.DeviceNumber = dv0; 
    wave0 = waveOut0; 

    Defaultwave0 = new WaveIn(); 
    Defaultwave0.DeviceNumber = (int)GetDefaultDevice(Defaultdevice.FriendlyName); 
    var waveinReader0 = new WaveInProvider(Defaultwave0); 
    wave0.Init(waveinReader0); 

    play0 = false; 
    Thread.Sleep(1000); 

    play0 = true; 
    t0 = new Thread(() => { timeline0(); }); 
    t0.IsBackground = true; 
    t0.Start(); 

    Defaultwave0.StartRecording(); 
    wave0.Play(); 
} 

真正的問題其實是,我不能從記錄waveout的設備,只有WaveIn ..

工作結果:

void playSoundCopy(int dv0) 
{ 
    disposeWave0();// stop previous sounds before starting 
    var waveOut0 = new WaveOut(); 
    waveOut0.DeviceNumber = dv0; 
    wave0 = waveOut0; 

    var format0 = Defaultdevice.AudioClient.MixFormat; 
    buffer0 = new BufferedWaveProvider(format0); 
    wave0.Init(buffer0); 

    capture = new WasapiLoopbackCapture(Defaultdevice); 
    capture.ShareMode = AudioClientShareMode.Shared; 
    capture.DataAvailable += CaptureOnDataAvailable; 

    play0 = false; 
    Thread.Sleep(1000); 

    play0 = true; 
    t0 = new Thread(() => { timeline0(); }); 
    t0.IsBackground = true; 
    t0.Start(); 

    capture.StartRecording(); 
    wave0.Play(); 
} 
void CaptureOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs) 
{ 
    try 
    { 
     var itm = new byte[waveInEventArgs.BytesRecorded]; 
     Array.Copy(waveInEventArgs.Buffer, itm, waveInEventArgs.BytesRecorded); 
     buffer0.AddSamples(itm, 0, itm.Length); 
    } 
    catch { } 
} 
+0

有了這些信息,我認爲沒有人能夠幫到你。請詳細解釋並在需要時添加一些代碼/更多上下文。 – 2016-10-10 18:31:27

+0

我要求的是建議,而不是實際的代碼,除非它是一個代碼片段。 – ArchAngel

+0

也許你首先需要啓用這個所需的錄音設備。從大膽看這個頁面例如:http://manual.audacityteam.org/man/tutorial_recording_computer_playback_on_windows.html –

回答

1

您可以捕獲音頻發送到使用WasapiLoopbackCapture的設備。然後,您可以將其轉換爲BufferedWaveProvider並用它來饋送另一個輸出設備。雖然會引入一些延遲,所以不要指望兩個設備同步。

+0

聽起來不錯,但WasapiLoopbackCapture,它是否適用於我的音頻設備而不是我的麥克風?代碼片段會很好.. – ArchAngel

+0

是WasapiLoopbackCapture將記錄聲卡的輸出。您可以在NAudio WPF演示項目中找到一些示例代碼 –

+0

您可以給我一個鏈接嗎? – ArchAngel