所以我找到了一些 C 代码来解压缩某些 PCM 样本,我想在 AS3 中做同样的事情。我试图这样做,但它似乎没有工作。我对 C 知之甚少,虽然我对 AS3 相当流利,所以我可能翻译不正确。
这是C代码:
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);
}
(Output()
是对解压缩样本值执行的操作的占位符。)
这是我在 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 文件播放,但我听到的只是很多静态的。
任何帮助将不胜感激。