3

注意:我在错误 #2084-参数的 AMF 编码不能超过 40K中看到了另一个问题, 我的问题是不同的。我的数组不是 0,它小于 40960。

我的代码很简单。我从这个链接得到了这个 mp3 录音 fla:http ://www.jordansthings.com/blog/?p= 5 它使用了 Shinemp3 编码器。

我只是想播放录制的声音而不是保存它。所以我在保存录制文件的按钮中添加了以下内容:

private function onWavClick(e:MouseEvent)
    {           
        // WRITE ID3 TAGS
        var sba:ByteArray = mp3Encoder.mp3Data;
        sba.position =  sba.length - 128
        sba.writeMultiByte("TAG", "iso-8859-1");
        sba.writeMultiByte("Microphone Test 1-2, 1-2      "+String.fromCharCode(0), "iso-8859-1");  // Title
        sba.writeMultiByte("jordansthings                 "+String.fromCharCode(0), "iso-8859-1");  // Artist           
        sba.writeMultiByte("Jordan's Thingz Bop Volume 1  "+String.fromCharCode(0), "iso-8859-1");  // Album        
        sba.writeMultiByte("2010" + String.fromCharCode(0), "iso-8859-1");                          // Year
        sba.writeMultiByte("www.jordansthings.com         " + String.fromCharCode(0), "iso-8859-1");// comments
        sba.writeByte(57);                                                                      

        //new FileReference().save(sba, "FlashMicrophoneTest.mp3") // this saves the file. I don't need it.
        // my addition
        var snd:Sound = new Sound();
        var channel:SoundChannel = new SoundChannel();
        trace(sba.length);
        snd.loadCompressedDataFromByteArray(sba,sba.length);

        channel = snd.play();
    }

此外:即使这有效......我无法加载大于 40K 的数组???

4

2 回答 2

3

在调用之前loadCompressedDataFromByteArray,您应该将 ByteArray 的位置设置为 0。例如:

sba.position = 0;
snd.loadCompressedDataFromByteArray(sba,sba.length);

我注意到在我的应用程序中bytesAvailable,ByteArray 上的值为 0。这是因为 ByteArray 上的位置位于 ByteArray 的末尾。错误消息令人困惑,因为它说您超过 40K 而您没有。应该说没有什么可以从 ByteArray 加载。

此外,我可以确认我可以加载大于 40K 的字节数组。我用 126KB mp3 ByteArray 进行了测试。

于 2013-10-01T18:08:00.193 回答
0

就我而言,问题不在于我想读取的 ByteArray 的大小。我可以毫无问题地阅读和播放 30 Mb mp3 文件(我知道这很多!)。问题是我多次读取文件,第一次之后 ByteArray 的位置在末尾。因此,只要您想读取该 byteArray,就必须将位置重新启动到 0。为了安全起见,我认为这是一个好习惯。

于 2015-03-11T16:29:51.267 回答