Попытка работать с необработанным файлом GSM в NAudio - невозможно воспроизвести или преобразовать - PullRequest
0 голосов
/ 24 января 2020

ОК, поэтому мне нужно иметь возможность воспроизводить и конвертировать файлы .GSM. Вот пример с сайта онлайн-конвертера

Эти файлы не имеют заголовка или чего-либо еще. sox.exe может декодировать их и преобразовывать во что угодно, но я хочу сделать это в своем C# коде, не используя sox. Файлы GSM 6.10 8000 бит / с 16 бит моно.

Я пробовал несколько разных способов обработки данных, которые у меня есть в MemoryStream.

В своих тестах я хочу просто воспроизвести его, поэтому я делаю что-то вроде этого:

        static void PlayIt(IWaveProvider data)
        {

            using (var output = new WaveOutEvent())
            {
                output.Init(data);
                output.Play();
                while (output.PlaybackState == PlaybackState.Playing)
                {
                    Thread.Sleep(500);
                }

            }
        }

Это работает для файлов WAV, MP3, любого IWaveProvider, который я даю.

Так как получить работающий IWaveProvider из этого файла GSM?

new WaveFileReader(mystream) не работает, поскольку ожидает заголовок WAV RIFF.

Так как заголовка нет, может это? RawSourceWaveStream rs = new RawSourceWaveStream(ms, new Gsm610WaveFormat()); похоже, что это будет работать, но он проигрывает gibberi sh.

Затем я пытаюсь взять это и сделать следующее:

WaveStream pcmaudio = WaveFormatConversionStream.CreatePcmStream(rs);

Это также не вызывает ошибки, но играет gibberi sh.

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

...