Fox*_*Fox 5 flash audio mp3 flashdevelop actionscript-3
早上好!
我正在尝试为MP3创建视觉波形.我所包含的代码是在成功加载MP3时调用的.我打算从声音中提取一些重要的样本来创建波形,而不是将整个声音提取到一个bytearray中.即使在一台好机器上,提取整首歌曲也会导致闪光灯冻结3-5秒(或更长时间!).就我的目的而言,这是不可行的.
不幸的是,我在下面得到的代码没有产生任何数字.如果我提取整个歌曲它的功能,但提取关键点并没有给我什么.执行提取是否会使声音对象的其余部分对将来的提取无效?如果是这样,有什么方法可以在提取过程中长时间不冻结闪存?
其余代码中的一些重要变量:
waveFormWidth:波形精灵的静态宽度.
waveFormHeight:波形精灵的静态高度.
song:我将用于创建波形的声音对象.
public function mapWaveForm(e:Event = null):void
{
// Clear the wave form sprite
waveForm.graphics.clear();
waveForm.graphics.lineStyle(0, 0x000000, 1);
// Storage for the wave form bit data
var byteOutput:ByteArray;
var leftPeakSize:Number;
var rightPeakSize:Number;
var songTotalSamples:int;
var thisSample:int;
byteOutput = new ByteArray();
// How many samples?
songTotalSamples = (song.length * 44.1);
// Loop for the wave form width
for (var peakCount:int = 0; (peakCount < waveFormWidth); peakCount++)
{
// Get info at each peak.
thisSample = Math.floor(songTotalSamples * (peakCount / waveFormWidth));
song.extract(byteOutput, 1, thisSample);
byteOutput.position = 0;
trace(thisSample, byteOutput.readFloat());
leftPeakSize = byteOutput.readFloat() / 1.27;
rightPeakSize = byteOutput.readFloat() / 1.27;
// Turn those peaks into something usable.
leftPeakSize = leftPeakSize * (waveFormHeight * .5);
rightPeakSize = rightPeakSize * (waveFormHeight * .5);
// Make the left channel line
waveForm.graphics.moveTo(peakCount, (waveFormHeight * .5));
waveForm.graphics.lineTo(peakCount, (waveFormHeight * .5) - leftPeakSize);
// Make the right channel line
waveForm.graphics.moveTo(peakCount, (waveFormHeight * .5));
waveForm.graphics.lineTo(peakCount, (waveFormHeight * .5) + rightPeakSize);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
小智 0
使用这个类:
http://www.bytearray.org/?p=329
我还将它融入到一个非常蹩脚的、半生不熟的实验中,我不久前开始制作混音器。您也可以在这里获取源代码:
http://code.google.com/p/ascensionsystems/downloads/list
| 归档时间: |
|
| 查看次数: |
4143 次 |
| 最近记录: |