Как я могу отправить вывод NAudio WaveMixerStream32 в ApiController FileStreamResult - PullRequest
0 голосов
/ 16 января 2020

Кто-нибудь знает, как вы отправите вывод WaveMixerStream32 в FileStreamResult? Я хочу обработать звук, но затем получить к нему доступ в браузере.

1 Ответ

0 голосов
/ 17 января 2020

В NAudio все классы Wav являются производными от класса WavStream, а класс WavStream - от System.IO.Stream.

Вот пример:

var inFile = @"c:\test.wav";
var inFileFormat = WaveFormat.CreateALawFormat(8000,1);

using (var inStream = File.OpenRead(inFile))
using (var reader = new RawSourceWaveStream(inStream, inFileFormat))
{
    using (var waveMixerStream = new WaveMixerStream32(new List<WaveStream>() { reader }, true))
    {
        using (var fsResult = new FileStreamResult(waveMixerStream, "audio/wav"))
        {
            /* any custom here */
        }
    }
}

RawSourceWaveStream

Также необходимо изменить метод dispose из класса WaveMixerStream32 следующим образом:

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            /* no need to dispose each inputStream,
               let all inputStreams released by GC

            /* lock (inputsLock)
            {
                foreach (WaveStream inputStream in inputStreams)
                {
                    inputStream.Dispose();
                }
            } */
        }
        else
        {
            System.Diagnostics.Debug.Assert(false, "WaveMixerStream32 was not disposed");
        }
        base.Dispose(disposing);
    }

WaveMixerStream32.cs

Надеюсь, это поможет.

...