0

我正在尝试从 AS 库中获取音频数据,从文档中该函数如下所示:

protected function audioData():String
        {
            var ret:String="";
            buffer.position = 0;                
            while (buffer.bytesAvailable > 0) 
            {
                ret += buffer.readFloat().toString() + ";";
            }
            return ret;
        }

在我的代码和这个库之间是另一个具有此代码的 js:

 audioData: function(){
    return this.flashInterface().audioData().split(";");
  },

从我的代码中,我可以像这样访问:

  function getdata(){
    var data = Recorder.audioData();
    console.log("audioData: " + data);
  }

但是,我尝试将返回的值输出到 Firebug,我得到了一个很长的逗号分隔的浮点值列表,我怎样才能取回 byte[] 缓冲区?我所说的缓冲区类似于 Java,因为我将通过JSNI从 Java 访问缓冲区。

这是示例日志输出(实际日志很长):

-0.00030517578125,0.00006103515625,0.00115966796875,0.00146484375,-0.00091552734375,-0.000946044921875,-0.001983642578125,-0.003997802734375,-0.005126953125,-0.00360107421875,-0.0032958984375,-0.004119873046875,-0.00433349609375,-0.0023193359375,-0.0008544921875,-0.003448486328125,-0.00347900390625,-0.0054931640625 ,-0.0067138671875,-0.005279541015625,-0.006072998046875,

我无法重新编译创建输出的 AS,现在我可以做的是在 javascript 中连接到 SWF 组件并接受它的浮点并将其转换回字节数组。我在 FDT 5 IDE 中的 AS 项目中存在太多错误,我已经需要对我的应用程序进行模型化了。

我真的很想重新编译 AS 库以满足需要,但是现在我只想按原样使用它。

4

1 回答 1

1

如果要查看字节数组中的实际字节数据,可以使用以下命令:

protected function audioData():String
{
   var ret:String="";
   buffer.position = 0;                
   while (buffer.bytesAvailable > 0) 
   {
      ret += buffer.readByte().toString();
   }
   return ret;
}

AFAIK as3 中的 ByteArray 类已经是一个字节数组(顾名思义:))您可以使用 [] 运算符访问它的数据,因为 byteArray[0] 将为您提供第一个字节。

您应该能够通过 post 请求将字节数组发送到服务器上的 url,如下所示:

var request:URLRequest = new URLRequest ("http://someurl");
var loader: URLLoader = new URLLoader();
request.contentType = "application/octet-stream";
request.method = URLRequestMethod.POST;
request.data = byteArray;
loader.load(_request);
于 2012-05-07T17:46:04.547 回答