Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313

NAudio - Mp3FileReader - искаженный вывод аудио

28.02.2019, 21:50. Показов 5152. Ответов 23

Студворк — интернет-сервис помощи студентам
Здравия!

Я преобразую входящий поток wav в mp3 через Lame этой функцией:
C#
1
2
3
4
5
6
7
8
9
10
11
12
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 или полученный подобным образом). Этот звуковой сигнал в виде массива байт окунается в функцию.
C#
1
2
3
4
5
6
7
8
9
10
11
static Mp3FileReader r;
 
    public static void Broadcast(byte[] data)
    {
        r = new Mp3FileReader(WavToMP3(data));
 
        while ((frame = r.ReadNextFrame()) != null)
        {
            foreach(Consumer c in WebCast.Clients) c.Send(frame.RawData);
        }
    }
Данный код переводит байты wav в mp3. Все бы ничего, но каждые эти 6 кадров на выходе через HTTP у клиента звук как-будто замедленный прерывистый. Ранее этим же Mp3FileReader-ом я сохранял данные на диск, там каких-либо искажений (проигран через WMP ui) замечено не было. Вестимо, искажение в байтах числится в frame.RawData. Я не зря оставил команды вывода в консоль данных кадров, вот такая у нас раскадровка по блокам(по 6), каждая строка - один кадр.
Перерыв весь интернет, нашел только это, но, говоря честно, я не понял до конца где и что надо убрать в моем коде, дабы искажения не было: https://stackoverflow.com/ques... ith-naudio

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

В двух словах: кадры с mp3 воспроизводятся через браузер MPEG-ом искаженно(замедленно, прерывисто, с отставанием). Согласно изученным результатам, полагаю, что кроме чистых данных, в кадрах есть еще какой-то мусор, который и дает эти искажения в плеере.
Буду благодарен за любую помощь или направление. Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2019, 21:50
Ответы с готовыми решениями:

NAudio. Реализовать смену высоты звука(тона) аудио
Доброго времени суток! Пишу синтезатор звуков. При нажатии на кнопку вызываю воспр. звука так: SoundPlayer sp = new...

Mp3FileReader - медленный вывод аудио (NAudio.dll)
P.S. Т.к. я думаю что это из за особенности строения mp3 файла, публикую в эту тему Доброго времени суток! Я преобразую входящий...

Запись и вывод звука с NAudio
Здравствуйте. Только начал работать со звуком и в частности с NAudio. Подскажите, пожалуйста, каким образом производится запись звука и его...

23
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
03.03.2019, 11:34  [ТС]
Студворк — интернет-сервис помощи студентам
nicolas2008, честно говоря воспроизвести уже будет проблематично, но я там много вариантов с записью перепробовал, пробовал даже костыль: запись в файл - чтение из файла - отправка. Все дало одну и ту же ошибку о том, что запись в поток невозможна, либо он просто зависал.
Я нашел временное решение глобального кэша, которое сократила заедание вместо нескольких десятков фризов в секунду до 1 фриза в 6 секунд и это хотя бы можно уже слушать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static Mp3Frame frame;
        
        static List<byte> Buffer = new List<byte>();
        
        public static void Broadcast(byte[] data)
        {
            PlayBack.Play(data, PlayBack.DataType.Wav);
            
            Buffer.AddRange(data);
            
            if(Buffer.Count > 200000)
            {
                Log.Out("Buffered part of data...");
                
                Mp3FileReader r = new Mp3FileReader(WavToMP3(Buffer.ToArray()));
                
                while ((frame = r.ReadNextFrame()) != null)
                {
                    foreach(Consumer c in WebCast.Clients) c.Send(frame.RawData);
                }
                
                Buffer.Clear();
            }
        }
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.03.2019, 15:00
slenderface, похоже вы прави.
Из того что я вижу, сама libmp3lame.dll, на которой основана NAudio.Lame, не поддерживает потоковое кодирование.
Для получения результата нужно вызвать flush, а он финализирует кодирование.
0
 Аватар для slenderface
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
03.03.2019, 22:32  [ТС]
nicolas2008, ну вот в целом я где-то близок к разгадке. я вот сейчас попытаюсь обрезать последние 128 байт, в них может быть ID3v1, который и дает сбой
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
05.03.2019, 13:18
slenderface, напишите если получится, тоже интересно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2019, 13:18

Искаженный график (EPS)
В моем компе на работе недавно установили Матлаб. Почему-то есть какой-то баг с графиками. fig, jpg график выглядит как на экране, а в EPS...

искаженный звук из колонок
Привет, у меня такая проблемма у меня колонки с саббуфером sven|SPS-820. Недавно купил вебкамеру с микрофоном, и теперь если я делаю...

Определить не искаженный текст на скриншоте
При нажатии на кнопку нужно определить простой текст на этой картинке (Libraries и ниже, но нужно именно распознать):

Очень тихий и искаженный звук
В чем может быть проблема ? Звук в колонках и наушниках одинаково плохой. Установка новых драйверов не помогла.

Наушники, искаженный звук, ноутбук, windows 7
Здравствуйте, суть проблемы такова: когда подключаешь рабочие наушники к ноутбуку (на стационарном все работает замечательно) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru