Итак, я нашел код C для распаковки некоторых образцов PCM, и я хочу сделать то же самое в AS3. Я пытался это сделать, но, похоже, он не работает. Я мало знаю, ни C, хотя я довольно свободно владею AS3, поэтому я мог бы перевести его неправильно.Я правильно переводил этот код C в AS3?
Вот код C: (. Output()
является заполнителем для действия, чтобы сделать на распакованного значения выборки)
BYTE bShift; // shift value
char *inputBuffer[dwSize];
SHORT iCurValue;
DWORD i;
iCurValue=0x0000;
for (i=0;i<dwSize;i++)
{
iCurValue+=(signed short)inputBuffer[i];
Output(iCurValue<<bShift);
}
Вот функция, я сделал в AS3, которая, как предполагается, сделать то же самое:
private function pcmDecompress(pcmBytes:ByteArray, shift:int):ByteArray
{
var input:ByteArray = pcmBytes;
var output:ByteArray = new ByteArray();
output.endian = Endian.LITTLE_ENDIAN;
var iCurValue:int = 0x0000;
for (var i:int = 0; i < input.length; i++)
{
iCurValue += input[i];
output.writeShort(iCurValue << shift);
}
return output;
}
Затем я перекодировать файл WAV и сохранить его, используя в качестве output
секции данных, содержащих образцы. WAV-файл воспроизводится, но все, что я слышу, много статично.
Любая помощь была бы принята с благодарностью.
Это кажется таким очевидным сейчас. Я попробовал это, хотя (заменяя цикл 'for' циклом' while'), но я все равно становлюсь статичным. Кроме того, в 'input' есть нечетное количество байтов, поэтому я получаю ошибку« конец файла », если я не вырвусь из цикла, когда осталось 1 байт. Я на 64-битной системе, хотя это будет иметь значение? – puggsoy