1
我目前正在記錄和存儲聲音的ByteArray,然後播放它。但由於某些原因,ByteArray的播放起始位置是163840,而不是0,因爲我需要它。聲音字節數組的AS3播放不從開始
有沒有人有任何想法,爲什麼這可能會發生?
感謝,
馬克
var soundBA:ByteArray = new ByteArray();
var sound:Sound = new Sound();
var ch:SoundChannel = new SoundChannel();
var recordingsArray:Array = new Array();
//想象我已經成功地記錄並存儲在聲音進入recordingsArray
soundBA.clear();
soundBA.length = 0;
//I collect the recorded byteArray within an array
soundBA.writeBytes(recordingsArray[0]);
soundBA.position = 0;
trace("Start POS "+soundBA.position); //traces 0
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sound_sampleDataHandler, false, 0, true);
ch=sound.play();
this.addEventListener(Event.ENTER_FRAME, updateSeek, false, 0, true);
public function updateSeek(event:Event):void {
trace("current Pos "+soundBA.position); //the first trace event is "current Pos 163840"
}
function sound_sampleDataHandler(event:SampleDataEvent):void {
for (var i:int = 0; i < 8192; i++)
{
if (soundBA.bytesAvailable < 4)
{
break;
}
var sample:Number = soundBA.readFloat();
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
輝煌!感謝回覆。只是一個小問題。 trace(「current pos in%:」+(100 * ch.position/sound.length)); 這似乎只運行到大約0.56。也就是說,如果我讓錄音完全播放,儘管它的長度結束%值總是在0.56左右。 當前位置百分比:0.5668934240362812 你知道這可能是爲什麼嗎? 謝謝 – crooksy88
對不起,我誤解了你的問題。如何準備帶有聲音數據的字節數組?我指的是當你通過'Sound.extract()'方法獲得'ByteArray'時的情況。這是一種常用的技術:首先使用'Sound'對象('srcSound.load(...)')加載和解碼mp3文件,然後提取字節('srcSound.extract(soundBA,...)'),然後最後你用另一個(動態)聲音('dstSound.play()')播放提取的字節。在這種情況下,您可以獲得位置爲'100 * dstChannel.position/srcSound.length'。 – skozin
如果你有'ByteArray'已經解碼的聲音,我假設你可以使用'encodedBA.length /(44.1 * 4 * 2)'獲得以毫秒爲單位的聲音長度(而不是sound.length)。 – skozin