NAUDIO конвертация wav byte[] в mp3 byte[]

119
29 октября 2019, 05:20

Уже перепробовал куча вариантов. Мне по сети приходят байты WaveIn с голосом и передаются в эту функцию:

public static void Broadcast(byte[] data)
    {
        waveProvider.AddSamples(data, 0, data.Length);
        //TODO (save to) Environment.CurrentDirectory + @"\out.mp3"
    }

Приходят примерно несколько десятков раз в секунду. Вопрос такой: можно ли как-то эти байты преобразовать в MP3 кадр (Mp3Frame) [в приоритете] или хотя-бы этот кусочек со звуком как-то сохранить на диск? Перебрал разные варианты, все не подходят. Сейчас звук в виде:

internal static WaveOut waveOut = new WaveOut();
internal static BufferedWaveProvider waveProvider = new BufferedWaveProvider(new WaveFormat(8000, 2));

Он звучит в моих колонках, т.к. я использую

waveOut.Init(waveProvider);
waveOut.Play();

Рассмотрю любые варианты. Спасибо.

Answer 1

то, что получилось и кое-как работает

public static void Broadcast(byte[] data)
    {
        r = new Mp3FileReader(WavToMP3(data));
        while ((frame = r.ReadNextFrame()) != null)
        {           
            foreach(Consumer c in WebCast.Clients) c.Audio(frame.RawData);
            Console.Title = frame.FrameLength.ToString();
        }
    }
    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(44100, 16, 1)))
        using(var wtr = new LameMP3FileWriter(retMs, rdr.WaveFormat, 128))
        {
            rdr.CopyTo(wtr);
            wtr.Flush();
            return new MemoryStream(retMs.ToArray());
        }
    }
READ ALSO
Code First - не создаеся БД

Code First - не создаеся БД

В конструкторе класса контекста есть метод

106
Разорвать соединение COMConector

Разорвать соединение COMConector

Приложение на WPF в котором соединяюсь с 1с(RunApp) после работы вызываю закрытие соединения(ExitApp) все работает коректно соединение закрывается...

106
Дочерняя форма на месте родительской(с#)

Дочерняя форма на месте родительской(с#)

Создаю форму,но дочерняя появляется в другой стороне экрана, а хотелось бы на месте родительской

141
Не обновляется ObservableCollection

Не обновляется ObservableCollection

Не нашел ни одного похожего вопроса, кроме тех где изменения не происходят при добавление элементаА у меня проблема заключается в том что...

118