2013-08-29 95 views
0

我有多個音頻輸入n音訊多個輸入到多個輸出

  • 1個WaveProvider從一個SpeechSynthesizer

文件

  • 1 WaveProvider我要轉發這些WaveProvider多個音頻輸出WaveOut(多個設備編號)。

    但我有3個問題:

    1. 一些waveout的似乎是錯誤的,永遠掛
    2. WaveOut.Play()似乎同步
    3. 如果我把他們的任務,第一個任務開始播放設備上,然後它被另一個設備上的其他任務中斷

    有沒有人有一個示例代碼工作正常?

    這是不以2個任務工作樣本:

    Buffer = new BufferedWaveProvider(new WaveFormat(44100, 16, 2)); 
    WaveOut = new WaveOut(); 
    WaveOut.DeviceNumber = device; 
    WaveOut.Init(Buffer); 
    
    ... 
    
    Buffer.AddSamples(bytes, 0, bytes.Length); 
    WaveOut.Play(); 
    

    餘did't發現樣本與所有waveout的播放。據筆者n音訊,我不應該使用的任務,但我不「知道如何設置多個輸出和輸入魔術混頻器類?

    問候

  • 回答

    0

    的waveout的是同步和獨佔一個解決方法是使用FunctionCallback設置waveout的在後臺線程

    WaveOutSpeech = new WaveOut(WaveCallbackInfo.FunctionCallback()); 
    WaveOutSpeech.DeviceNumber = device; 
    

    如果您還需要同步的代碼,你必須:

    • 運行這段代碼在N個任務
    • 等待他們中的一個
    • 控制waveout的流動

    下面是一個示例:

    private void RunSession(WaveOut WaveOut, WaveStream stream, string match) { 
    
        played.Add(match); 
    
        WaveOut.Init(stream); 
        WaveOut.Play(); 
        while (stream.CurrentTime < stream.TotalTime && played.Contains(match)) { 
        Thread.Sleep(100); 
        } 
        WaveOut.Stop(); 
        stream.Dispose(); 
    
        played.Remove(match); 
    } 
    

    的第三參數匹配是流傳輸的項目的名稱。這允許在結束之前停止循環。