2016-03-11 20 views
1

我有兩個BufferedWaveProviders和MixingSampleProvider。第一個BufferedSampleProvider(myBuffer)用於從聲卡傳來的音頻。第二個BufferedWaveProvider()用於來自網絡(TCP)的音頻通訊。開始它完成,因爲異常的程序之後第二BufferedWaveProvider在另一個線程被填充時出現「Buffer full」異常

private static void Receive() 
    { 
     receiver.BeginReceive(incomingBytes, 0, incomingBytes.Length, SocketFlags.None, ReceiveCallback, null); 
    } 

    private static void ReceiveCallback(IAsyncResult ar) 
    { 
     receiver.EndReceive(ar); 
     incomingBuffer.AddSamples(incomingBytes, 0 , incomingBytes.Length); 
     Receive(); 
    } 

但7-10後:

被異步填充這樣。
我應該如何異步填充緩衝區?

+0

你的例外究竟是什麼?請把它放在你的問題上。 – Edin

回答

2

停止忽略EndReceive的返回值。

它告訴你你收到了多少個字節的數據。這就是你必須添加多少個樣本到你的緩衝區(儘管確保你沒有將樣本轉換爲字節,反之亦然)。

現在,您只需簡單地將您的incomingBytes傳遞給整個,即使您只通過TCP接收到單個字節。這是垃圾數據,並且它比填充緩衝區更快。

一般來說,方法的返回值和功能是有意義的,而忽略了當你明白什麼你忽略他們只應(例如,如果你不關心處理什麼,但回調,無視返回值BeginReceive沒有問題;如果您需要知道是否有掛起的異步I/O請求,則需要返回值)。

相關問題