ОК, поэтому мне нужно иметь возможность воспроизводить и конвертировать файлы .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 и исходный код, и я безнадежно застрял. Помогите!