Утилита конвертирует SND(RAW PCM 8 bit unsigned) в WAV. Консольная. Качать - выше. Исходник внутри.
Тут, совсем недавно, а точнее сегодня. Надо было пачкой конвертировать RAW PCM unsigned 8 bit в WAV. Зачем, скажете вы? А затем, что закидывать каждый файл в GoldWave только для того, чтобы его прослушать - было очень лениво. Много движений мышкой. Выбирать формат, частоту %).
И тут, я решил сделать конвертер. Ибо, делов то. Дело было так. Читать доки по формату WAV было лень, причём их ещё нужно было найти нормальные. Подумал, раз RAW PCM можно сохранить в WAV, в таком же формате (8 bit unsigned), то наверно оно там так и хранится.
Для тех кто не в курсе, unsigned 8 bit формат - это для каждого момента времени, уровень указывается ровно одним байтом - его величиной. Причем, в unsigned подразумевается что $80 - это нуль, всё что меньше этого значения - меньше нуля. То есть $0 для него это -$80 величина, а $FF это $7F величина. Всё просто.
Теперь, раз формат простой, самого звука, а в WAV нет сжатия, то он наверно там так и должен хранится, без всяких извращений. Я взял тестовый .snd - чистый RAW PCM 8 bit unsigned, сохранил его в WAV PCM 8 bit unsigned, и после чего начал сравнивать их дампы. А именно начал искать .snd внутри .wav. Он оказался по оффсету 0x2C, и после него ничего нет. Значит есть только заголовок. В заголовке, как логично предположить - есть размер, и частота. Эти две вещи и надо править, остальное - не трогаем.
Размер+$24 по оффсету $4, и чистый размер по $28. Частота, два раза (не знаю почему) по оффсету $18. Итого алгоритм. Запихиваем целиком заголовок в исходник, изменяем во время работы программы только эти две величины (в трёх местах). Пишем заголовок, пишем .snd, и ПЛЯШЕМ!).
Исходники прилагаются, для тех кто хочет встроить сохранение WAV PCM unsigned 8 bit. :) signed 8 bit делается также, только надо глянуть какой байт отвечает за формат, его поменять, то есть тупо сообщить проигрывателю, что это signed.
|