Я преобразую входящий поток 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-ом искаженно(замедленно, прерывисто, с отставанием). Согласно изученным результатам, полагаю, что кроме чистых данных, в кадрах есть еще какой-то мусор, который и дает эти искажения в плеере.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Посылаю в функцию массив, для дальнейшей обработкиВ этом массиве есть вложенные массивы