很少有答案在播放整個聲音時混合兩個音軌與sampleDataEvent監聽器。有沒有什麼方法可以儘可能快地混合曲目? (這些曲目的持續時間相同,並且以ByteArray的形式) 在以下帖子中 Programatically Mixdown of audio tracks (no playback)
作者建議使用Event.EnterFrame。但是,我不太熟悉AS3的API。任何人都可以舉一些例子代碼?謝謝![AS3]如何快速混合兩個音軌
0
A
回答
0
如果你不需要以二進制格式輸出混音,只需雙重播放即可。
track1.play();
track2.play();
是的,因爲你的軌道是在ByteArray對象,首先提出兩個Sound
對象,並通過loadPCMDataFromByteArray()
得到的ByteArray數據。
UPDATE:因爲你根本不想回放,最簡單的混合兩條軌道的方法是讀取每個ByteArray中的一個浮點數,然後將它們的平均值寫入ByteArray結果中。使用ENTER_FRAME
偵聽器是值得的,如果你不想讓SWF在轉換過程中失速。你說你的數組長度相等的,如果是的話,下面的代碼片段應該做的wav文件的你「簡單組合」:
var f1:Number;
var f2:Number;
b1.position=0;
b2.position=0;
var result:ByteArray=new ByteArray();
var l:int=b1.length; // cache property
var i:int=0;
while (i<l) {
i=i+4; // size of float
f1=b1.readFloat();
f2=b2.readFloat();
result.writeFloat(0.5*f1+0.5*f2);
}
做一個enterFrame事件方法需要您result
是監聽通話之間可用,位置不變,在循環中運行一個臨時計數器,該計數器將控制「在此幀中進行足夠的轉換」。就像這樣:
var result:ByteArray;
var tracks:Vector.<ByteArray>=[];
var mixFinished:Function; // a callback
function startMixing():void {
// just make it start mixing
for (var i:int=tracks.length;i>=0;i--) tracks[i].position=0;
addEventListener(Event.ENTER_FRAME,doMixing);
result=new ByteArray();
}
function doMixing(e:Event):void {
if (tracks.length==0) {
removeEventListener(Event.ENTER_FRAME,doMixing);
return;
} // sanity check
var mixrate:Number=1.0/tracks.length;
for (var i:int=0;i<2048;i++) { // adjust number accordingly
var tm:int=0; // how many tracks mixed
var f:int=0;
for (var j:int=tracks.length-1;j>=0;j--) {
if (tracks[j].position<tracks[j].length) {
// this track isn't finished
tm++;
f+=tracks[j].readFloat();
}
}
if (tm==0) { // all tracks reached end, stop mixing
removeEventListener(Event.ENTER_FRAME,doMixing);
if (mixFinished!=null) mixFinished(); // do a callback
return;
}
result.writeFloat(f*mixrate);
}
}
有了這個,你填tracks
,建立mixFinished
並調用startMixing
,然後等到mixFinished
會被調用,到那時你的聲音應適當混合。如果你覺得你的混音過程應該更快,那麼適當地增加代碼中的2048值。
相關問題
- 1. 循環多個音頻軌道(混音器)Flash AS3
- 2. 使用混音器混合兩個音頻文件
- 3. iOS - 混合兩個音頻文件
- 4. gstreamer管道混合兩個音頻源
- 5. Java記錄/混合兩個音頻流
- 6. QTKit沒有正確混合音軌
- 7. 如何在PHP腳本中將音軌混合在一起?
- 8. mlt將音軌添加到多音軌音頻而不混音
- 9. 如何從混合語音文件中分離兩個人的聲音?
- 10. 如何避免懸停速度太快時子菜單混合?
- 11. 如何在Flash AS3中創建音序器/混音器?
- 12. 如何混合cocos2d中的兩個DrawNode
- 13. 如何混合兩個圖像
- 14. 如何混合兩個ARGB像素?
- 15. 混音兩個pcm流的音頻
- 16. 合併/混合兩個音頻流與WebAudio
- 17. 如何快速加載音樂
- 18. 編程式混音音軌(無播放)
- 19. 兩個快速Mathematica問題
- 20. 如何使用兩個變量快速劃分兩個數字?
- 21. 問題混合AS2和AS3
- 22. 快速排序混淆
- 23. iOS音頻混合
- 24. 混合音頻android
- 25. HTML5音頻混合
- 26. C++音頻混合
- 27. Android:混合音頻
- 28. 如何混合PCM音頻源(Java)?
- 29. 如何混合音頻樣本?
- 30. Audacity如何混合音頻樣本?
感謝您的回答,但我想生成一個wav文件沒有任何回放。 – JackLin
好的,看到更新的答案。 – Vesper
它完美地解決了我的問題,謝謝Versper! – JackLin