Flex4制作一个带波形的MP3播放器的例子

下面是一个使用Flex制作的MP3播放器,除了音量调节,左右声道调节,播放暂停外。还会通过对声音的采样进行动态波形图的绘制。效果图如下:

 

代码如下

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="
http://ns.adobe.com/mxml/2009
"

               xmlns:s="library://ns.adobe.com/flex/spark"

               creationComplete="initApp()"

               xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>

        <![CDATA[

            //导入声音相关类

            import flash.display.Graphics;

            import flash.events.TimerEvent;

            import flash.filters.GlowFilter;

            import flash.media.Sound;

            import flash.media.SoundChannel;

            import flash.media.SoundMixer;

            import flash.media.SoundTransform;

            import flash.net.URLRequest;

            import flash.utils.Timer;

             

            import mx.events.SliderEvent;

            //声音对象与声音控制对象

            private var sound:Sound;

            private var soundChannel:SoundChannel;

            //播放位置和播放状态

            private var position:Number = 0;

            private var isPlaying:Boolean = false;

            //定时器

            private var soundTimer:Timer = new Timer(100,0);

             

            private function initApp():void{

                //还没加载完,按钮不可用

                btn_play.enabled = false;

                btn_pause.enabled = false;

                //左右声道均衡

                slider_pan.value = 0;

                //音量最大

                slider_volume.value = 1;

                //

                var 
url:URLRequest
 = new URLRequest("./music.mp3");

                 

                sound = new Sound();

                //声音加载完毕监听

                sound.addEventListener(Event.COMPLETE, completeHandler);

                //声音播放完毕监听

                sound.addEventListener(Event.SOUND_COMPLETE,mp3EndHandler);

                sound.load(url);

                //滑块与按钮监听

                slider_volume.addEventListener(SliderEvent.CHANGE,changeVolume);

                slider_pan.addEventListener(SliderEvent.CHANGE,changePan);

                btn_play.addEventListener(MouseEvent.CLICK,playSound); 

                btn_pause.addEventListener(MouseEvent.CLICK,pauseSound);

                //定时器添加监听

                soundTimer.addEventListener(TimerEvent.TIMER,showSoundWave);

                //定义一个发光效果,用于波形图上

                var glow:GlowFilter = new GlowFilter();

                glow.color = 0xAEB4E6;

                glow.blurY = 6;

                glow.strength = 3;

                soundWave.filters = [glow];

            }

             

            //改变音量

            internal function changeVolume(evt:SliderEvent):void{

                //得到声音的soundTransform对象

                var soundControl:SoundTransform = soundChannel.soundTransform;    

                soundControl.volume = evt.value;

                //应用新的设置

                soundChannel.soundTransform = soundControl;

            }

             

            //左右声道

            internal function changePan(evt:SliderEvent):void{

                var soundControl:SoundTransform = soundChannel.soundTransform;    

                soundControl.pan = evt.value;

                soundChannel.soundTransform = soundControl;

            }

             

            //加载完毕

            internal function completeHandler(evt:Event):void{

                btn_play.enabled = true;

                btn_pause.enabled = true;

            }

             

            //播放完毕

            internal function mp3EndHandler(evt:Event):void{

                position = 0;

                soundTimer.stop();

                isPlaying = false;

            }

             

            //开始播放

            internal function playSound(evt:MouseEvent):void{

                soundChannel = sound.play();

                isPlaying = true;

                position = 0;       

                soundTimer.start();

            }

             

            //暂停

            internal function pauseSound(evt:MouseEvent):void{

                //判断是否在播放      

                if(isPlaying){

                    position = soundChannel.position;

                    soundChannel.stop();

                    soundTimer.stop()

                }else{

                    soundChannel = sound.play(position);

                    soundTimer.start();

                }

                isPlaying = !isPlaying;

            }

             

            //显示波形

            internal function showSoundWave(evt:TimerEvent):void{

                 

                var g:Graphics = soundWave.graphics;

                //清除以前绘制对象

                g.clear();

                //接受波形数据

                var soundData:ByteArray = new ByteArray();

                SoundMixer.computeSpectrum(soundData,true,0);

                //线条样式

                g.lineStyle(1,0x006699,1);

                //i每次加2,读取128个数据单位

                //0~255是左声道,256~512是右声道

                for(var i:Number = 0;i<256;i+=2){

                    //读取32位的浮点数

                    var n:Number = soundData.readFloat();

                    //放大32倍,看得更清楚

                    g.lineTo(i,36*n);

                    g.moveTo(i,36*n);

                }

            }

        ]]>

    </fx:Script>

     

    <s:Panel x="37" y="51" width="337" height="170" title="Mp3播放器">

        <s:HSlider id="slider_volume" x="42" y="18" width="90"

                   minimum="0" maximum="1" liveDragging="true"/>

        <s:HSlider id="slider_pan" x="215" y="18" width="90"

                   minimum="-1" maximum="1" liveDragging="true"/>

        <s:Label x="3" y="19" text="音量:"/>

        <s:Label x="154" y="20" text="左右声道:"/>

        <s:Group styleName="soundBox" x="6" y="58" width="256" height="36">

            <s:Group width="100%" height="100%" id="soundWave" >

                 

            </s:Group>

        </s:Group>

        <s:HGroup bottom="10">           

            <s:Spacer width="2" />

            <s:Button label="播放" id="btn_play" width="50" height="20"/>

            <s:Spacer />

            <s:Button label="暂停" id="btn_pause"  width="50" height="20"/>        

        </s:HGroup>

    </s:Panel>

