Преобразование 32-битной формы волны в 16-битную форму волны
Я захватывал звук, используя режим захвата шлейфа. Захваченный сигнал является 32-битным сигналом. Я изо всех сил пытаюсь преобразовать это в 16-битную форму сигнала, чтобы кодеры вроде lame могли справиться с этим (он говорит, что формат неподдерживаемых данных: 0x0003).
Я пытался переместить биты (не моя сильная сторона) в самом волновом потоке с 32 бит на 16 бит, но результат все еще звучит искаженным.
Класс Wave32To16Stream в этом случае кажется взорванным: if (sourceStream.WaveFormat.Encoding! = WaveFormatEncoding.IeeeFloat) генерирует новое ApplicationException («Поддерживается только 32-битная плавающая точка»);
В идеале я хотел бы просто записать прямо в 16 бит, разве нет способа установить битовую глубину захвата? Если нет, может ли кто-нибудь помочь мне с преобразованием волнового потока?
Пример захваченного сигнала можно найти здесь:http://dl.dropbox.com/u/454409/test.wav (10mb)
Я также согласился бы на какой-то способ кодирования этого файла в mp3 с помощью lame, я пробовал каждую перестановку параметров, которую только мог придумать, чтобы заставить ее принять файл волны. Что интересно, Audacity (который использует lame_enc для кодирования mp3s) смог создать mp3 из сигнала (но, возможно, Audacity автоматически преобразует его в 16 бит, прежде чем передать его в lame).