Actionscript 3 如何在时间轴上访问和获取MP3声音的振幅?
我想得到在我的SWF中播放的mp3的振幅。问题是,它直接嵌入到时间线上 有没有什么方法可以让我在时间轴上看到正在播放的声音(通过ActionScript) 更新:为了更清晰,当声音被添加到舞台上时(从库拖动到舞台上),它似乎成为了框架的一个属性Actionscript 3 如何在时间轴上访问和获取MP3声音的振幅?,actionscript-3,flash,amplitude,Actionscript 3,Flash,Amplitude,我想得到在我的SWF中播放的mp3的振幅。问题是,它直接嵌入到时间线上 有没有什么方法可以让我在时间轴上看到正在播放的声音(通过ActionScript) 更新:为了更清晰,当声音被添加到舞台上时(从库拖动到舞台上),它似乎成为了框架的一个属性 任何导入的项目都可以在库中访问(ctrl+L或在顶部菜单栏的窗口下查找)) 在库中右键单击音频项的当前名称(将是类型:声音) 然后选择属性。在那里,您应该看到链接部分,因此勾选导出ActionScript 在现在可用的类框中,您现在可以放置自己的首选实
任何导入的项目都可以在
库中访问(ctrl+L或在顶部菜单栏的窗口下查找)
)
在库中
右键单击音频项的当前名称(将是类型:声音
)
然后选择属性。在那里,您应该看到链接部分,因此勾选导出ActionScript
在现在可用的类框中,您现在可以放置自己的首选实例名称(无空格),并将基类保留为flash.media.Sound(应该是这样)
替代解决方案:通过computeSpectrum
获取振幅
对于上述解决方案不适用的任何情况,可选择仅使用ComputeSpectrum
(它适用于所有音频,因为它绑定到混音器
,而不仅仅是特定的声音对象)。这是一个作为出发点的例子(调整或研究更好的公式)
var n_RMS:Number=0;
var n_FFT:Number=0;
var max_AMP:Number=200;//满容量时的最大宽度或高度
var FFT_字节:ByteArray=新的ByteArray;
addEventListener(事件。输入帧,计算振幅);
函数计算振幅(evt:事件)
{
SoundMixer.computeSpectrum(FFT_字节,假,0);
for(var i:int=0;i<256;i++)//获取左通道FFT
{
n_FFT=FFT_字节。readFloat();
n_RMS=0.8*Math.sqrt(Math.abs(n_FFT))/0.434294481904;
}
mc_ampLeft.width=(n_RMS/2)*max_AMP;//更新左栏
对于(var j:int=0;j<256;j++)//获取正确的通道FFT
{
n_FFT=FFT_字节。readFloat();
n_RMS=0.8*Math.sqrt(Math.abs(n_FFT))/0.434294481904;
}
mc_amplright.width=(n_RMS/2)*max_AMP;//更新右栏
}
任何导入的项目都可以在库中访问(ctrl+L或在顶部菜单栏的窗口下查找)
)
在库中
右键单击音频项的当前名称(将是类型:声音
)
然后选择属性。在那里,您应该看到链接部分,因此勾选导出ActionScript
在现在可用的类框中,您现在可以放置自己的首选实例名称(无空格),并将基类保留为flash.media.Sound(应该是这样)
替代解决方案:通过computeSpectrum
获取振幅
对于上述解决方案不适用的任何情况,可选择仅使用ComputeSpectrum
(它适用于所有音频,因为它绑定到混音器
,而不仅仅是特定的声音对象)。这是一个作为出发点的例子(调整或研究更好的公式)
var n_RMS:Number=0;
var n_FFT:Number=0;
var max_AMP:Number=200;//满容量时的最大宽度或高度
var FFT_字节:ByteArray=新的ByteArray;
addEventListener(事件。输入帧,计算振幅);
函数计算振幅(evt:事件)
{
SoundMixer.computeSpectrum(FFT_字节,假,0);
for(var i:int=0;i<256;i++)//获取左通道FFT
{
n_FFT=FFT_字节。readFloat();
n_RMS=0.8*Math.sqrt(Math.abs(n_FFT))/0.434294481904;
}
mc_ampLeft.width=(n_RMS/2)*max_AMP;//更新左栏
对于(var j:int=0;j<256;j++)//获取正确的通道FFT
{
n_FFT=FFT_字节。readFloat();
n_RMS=0.8*Math.sqrt(Math.abs(n_FFT))/0.434294481904;
}
mc_amplright.width=(n_RMS/2)*max_AMP;//更新右栏
}
任何导入的项目都可以在库中访问(ctrl+L或在顶部菜单栏的窗口下查找)
)
在库中
右键单击音频项的当前名称(将是类型:声音
)
然后选择属性。在那里,您应该看到链接部分,因此勾选导出ActionScript
在现在可用的类框中,您现在可以放置自己的首选实例名称(无空格),并将基类保留为flash.media.Sound(应该是这样)
替代解决方案:通过computeSpectrum
获取振幅
对于上述解决方案不适用的任何情况,可选择仅使用ComputeSpectrum
(它适用于所有音频,因为它绑定到混音器
,而不仅仅是特定的声音对象)。这是一个作为出发点的例子(调整或研究更好的公式)
var n_RMS:Number=0;
var n_FFT:Number=0;
var max_AMP:Number=200;//满容量时的最大宽度或高度
var FFT_字节:ByteArray=新的ByteArray;
addEventListener(事件。输入帧,计算振幅);
函数计算振幅(evt:事件)
{
SoundMixer.computeSpectrum(FFT_字节,假,0);
for(var i:int=0;i<256;i++)//获取左通道FFT
{
n_FFT=FFT_字节。readFloat();
n_RMS=0.8*Math.sqrt(Math.abs(n_FFT))/0.434294481904;
}
mc_ampLeft.width=(n_RMS/2)*max_AMP;//更新左栏
对于(var j:int=0;j<256;j++)//获取正确的通道FFT
{
//assuming you have.. my_Audio ..as Linkage Class name
var mySound:Sound = new my_Audio();
var myChannel:SoundChannel = new SoundChannel();
myChannel = mySound.play();
addEventListener(Event.ENTER_FRAME, show_Amplitude);
function show_Amplitude(evt:Event)
{
// where 200 is your own number for the maximum width or height of amplitude bars
mc_ampLeft.width = myChannel.leftPeak * 200;
mc_ampRight.width = myChannel.rightPeak * 200;
}
var n_RMS :Number = 0;
var n_FFT :Number = 0;
var max_AMP :Number = 200; // max width or height of bar at full volume
var FFT_bytes:ByteArray = new ByteArray;
addEventListener(Event.ENTER_FRAME, compute_Amplitude);
function compute_Amplitude(evt:Event)
{
SoundMixer.computeSpectrum( FFT_bytes, false, 0 );
for (var i:int = 0; i < 256; i++) //GETS LEFT CHANNEL FFT
{
n_FFT = FFT_bytes.readFloat();
n_RMS = 0.8 * Math.sqrt( Math.abs(n_FFT) ) / 0.434294481904;
}
mc_ampLeft.width = (n_RMS /2) * max_AMP; //update LEFT bar
for (var j:int = 0; j < 256; j++) //GETS RIGHT CHANNEL FFT
{
n_FFT = FFT_bytes.readFloat();
n_RMS = 0.8 * Math.sqrt( Math.abs(n_FFT) ) / 0.434294481904;
}
mc_ampRight.width = (n_RMS /2) * max_AMP; //update RIGHT bar
}