我正在尝试做一些简单的事情:
将 byteArray 发送到 C 库,填充缓冲区并读取内存,但我认为我有浮点转换问题。
这是我在 AS 中所做的:
var memory:ByteArray = gstate.ds;
// get sound
var soundBytes:ByteArray = new ByteArray();
_source.extract(soundBytes, 4096);
soundBytes.position = 0;
// send sound
_lib.processSound(soundBytes);
// get sound back to play it
memory.position = _dataPosition
event.data.writeBytes(memory);
C代码:
我的缓冲区变量:
float *buffer;
缓冲区在开始时被初始化:
static AS3_Val initByteArray(void* self, AS3_Val args) {
AS3_ArrayValue(args, "IntType", &bufferSize);
buffer = (float*)malloc(bufferSize*sizeof(float));
return AS3_Int((int)buffer);
}
我处理声音:
AS3_Val src = AS3_Undefined();
AS3_ArrayValue( args,"AS3ValType", &src );
// get length
AS3_Val lengthOfArgs = AS3_GetS(src,"length");
int len = AS3_IntValue(lengthOfArgs);
// set position to 0 and write the buffer
AS3_ByteArray_seek(src, 0, SEEK_SET);
AS3_Trace(AS3_GetS(src, "bytesAvailable"));
AS3_ByteArray_readBytes(buffer, src, len);
现在我得到错误:
异常错误:RangeError:错误 #2004:参数之一无效。在 flash.media::Sound/play()
当我在缓冲区中写入时,内存似乎正确增加,32768 表示 4096 * 8(4 表示浮点数,2 表示左右通道)。
当我在发送 byteArray 之前跟踪闪存中的字节时,我得到一些这样的数字(在 1421 的特定位置进行比较):
soundBytes.position = 1421 * 8;
trace(soundBytes.readFloat()); // trace -0.000030517578125 (left)
trace(soundBytes.readFloat()); // trace 0.000030517578125 (right)
我可以在 C 中追踪相同的数字:
AS3_ByteArray_seek(src, 1421*8, SEEK_SET);
AS3_Val emptyParams = AS3_Array("");
AS3_Val readFloat = AS3_GetS(src, "readFloat");
AS3_Trace(readFloat);
AS3_Val left = AS3_Call(readFloat, src, emptyParams);
AS3_Trace(left); // trace -0.000030517578125 (left)
AS3_Val right = AS3_Call(readFloat, src, emptyParams);
AS3_Trace(right); // trace 0.000030517578125 (right)
但是当我跟踪缓冲区时:
AS3_Trace(AS3_Number(buffer[1421*2])); // trace 2.5783891743576634e-43
AS3_Trace(AS3_Number(buffer[(1421*2)+1])); trace 7.847271400218976e-44
并在调用 lib 后在 flash 中:
soundBytes.position = 1421 * 8;
trace(soundBytes.readFloat()); // trace 2.5783891743576634e-43
trace(soundBytes.readFloat()); // trace 7.847271400218976e-44
我看起来该数字已被转换或具有不同的类型/格式:
-0.000030517578125 与 2.5783891743576634e-43
我对C语言不是很流利,知道发生了什么吗?
谢谢阅读。
罗姆