1

我正在尝试做一些简单的事情:

将 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语言不是很流利,知道发生了什么吗?

谢谢阅读。

罗姆

4

0 回答 0