2013-08-29 2 views
0

У меня есть несколько аудиовходнымNAudio множественный вход на несколько выходных

  • 1 WaveProvider из файла
  • 1 WaveProvider из SpeechSynthesizer

И я хочу, чтобы направить эти WaveProvider к нескольким аудио выход WaveOut (для нескольких DeviceNumber).

Но у меня есть 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. По словам NAudio автора, я не должен использовать задачи, но я не "знаешь, как установить несколько выход и вход в волшебном классе смесителя?

С уважением

ответ

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); 
} 

3-й матч параметром является имя поточного пункта. Это позволяет остановить цикл до конца.

Смежные вопросы