</s:Application>

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索代码
flex js mp3播放器、flex 教程 mp3播放器、flex mp3 播放器、带波形的音频播放器、带有波形图的播放器,以便于您获取更多的相关知识。

时间: 2024-10-25 20:31:52

Flex4制作一个带波形的MP3播放器的例子的相关文章

Swift 制作一个带动画效果的环形进度条例子

1,带动画效果的环形进度条 下面我们演示如何制作一个环状进度条组件,当进度改变时,进度条长度变化时是有动画效果的(我们还可以设置动画时间,或者关闭动画),效果图如下: (1)动画实现原理 使用 Core Animation 动画根据进度改变进度条(CAShapeLayer)的 strokeEnd. (2)组件代码(OProgressView.swift) import UIKit   @IBDesignable class OProgressView: UIView {          str

制作一个全功能的FLV播放器_Flash教程

本文选自<Flash MX Professional 2004第一步>一书  作者 陈冰  创建一个全功能的FLV播放器 我们将制作的这个FLV播放器由这样几部分组成: 一个用于显示视频图像的视频对象, 三个分别用于播放.暂停和停止视频的按钮, 以及一个用于显示缓冲区装载进度的动态文本. 1. 创建三个按钮元件,分别命名为"播放"."暂停"."停止",将其各自一个实例拖放到场景舞台中. 2. 创建一个视频元件,将其一个实例拖放到场景舞

java新人求代码:用myeclipse制作一个带链接的网页,该网页可实现冒泡排序

问题描述 java新人求代码:用myeclipse制作一个带链接的网页,该网页可实现冒泡排序 用myeclipse10制作一个网页,该网页带有提交按钮,点击该按钮后可以实现冒泡排序.要全部代码,谢谢 解决方案 用不用eclipse就没关系了,这个用js就能实现,不需要服务器端,用记事本就能写.http://www.codesec.net/view/176782.html 解决方案二: 首先,建议了解下java web基础,知道怎么从前台页面,到后台的执行流程. 其次,设计页面元素,确定你的冒泡排

我用J2ME写了一个MP3播放器,在eclipse上能打包,不能打混淆包,生成的.jar文件在手机上不能安装,出错信息提示为“缺少关键信息”,各位大侠,能不能帮

问题描述 我用J2ME写了一个MP3播放器,在eclipse上能打包,不能打混淆包,生成的.jar文件在手机上不能安装,出错信息提示为"缺少关键信息",各位大侠,能不能帮我解决一下 解决方案 解决方案二:可能手机上缺少信息吧...只是猜测..解决方案三:没弄过j2me解决方案四:eclipse上的路径有空格吧把整个文件放在WTK下用WTK打包,混淆,就行解决方案五:在eclipse中,使用混淆工具打包必须下载PROGUARD插件(http://sourceforge.net/proje

我的Android进阶之旅------&amp;gt;Android MediaPlayer播放mp3的实例--简易mp3播放器

大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的. 首先来看看MediaPlayer的生命周期: 从MediaPlayer的生命周期图或者说是状态转移图上来看: 当一个MediaPlayer对象别创建或者调用reset()方法之后,它处于空闲状态,在调用release()方法

如何用C#进行Winform MP3播放器开发

总结一下,下午半天进行的MP3播放器的开发:  首先,新建一个解决方案:命名MP3solution,设置FormBorderStyle为None,即上面的图标,最大化最小化按钮隐藏,但如图所示还有最大化关闭按钮,这时自己添加的两个PictureBox控件,下面的暂停,停止,静音等也是PictureBox控件设置其Image属性为properties资源中的图片.如何导入图片资源也是一个关键点.我们点击Properties下的Resources文件,然后在添加资源中添加图片资源PNG图片.值得一提

MP3播放器教程之二:歌词同步

上次说到了MP3播放器中的LRC歌词分析,今天我们来说一下如何把LRC歌词与mp3同步播放. 在as2里,播放mp3我们一般会用sound或者MediaPlayback组件...前面是的声音管理类,后者则支持mp3与flv的播放.. 如果简单的做mp3播放器..我们直接使用sound就可以解决基本的需求,不过为了更好的同步LRC同步,我们将使用MediaPlayback组件,因为MediaPlayback提供了cuePoint(提示点)功能,使用该功能,我们就可以把歌词数组里的时间添加到Medi

MP3播放器教程之一:LRC歌词分析

很多网友对我之前发的MP3播放器很兴趣...于是准备写一个教程,把里边用到了一些功能详细介绍一下... 原理:其实lrc文件不过是固定格式的一个文本文档. 由[时间]歌词 或[时间][时间...]歌词 这样的形式保存 那么先以换行符分割行,再以"]"分割歌词与时间.把歌词与时间整理存进数组就可以了. 代码:直接看代码吧   代码没怎么优化,写得挺乱了,别见怪   用时直接用: getlrc(lrc文件路径就可以了) 歌词会保存在一个叫newlrc的数组里.当然改一下做成返回数组也可以,

MP3播放器的消亡之路

iPod等音乐播放器改变了人们听音乐的方式,如今却在智能手机的冲击下不断沉沦导语:美国科技博客Business Insider今天刊文称,风靡一时的MP3播放器正在走向消亡.由于功能已被智能手机涵盖,因此MP3播放器的销售在智能手机热潮的影响下快速萎缩. 以下为文章全文: 10年前刚刚问世时,MP3播放器是数字革命的先锋.然而,随着消费者转向智能手机等其他数码产品,2012年英国市场上iPod和其他MP3播放器的销量大幅下降. 根据市场研究公司Mintel的数据,2012年,英国市场MP3播放器