2017-02-26 5 views
0

Ich benutze NAudio und ASIO, um eine Sequenz von WAV-Dateien zu spielen. Ich muss ASIO verwenden, weil die Audiokarte nur das unterstützt. Ich konnte jedes wav auf diese Weise spielen:NAudio ASIO Wiedergabe wav

 waveRead = new WaveFileReader(completeStreamMS); //completeStreamMS is a memorystream 
    waveRead.Position = 0; 
    pcm = new WaveChannel32(waveRead); 
    reductionStream = new BlockAlignReductionStream(pcm); 
    reductionStream.Position = 0; 
    waveOutDevice.Init(reductionStream); 
    waveOutDevice.Play(); 

Jetzt brauche ich 1 Sekunde stummer des wav vor dem Start einzufügen. Der einzige Weg, ich fand, ist eine OffsetSampleProvider zu verwenden, aber wenn ich so tun

 ISampleProvider isp = WaveExtensionMethods.ToSampleProvider(waveRead); 
    var offset = new SampleProviders.OffsetSampleProvider(isp); 
    offset.DelayBy = TimeSpan.FromSeconds(1); 
    var wp = new SampleProviders.SampleToWaveProvider(offset); 
    waveOutDevice.Init(wp);` 
    waveOutDevice.Play(); 

Die erste wav spielt ganz gut, aber sobald ich die WaveOutDevice stop() oder ich versuche, einen neuen Reinstanziierung des Ausführung des Programms stoppt an dieser Position mit

System.ExecutionEngineException 
Cannot intercept exception. Debugged program can not be continued and properties can not be evaluated. 

Ich bin nicht in der Lage zu verstehen, warum. Bitte helfen Sie. Dank

Antwort

0

mit ASIO, ist es besser, nur das Ausgabegerät einmal zu öffnen, es spielen zu lassen und dann seine Eingabe zu ändern. Sie könnten zum Beispiel Elemente aus einer MixingSampleProvider hinzufügen und entfernen, die als Eingabe verwendet wird.