注意:我在Error #2084-The AMF Encoding of the arguments cannot exceed 40K中看到了另一个问题 我的问题不同了。我的数组不是0而且小于40960。
我的代码很简单。我从这个链接获得了这个mp3录音: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的数组???
答案 0 :(得分:3)
在调用loadCompressedDataFromByteArray
之前,您应该将ByteArray的位置设置为0.例如:
sba.position = 0;
snd.loadCompressedDataFromByteArray(sba,sba.length);
我注意到在我的应用程序中,ByteArray上的bytesAvailable
为0.这是因为ByteArray上的位置位于ByteArray的末尾。错误消息令人困惑,因为它表示您超过40K而不是。应该说ByteArray没有任何东西可以加载。
另外,我可以确认我可以加载大于40K的ByteArrays。我测试了126KB mp3 ByteArray。
答案 1 :(得分:0)
在我的情况下,问题不在于我想阅读的ByteArray的大小。我正在阅读和播放30 Mb mp3文件没有问题(我知道这很多!)。问题是我多次读取文件,并且在第一次ByteArray的位置结束之后。因此,只要您想要读取byteArray,就必须重新启动到0位置。为了安全起见,我认为这是一个很好的做法。