AS3中用什么函数可以实现随音乐节奏变化的声音波形?

总的原则是在你加载一首歌之后,play()注册一个enterframe方法。在这种方法中,使用soundmixer。ComputeSpectrum (barray,true,0);//将音频数据转换成字节数组保存在barray中(SoundMixer类会自动获取程序中的声音流)。然后用binary bArray.readFloat()获取每一帧的声音数据,根据这个声音数据做你想做的事情。我举个简单的例子。

公共类sound拉杆扩展Sprite

{

私有var URL:String = " a . MP3 ";

私有var Sound:Sound = new Sound();//创建声音

私人var schannel:sound channel;//创建声音通道

private var barray:ByteArray = new ByteArray();//创建一个字节数组

私有变量:数组;

私有var n:Number = 0;//记录的数量

私有var线:雪碧=新雪碧;//行的容器

公共函数void拉杆():void

{

//var sound test:sound test = new sound test(stage);

//addChild(sound test);

init();

}

私有函数init():void

{

//将mp3文件载入声音并播放。

var req:URL request = new URL request(URL);

sound.load(请求);

sound . play();

this . addchild(lines);

//从加载第一帧开始,触发的事件不断循环。

this.addEventListener(事件。ENTER_FRAME,show);

}

//开始绘图

私有函数显示(evt:Event):void

{

if(math . random()& gt;0.5){

var r:int =-Math.random()*20

}否则{

r = Math.random()*20

}

n = 0;//先清除

lines . graphics . clear();//清除所有图形

//将音频数据转换成字节数组保存在barray中,然后用这些数据生成动态的小竖线。

sound mixer . computespectrum(barray,true,0);

var tempx:int = 0;

var tempy:int = 100;

//画一个动态的小竖线动画,让每一条线都相隔一点距离,所以用i+=16。

for(var I:uint = 0;我& lt400;i += 10)

{

n = barray . read float();

var num:Number = n * 100;

lines.graphics.lineStyle(4,0x 00ff 00);

lines.graphics.moveTo(tempx,tempy);//绘制线条起点

lines.graphics.moveTo(i,100);

lines.graphics.lineTo(i,100-num);//绘制线条终点

lines . graphics . end fill();

tempx = I;

tempy = 100-num;

}

}

}

其实最主要的是你得到的是barray的数据,根据这个数据做出来的东西都可以有跟随音乐波动的效果。