flash实时音乐真实频率变化(全as)正在直播教程

效果显示:http://k.thec.cn/liuping2006/music_jump_line/music_jump_line.swf

如果感大家兴趣,我将介绍制作方法。

实时音频跳动条的制作
Flash对声音的处理主要有:
就目前Flash的已有版本(Flash5、FlashMX、Flash2004、Flash8),Flash对声音文件的处理能力还是不够强大的。
mp3是目前网络上最为大众的声音格式,原因是mp3有高效率的压缩(约1/12),并能很好地保持原有声音的音质。
Flash有两种播放mp3的方法,一是将mp3导入Flash内部(直接放在时间帧上,如果声音文件较大,则会占用很多的帧;放在库中,用AS绑定声音),尽管flash可以再次压缩mp3,但仍会使swf文件增肥;二是将mp3放置在Flash外部,用AS将外部的mp3导入到swf播放文件中。但不管上述那种方法,都不能实时显示声音文件的频谱数据。在播放声音时,如果能实时地显示声音的频谱特性,像一些著名媒体播放器那样在播放声音时有许多跳动小块伴随着美妙的音乐舞动身姿,对欣赏者来说能起到“声色俱全”的作用。
   Flash本身不能直接采集到声音文件中的频谱数据,必需借助其它软件,如FlashAmp(适合较小mp3文件,Flash通过数组存贮来自FlashAmp收集到的mp3频谱数据,而如果mp3文件较大时,FlashAmp收集到的mp3频谱数据将会十分庞大)。而另一软件SwiftMP3在将mp3转成为swf时存贮了来自mp3中的音频数据等,并以变量名s0、s1、s2、s3、……、s17共18个变量表示。如某个mp3通过SwiftMP3转换成的swf中存贮了来自mp3中的下列数据:
Title = "";
Artist = "";
Album = "";
Id3 = "1";
// [Action in Frame 2]
// [Action in Frame 3]
s0 = "1";
s1 = "11";
s2 = "4";
s3 = "3";
s4 = "2";
s5 = "6";
s6 = "2";
s7 = "3";
s8 = "4";
s9 = "3";
s10 = "2";
s11 = "2";
s12 = "1";
s13 = "2";
s14 = "1";
s15 = "1";
s16 = "1";
s17 = "1";
// [Action in Frame 4]
s0 = "3";
s1 = "5";
s2 = "8";
s3 = "1";
s4 = "4";
s5 = "2";
s6 = "1";
s7 = "2";
s8 = "3";
s9 = "1";
s10 = "3";
s11 = "4";
s12 = "1";
s13 = "2";
s14 = "1";
s15 = "5";
s16 = "2";
//由于篇幅原因,中间部分省略
tellTarget("_level0"){
    stop();
    gotoAndPlay("");}

