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