0
使用聲音對象.extract()方法,可以將未壓縮的聲音數據檢索爲ByteArray。提取的聲音數據的格式是什麼?自定義內部格式或建立的格式? Endian類型?關於as3 Sound.extract()格式的詳細信息?
我希望能夠將sounddata直接加載到byteArray中,並從此數據饋送聲音播放(繞過以下步驟1)。
這裏是我的實驗迄今:
第1步:在這裏,我加載聲音,提取數據內容,並將其保存到光盤:
private var sound:Sound;
private var byteArray:ByteArray;
// loading a sound...
private function init():void {
sound = new Sound();
sound.addEventListener(Event.COMPLETE, onComplete);
sound.load(new URLRequest('short.mp3'));
}
// saving it to disc...
private function onComplete(e:Event):void {
byteArray = new ByteArray();
sound.extract(byteArray, 100000000);
byteArray.position = 0;
var file:FileReference = new FileReference();
file.save(byteArray, 'short.data');
}
第2步:在這裏,我從加載數據圓盤和與此數據饋送一個新的聲音對象的回放:
private var sound:Sound;
private var byteArray:ByteArray;
// loading a sound...
private function init():void {
file = new FileReference();
file.addEventListener(Event.COMPLETE, onLoaded);
file.addEventListener(Event.SELECT, onSelected);
file.browse();
}
private function onSelected(e:Event):void {
file.load();
}
private function onLoaded(e:Event):void {
trace('loaded');
trace(file.data.length);
byteArray = file.data;
sound2 = new Sound();
sound2.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
sound2.play();
}
private function onSampleData(e:SampleDataEvent):void {
trace(e.position);
for (var i:int = 0; i < 2048; i++) {
var left:Number = byteArray.readFloat();
var right:Number = byteArray.readFloat();
e.data.writeFloat(left * 0.2);
e.data.writeFloat(right * 0.2);
}
}
我想能夠(從盤加載的數據和饋送一個聲音對象播放)完成該第二步驟的通過使用外部轉換器工具(sox或其他)。
/納斯
謝謝,Mikael!我會嘗試你的意見建議! – Cambiata