Проблема с записью необработанного файла PCM на 16 битов

Как маленькая экспериментальная музыкальная часть я пытаюсь программировать песню в стандарте C. Код производит необработанный файл PCM, который может быть импортирован в Смелость. В данный момент все работает как ожидалось, но я встречаюсь с проблемами при попытке записать каждый образец как 16 битов в противоположность текущим 8 битам, которые я использую.

Вплоть до точки того, чтобы быть записанным текущий образец вычисляется как плавание, и его границы сохранены в значительной степени в диапазоне целого числа на 8 битов со знаком. Это затем записано как целое число на 8 битов прежде, чем повторить процесс для следующего образца. Это хорошо работает и играет правильно. Проблема происходит, когда я пытаюсь записать это как необработанный файл PCM на 16 битов - я умножаю плавание на 256 и копирую результат в целое число, после чего я использую fwrite для записи получающегося целого числа на 16 битов. Это не дает ожидаемые результаты при импорте, приводя к высоко искаженной версии того, что я ожидал.

Я добавил действительный код ниже, так как проблема происходит только на этапе записи.

Рабочий код на 8 битов:

if (out<-127) {out=-128;} else if (out>126) {out=127;}
putc(out,fo);

Не рабочий код на 16 битов:

if (out<-127) {out=-128;} else if (out>126) {out=127;}
pcm=out*256;
fwrite(&pcm,2,1,fo);

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

5
задан blkrbt 24 July 2010 в 14:07
поделиться