NAudio - Mp3FileReader - медленный вывод аудио

151
31 октября 2019, 06:50

Я преобразую входящий поток wav в mp3 через Lame этой функцией:

public static MemoryStream WavToMP3(byte[] wavFile)
    {
        using(var retMs = new MemoryStream())
        using(var ms = new MemoryStream(wavFile))
        using(var rdr = new RawSourceWaveStream(ms, new WaveFormat(22050, 1)))
        using(var wtr = new LameMP3FileWriter(retMs, rdr.WaveFormat, LAMEPreset.ABR_128))
        {
            rdr.CopyTo(wtr);
            wtr.Flush();
            return new MemoryStream(retMs.ToArray());
        }
    }

Из другого источника приходит сигнал (записанный на WaveIn или полученный подобным образом). Этот звуковой сигнал в виде массива байт окунается в функцию.

static Mp3FileReader r;
    public static void Broadcast(byte[] data)
    {
        r = new Mp3FileReader(WavToMP3(data));
        Console.Title = r.XingHeader.Frames.ToString();
        Console.WriteLine("Frames Count = " + r.XingHeader.Frames.ToString());
        int framePos = 0;
        while ((frame = r.ReadNextFrame()) != null)
        {
            framePos++;
            Console.WriteLine("[ SR={0} BIT={1} Lenght={2}  ] ", frame.SampleRate, frame.BitRate, frame.FrameLength );
            foreach(Consumer c in WebCast.Clients) c.Send(frame.RawData);
        }
        Console.WriteLine("=======================================");
    }

Данный код переводит байты wav в mp3. Все бы ничего, но каждые эти 6 кадров на выходе через HTTP у клиента звук как-будто замедленный прерывистый. Ранее этим же Mp3FileReader-ом я сохранял данные на диск, там каких-либо искажений (проигран через WMP ui) замечено не было. Вестимо, искажение в байтах числится в frame.RawData. Я не зря оставил команды вывода в консоль данных кадров, вот такая у нас раскадровка по блокам(по 6), каждая строка - один кадр: pastebin

Перерыв весь интернет, нашел только это, но, говоря честно, я не понял до конца где и что надо убрать в моем коде, дабы искажения не было: https://stackoverflow.com/questions/21444669/slow-reading-of-mp3-files-with-naudio

И тут у человека что-то подобное было, но это не то: https://coderpapers.com/question/2203124/

Буду благодарен за любую помощь или направление. Спасибо!

В двух словах: кадры с mp3 воспроизводятся через браузер MPEG-ом искаженно(замедленно, прерывисто, с отставанием). Согласно изученным результатам, полагаю, что кроме чистых данных, в кадрах есть еще какой-то мусор, который и дает эти искажения в плеере.

READ ALSO
Не могу разобрать XML

Не могу разобрать XML

Получаю вот такой ответ от сайта в формате xml

129
Что возвращает include/require?

Что возвращает include/require?

Содержимое файла canChangeStatusphp:

135
Как вытащить данные вложенного массива?

Как вытащить данные вложенного массива?

Посылаю в функцию массив, для дальнейшей обработкиВ этом массиве есть вложенные массивы

133