AS3中那种随着音乐节奏变换的声波图形要用什么函数才能实现呢?
答案:1 悬赏:70 手机版
解决时间 2021-03-05 10:44
- 提问者网友:饥饿走向夜
- 2021-03-05 04:26
求教!谢谢,
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-03-05 05:07
大概原理就是,你load完一首歌之后,play(),在注册一个enterframe方法,在这个方法内,用SoundMixer.computeSpectrum(bArray,true,0); //把音频数据转化为字节数组,并保存在barray里,(SoundMixer类会自动获取在程序中的声音流).然后用二进制的bArray.readFloat()得到每一帧的声音数据,根据这个声音数据做你想做的事,我举个简单的例子。
public class SoundDrawBar extends Sprite
{
private var url:String = "a.mp3";
private var sound:Sound = new Sound(); //创建声音
private var schannel:SoundChannel; //创建声音通道
private var barray:ByteArray = new ByteArray(); //创建字节数组
private var ary:Array;
private var n:Number = 0; //记录数量
private var lines:Sprite = new Sprite ;//线条的容器
public function SoundDrawBar():void
{
// var soundTest:SoundTest = new SoundTest(stage);
// addChild(soundTest);
init();
}
private function init():void
{
//将mp3文件载入到声音并播放
var req:URLRequest = new URLRequest(url);
sound.load(req);
sound.play();
this.addChild(lines);
//从载入第一帧开始,就不断循环触发的事件
this.addEventListener(Event.ENTER_FRAME, show);
}
//开始绘图
private function show(evt:Event):void
{
if(Math.random() > 0.5){
var r:int =-Math.random()*20
}else{
r = Math.random()*20
}
n = 0; //先清零
lines.graphics.clear(); //清除所有图形
//把音频数据转化为字节数组,并保存在barray里,之后将会用这些数据生成动态变化的小竖线
SoundMixer.computeSpectrum(barray,true,0);
var tempx:int = 0;
var tempy:int = 100;
//绘制动态的小竖线动画,让每条线都隔一点距离,所以用i+=16
for(var i:uint = 0; i < 400; i += 10)
{
n = barray.readFloat();
var num:Number = n * 100;
lines.graphics.lineStyle(4, 0x00ff00);
lines.graphics.moveTo(tempx, tempy); //绘制线条起始点
lines.graphics.moveTo(i, 100);
lines.graphics.lineTo(i, 100 - num); //绘制线条终点
lines.graphics.endFill();
tempx = i;
tempy = 100 - num;
}
}
}
其实主要你拿到了barray的数据,根据这数据做出来的东西,都可以有跟随音乐波动的效果。
public class SoundDrawBar extends Sprite
{
private var url:String = "a.mp3";
private var sound:Sound = new Sound(); //创建声音
private var schannel:SoundChannel; //创建声音通道
private var barray:ByteArray = new ByteArray(); //创建字节数组
private var ary:Array;
private var n:Number = 0; //记录数量
private var lines:Sprite = new Sprite ;//线条的容器
public function SoundDrawBar():void
{
// var soundTest:SoundTest = new SoundTest(stage);
// addChild(soundTest);
init();
}
private function init():void
{
//将mp3文件载入到声音并播放
var req:URLRequest = new URLRequest(url);
sound.load(req);
sound.play();
this.addChild(lines);
//从载入第一帧开始,就不断循环触发的事件
this.addEventListener(Event.ENTER_FRAME, show);
}
//开始绘图
private function show(evt:Event):void
{
if(Math.random() > 0.5){
var r:int =-Math.random()*20
}else{
r = Math.random()*20
}
n = 0; //先清零
lines.graphics.clear(); //清除所有图形
//把音频数据转化为字节数组,并保存在barray里,之后将会用这些数据生成动态变化的小竖线
SoundMixer.computeSpectrum(barray,true,0);
var tempx:int = 0;
var tempy:int = 100;
//绘制动态的小竖线动画,让每条线都隔一点距离,所以用i+=16
for(var i:uint = 0; i < 400; i += 10)
{
n = barray.readFloat();
var num:Number = n * 100;
lines.graphics.lineStyle(4, 0x00ff00);
lines.graphics.moveTo(tempx, tempy); //绘制线条起始点
lines.graphics.moveTo(i, 100);
lines.graphics.lineTo(i, 100 - num); //绘制线条终点
lines.graphics.endFill();
tempx = i;
tempy = 100 - num;
}
}
}
其实主要你拿到了barray的数据,根据这数据做出来的东西,都可以有跟随音乐波动的效果。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