有段时间没有写as3.0成果,现在接上,上次没有发的音频分析器
也快过年了,好像事情越来越多了,我相信这是好兆头,08年是幸运年,09年是转折年
代码如下:
package {
import flash.media.*;
import flash.display.*;
import flash.net.*;
import flash.utils.*;
import flash.events.*;
import flash.xml.*;
public class getshape extends Sprite {
private var s=new Sound ;
private var sc=new SoundChannel ;
private var sbytes=new ByteArray ;//package into utils class
private var s_mc=new Sprite ;
private var url:URLRequest;
private var n;
private var s_height=50;
private const s_row=80;//固定值
private var s_width=3;
private var s_distance=8;
//xml style
private var xml:XML;
private var pic_array_n=new Array ;
private var pic_array_url=new Array ;
private var mc=new MovieClip ;
private var urlloader=new URLLoader ;
private var loader=new Loader ;
//初始化程序
public function getshape() {//public可以外部类访问
playMp3("onelove.mp3");
loadpic();
}
private function loadpic() {//private只允许在内部类中访问
urlloader.addEventListener(Event.COMPLETE,createxml);
try {
urlloader.load(new URLRequest("list.xml"));
} catch (e:TypeError) {
trace("load error xml");
}
}
private function createxml(e:Event) {
xml=new XML(urlloader.data);
xml.ignoreWhite=true;
var picbox=new Object ;
//xmllist:XMLList=xml.@*;//read all attributes list exmaple:xml="" //outprint: 1 a 1.jpg;
for (var i=0; i
pic_array_url.push(xml.elements("pic")[i].attributes()[1]);//so same to:xml.elements("pic")[i].@url;
loader.load(new URLRequest(pic_array_url[i]));
var mc=new MovieClip();
mc.graphics.beginFill(0xffffff,1);
mc.graphics.drawRect(0,0,120,90);
mc.graphics.endFill();
mc.x=uint(i%2)*200+50;
mc.y=uint(i/2)*200+50;
addChildAt(mc,i);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loadxmlpicProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadxmlpicComplete);
}
}
private function loadxmlpicProgress(e:ProgressEvent) {
var loads:Number=Math.round(e.bytesLoaded/e.bytesTotal*100);
}
private function loadxmlpicComplete(e:Event) {
//mc.addChild(loader);
trace(“ok”);
}
//MP3音频
private function playMp3(url) {
s.load(new URLRequest(url));
sc=s.play();
addEventListener(Event.ENTER_FRAME,s_enterframe);
sc.addEventListener(Event.SOUND_COMPLETE,s_replay);
}
private function s_enterframe(e:Event) {
SoundMixer.computeSpectrum(sbytes,false,0);
//first
var g=this.graphics;
g.clear();
for (var i=0; i
g.beginFill(0xffffff,.1);
g.moveTo(i*s_distance,0);
g.lineTo(i*s_distance+s_width,0);
n=Math.abs(sbytes.readFloat()*s_height);
g.lineTo(i*s_distance+s_width,s_height-n);
g.lineTo(i*s_distance,s_height-n);
g.endFill();
}
}
private function s_replay(e:Event) {
trace(“ok”);
}
}
}
ps:如何让音乐自动重播?

您好,我想请教一个问题:
二月 11th, 2011 at 07:46我想实现一个功能:通过分析没有背景音乐,全部是真人对话的mp3或wav文件进行自动断句,记录每一句开始的时间标签。这个功能利用as3.0能否实现?
盼指教:)
引用
大致了解你的意思,as能实现断句,这是音频的定位而已
三月 9th, 2011 at 14:42引用
再详细补充一下:就是通过波形分析进行定位,找到人对话的间歇。
三月 22nd, 2011 at 09:07引用
如果为了解决这个问题,那么有其他方法,就是笨方法,呵呵,如果是处于一种研究,那么至今还没涉及,语音识别技术。
四月 19th, 2011 at 01:51另外,波形本身是数据实现图形的,所以可以通过数据着手,这个音频要研究还有很大一块内容了,可以尝试down音频解析工具,看看怎么动作,再投入as3
引用