因此,在Flash中可以访问上述表中的所有变量,如标题名”Title”、艺术家” Artist”、专集” Album”、 Id3的值以及每一帧上的变量名及其变量值(s0 = "1";s1 = "11";s2 = "4";……;s17 = "2";)。下以一实例说明如何访问mp3中变量完成Flash中实时音频跳动条的制作
一、        准备素材
利用SwiftMP3处理几首mp3为swf,此名称分别为1.swf、2.swf、3.swf、….,并存放在一个名为mousic_lib的文件夹里。
二、        制作过程
①打开Flash新建一名为music_jump_line.fla的文件。设置此flash文件场景大小为89*70(目的是为以后其它场合需要它作为小附件时的调用)。
②创建一个名称为music_cell电影元件,它在库中的链接名取为music_cell,在此music_cell电影元件内图层1上创建3个关键帧。把主代码封存在一个电影元件里的目的也是为以后其它flash里要使用这个实时音频跳动条时提供方便,直接复制过去就行了。
在第1个关键帧上写如下as:
var g = 1;//定义一个变量g,用它来控制外部包含mp3音乐的1.swf、2.swf、3.swf文件名。
在第2个关键帧上写如下as:
stop();
//.................1.................
var col = 0x51E450;
//跳动块色
var colbt = 0xDDCE22;
//按钮色
var txtcol = 0xFFFFFF;
//进度显示字体颜色
this.createEmptyMovieClip("line_cell", 1);
with (line_cell) {
        moveTo(0, 0);
        beginFill(col);
        lineTo(4, 0);
        lineTo(4, 2);
        lineTo(0, 2);
        endFill();
        _visible = 0;
}
//......1........音乐跳动小块
//................2...................
for (var i = 0; i<18; i++) {
        line_cell.duplicateMovieClip("line_cell"+i, i+20,{_x: 5*i,_y:-1});        
        line_cell.duplicateMovieClip("m"+i, 40+I,{_x:5*i});        
}
//......2.....以上为最上层跳动块以及跳动竖条
this.createEmptyMovieClip("mm", 0);
mm.loadMovie("mousic_lib/"+g+".swf");
//.................3...................
onEnterFrame = function () {
        var mm_c = mm._currentframe;
        var mm_t = mm._totalframes;
        var mm_p = Math.round((100*mm_c/mm_t)*100)/100;
        if (mm_p<10) {
                pstext.text = "0"+mm_p+"%";
        } else {
                pstext.text = mm_p+"%";
        }
        pstext.setTextFormat(TF);
        // 文本格式设置时特别要注意文字内容必须放在"baifenbitext.setTextFormat(TF);"之前,否则设置无效!!!
        if (mm._currentframe == mm._totalframes) {
                g++;
                mm.loadMovie("mousic_lib/"+g+".swf");
        }
        if (mm.Id3 == undefined) {
                mytext.text = "load..";
                g = 1;
                mm.loadMovie("mousic_lib/"+g+".swf");
        }
        for (i in mm) {
                if (mm<20) {
                        for (var i = 0; i<18; i++) {
                                this["line_cell"+i]._y =-1-mm["s"+i]*4;
this["m"+i]._yscale= Math.floor((this["line_cell"+i]._y-this["m"+i]._y)/this["m"+i]._height)*100;
                        }
                }
        }
};
//.........3........
//....................4.......................
this.createEmptyMovieClip("playbtn", 6);
with (playbtn) {
        moveTo(65, 4);
        beginFill(colbt);
        lineTo(73, 9);
        lineTo(65, 14);
        lineTo(65, 4);
        endFill();
}
this.createEmptyMovieClip("stopbtn", 7);
with (stopbtn) {
        moveTo(14, 4);
        beginFill(colbt);
        lineTo(24, 4);
        lineTo(24, 14);
        lineTo(14, 14);
        lineTo(14, 4);
        endFill();
}
playbtn.onRelease = function() {
        delete onEnterFrame;
        unloadMovie("mm");
        gotoAndPlay(3);
};
stopbtn.onRelease = function() {
        unloadMovie("mm");
        delete onEnterFrame;
};
//.......4.......播放与停止按钮
//..................5..................
this.createEmptyMovieClip("nextbtn", 9);
with (nextbtn) {
        moveTo(80, 4);
        beginFill(colbt);
        lineTo(88, 8);
        lineTo(88, 4);
        lineTo(89, 4);
        lineTo(89, 14);
        lineTo(88, 14);
        lineTo(88, 10);
        lineTo(80, 14);
        lineTo(80, 4);
        endFill();
}
nextbtn.duplicateMovieClip("prevbtn", 10);
prevbtn._xscale = -100;
prevbtn._x = 89;
nextbtn.onRelease = function() {
        delete onEnterFrame;
        unloadMovie("mm");
        g++;
        gotoAndPlay(3);
};
prevbtn.onRelease = function() {
        delete onEnterFrame;
        unloadMovie("mm");
        g--;
        gotoAndPlay(3);
};
//......5......以上为前进与后退按钮
//................6................
this.createTextField("pstext", 8, 25, 2, 41, 20);
TF = new TextFormat();
TF.font = "Arial";
TF.size = 10;
TF.color = colbt;
TF.align = "center";
//........6..........以上为动态显示播放进度的文本
this.createEmptyMovieClip("bjline", -2); //.........背景..........
with (bjline) {
        lineStyle(0, 0x1A7133, 50);
        moveTo(0, 16);
        beginFill(0x003333, 90);
        lineTo(89, 16);
        lineTo(89, -50);
        lineTo(0, -50);
        lineTo(0, 16);
        endFill();
}
this.createEmptyMovieClip("line", -1);//跳动条底座水平线
with (line) {
        lineStyle(0, 0x00FF00, 50);
        moveTo(0, 0);
        lineTo(89, 0);
        lineTo(0, 0);
}
//...............背景"music"字................................
this.createTextField("sxl_text", -20, 10, -59, 70, 26);
TFS = new TextFormat();
TFS.font = "Arial Black";
TFS.size = 20;
TFS.color = 0x003939;
TFS.align = "center";
sxl_text.text = "music";
sxl_text.setTextFormat(TFS);
//...........................................................
在第3个关键帧上写如下as:
gotoAndStop(2);
③回到主场景,在第1帧上写as:
this.attachMovie("music_cell", "mc", 1,{_y:50});
//至此大功告成!
④测试此music_jump_line.swf文件,可以看到舞台上的绿色小精灵随着音乐翩翩起舞。通过下方的几个按钮可以控制音乐的播放与停止,前一首与后一首的选择。
三、        制作后记
1、        基本技术:
①if(条件) {        要执行的指令} 条件循环, 如果条件为 true,则 Flash 将运行条件后面花括号 ({}) 内的语句
②with (对象) {要执行的指令} 动作使用范围,参数计算对象中的表达式和动作。这可以使您不必重复书写对象的名称或路径
③for(初始值; 循环条件; 计算的表达式) {        循环体内要执行的指令} 条件循环
④myMovieClip.createEmptyMovieClip (新实例名, 深度)创建作为现有影片剪辑子级的空影片剪辑方法
⑤myMovieClip.createTextField (新实例名, 深度,x坐标,y坐标,文本宽度,文本高度) 创建作为由 MovieClip 参数指定的影片剪辑子级的新空文本字段的方法
⑥myMovieClip.duplicateMovieClip(新实例名, 深度[,初始值]) 复制影片剪辑方法
⑦myMovieClip.onEnterFrame=function(){}以帧频不断刷新的事件处理函数
⑧myMovieClip.onRelease () {}点击后释放时的事件处理函数
⑨myMovieClip.attachMovie(“库中链接名”, 新实例名, 深度[,初始值] ) 从库中取一个元件并将其附加到舞台上由 MovieClip 指定的影片中的方法
2、        关键技术:
    for (i in mm) {//遍历电影实例mm
        if (mm<20) {//如果mm中的变量个数小于20
        for (var i = 0; i<18; i++) {//因为mm中的变量s有18个
        this["line_cell"+i]._y = -1-mm["s"+i]*2;/*各个跳动小块的高度变化由mm中的对应数值来影响。负号是因为各个跳动小块的注册点在左上角,因此,要使它向上跳动时,其y值应取负;*2是因为增大向上跳动的幅度,使运动明显。
                                外部导入的1.swf、2.swf、….、n.swf。音乐文件中含有音乐数据其变量名为s0、s1、s2、s3、....s17,它们在每一帧上的值都有变化*/
this["m"+i]._yscale= Math.floor((this["line_cell"+i]._y-this["m"+i]._y)/this["m"+i]._height)*100;/*跳动小竖条在y轴方向上的缩放由上述的跳动小块的y值决定*/
                        }
                }
        }
};
3、        基本特点:
①        此软件按顺序播放外部音乐swf文件,到最后一首时会自动跳到第一首从头再播,一直loop。
②        外部音乐swf文件可以不指定个数,music_jump_line.swf会自动控制播放。

时间: 2024-08-02 13:03:01

flash实时音乐真实频率变化(全as)正在直播教程的相关文章

llcon 3.2.0发布 互联网实时音乐演奏

该llcon软件让音乐通过互联网进行实时音乐演奏.有一个llcon服务器,收集每个llcon客户的音频数据,音频数据混合,并发送混合到每个客户端. llcon 3.2.0实施新的GUI软件的主窗口的皮肤.一个可用的服务器列表显示在下拉按钮.抖动缓冲区的大小,现在可以独立设置为客户机和服务器.自动抖动缓冲算法进行了改进.Linux,Qt的项目文件中也使用过.设置文件存储在应用程序目录,而不是主目录.新的服务器列表服务器设置在主体服务器GUI,并支持设置文件对服务器的增加操作.JACK音频接口错误被

DW添加热区以及制作全屏店招的教程

  淘宝店铺装修一直是美工比较热议的话题,同时装修出"高大上"的店铺也让卖家引以为傲. 现在旺铺支持CSS自定义功能,更是让我们卖家的店铺装修提升到另一个层次,想装修什么样就装修成没什么样,但是这里有个前提是你得懂DW(网页代码编辑器).这对于很多没学过代码的店主就是个很大的考验了,要知道不管是店招,还是导航.全屏轮播.详情页模板等等这些都可以通过CSS来实现.其实不懂问题也不大,下面来说个简单的: DW添加热区以及制作全屏店招的教程

Flash动画制作实例:制作瀑布流水的效果教程

  今天我们来学习制作Flash瀑布流水的效果,使用的工具是Flash8 下面让我们先看看教程最终效果: 效果预览1 效果预览2 1.准备好一张清晰的瀑布图片,启动FLASH,设背景为蓝色,其它默认. 图1 2.文件--导入--导入到库,把图片导入. 图2 3.在第一层的第1 帧,把图片从库里拖进舞台,调整图片和舞台一样大小. 图3 4.打开对齐面版,选相对于舞台,水平对齐,垂直对齐. 图4 5.增加图层2 ,右键点图层1 的第1 帧--复制帧,右键点图层2 的第1 帧,粘贴帧. 图5 图6 6

PicsArt制作全透明手机图片教程

  相信最近大家都知道PicsArt可以做透明手机图片.那么, PicsArt怎么制作全透明手机图片呢?下面,就来看看小编为大家分享的PicsArt制作全透明手机图片教程. 1.打开[PicsArt],进入后点击[一支笔]悬浮图标. 2.点击一张[照片](或者从"编辑"里"图库"中进行选择照片),进入到编辑页面后,在下方一排图标中,左右滑动找到[添加照片]按钮. 3.然后再把手机屏幕截图添加上去,然后调整位置和方向,使其适合手型; 4.点击右下角的Normal按钮,

2016电脑组装教程 史上最全自己组装电脑教程

  DIY电脑一直都是电脑爱好者非常喜欢的,电脑组装通常包括电脑硬件的选择,DIY硬件组装以及操作系统安装三个部分.对于电脑爱好者来说,通过自己动手DIY组装电脑,不仅可以更为深刻的认识硬件,了解电脑主机内部结构,还能够学习到安装系统等知识,从中可以带来很多乐趣. 2015电脑组装教程:史上最全自己组装电脑教程 本次电脑组装教程主要包含三个部分,包括电脑配置清单.电脑硬件认识以及电脑组装教程.此前,介绍过的几次组装电脑教程都是不是很详细,这次的装机教程堪称史上最全的,步骤上会介绍的非常细,对于新

.Net魔法堂:史上最全的ActiveX开发教程——开发篇

一.前言   在设计某移动内部自动化运维平台时,经综合考虑终端机性能和功能需求等因素后,决定采用B/S模式,并且浏览器通过ActiveX组件实现与服务器 Agent作P2P的通讯.好处,整个平台以网页形式存在,界面渲染性能高于桌面应用(终端机性能其低):通过ActiveX组件与各服务器Agent进 行P2P通讯,不对Web服务器造成压力.风险,当用ActiveX传输上百兆的文件时,会对浏览器造成哪些影响:团队中没有类似解决方案的经验供借鉴. 解决方法:前期对主要功能进行快速原型设计.开发.验证和

.Net魔法堂:史上最全的ActiveX开发教程——发布篇

一. 前言    接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程--开发篇>,本篇讲述如何发布我们的ActiveX.   二.废话少讲,马上看步骤!    1. 打包  C#开发的Activex不像`OCX`那样直接通过`regsvr32.exe`注册,而采用两种方式发布使其运行在浏览器上.  1. 离线安装:将控件类库打包成MSI安装包,然后在客户端安装. 1.1. 添加安装项目 1.2. 右键"添加"->"项目输出",选择Acti

.Net魔法堂:史上最全的ActiveX开发教程——部署篇

一.前言   接<.Net魔法堂:史上最全的ActiveX开发教程--发布篇>,后我们继续来部署吧!   二. 挽起衣袖来部署     ActiveX的部署其实就是客户端安装ActiveX组件,对未签名和已签名的ActiveX,分别有对应的部署方式.   1. 部署未签名的ActiveX 未签名的ActiveX控件不受浏览器端信任,默认是不被允许安装的 1. 将网站加入 **可信站点** 2. 在"可信站点"和"Internet"下的 **自定义级别**

flash获取音乐数据流,制作随音乐变化的MC

这个的制作需要获取音频的波谱,把音频的波谱转化为数据,这个东东需要一个软件叫FLASHAMP这个软件很小,而且不需要安装,直接使用,等会儿把这个软件放在下面,送给爱好者(它的使用非常简单,顺便也说说它的使用方法) ----得到音乐的数据后,把这些数据作为数组中的元素,然后通过创建函数来调用,同时把这些值赋给MC的y坐标的缩放或者高度. 一.用FlashAmp获取音频数据,将获得的数据以 txt文本的形式,保存在名为数据流的文件夹中.注意将 txt文本中数据开头修改为mytext=12,13,15