用户名: 密码: 验证码: QQ--程序群:31736530 动画群:38836599
闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash应用开发>列表

在FP10下MP3声音变速播放的解决方案

[来源:as3天地会 | 作者:kingnare  | 时间:2009-02-22 | 点击:  | 收藏本文  【 】]
5uflash文章摘要:龙城大大最近一直在找声音变速播放的解决方案。今天偶得一方法:使用Sound的extract方法将声音数据变为raw sound data, 然后在SampleDataEvent.SAMPLE_DATA事件中重写播放缓冲区数据。当然用FP9来播放是不行了,那上的解决方案小东研究的比较深,我对二进制的东东很晕。

龙城大大最近一直在找声音变速播放的解决方案。今天偶得一方法:使用Sound的extract方法将声音数据变为raw sound data,
然后在SampleDataEvent.SAMPLE_DATA事件中重写播放缓冲区数据。当然用FP9来播放是不行了,那上的解决方案小东研究的比较深,我对二进制的东东很晕。

查看例子(Run Demo),需要FlashPlayer10:
ChangeSpeed.swf (35.7 KB)



点击其中的File...按钮加载本地MP3音乐或者写入MP3网址再点击Load按钮,
加载后解析MP3时可能会占用大量CPU资源而"卡"一小会儿,这是正常现象,不用担心.
提供一个地址:http://bgmusic.8dou.net/jjsl/05.mp3,如果不能用可以自己找找或直接使用本地MP3歌曲.

那么怎么变速呢?其实就是改变播放的位置.释出SampleDataEvent.SAMPLE_DATA的一些代码:

  1. var i:int;
  2. var pos:int;
  3. var left:Number;
  4. var right:Number;
  5. i = 0;
  6. while (i++ < buffer)
  7. {
  8.     pos = int(position);
  9.     samplesData.position = pos * 8;
  10.     left = samplesData.readFloat();
  11.     right = samplesData.readFloat();
  12.     event.data.writeFloat(left);
  13.     event.data.writeFloat(right);
  14.     position = position + speed;
  15. }
复制代码

position是播放位置,
speed是播放速度,
buffer值范围为2048~8192,这个区间值ADOBE文档中有说:
"Provide between 2048 and 8192 samples in a SampleDataEvent object."
少于2048不出声,会认为播放结束而调用SoundComplete;大于8192会报错.
从最后一行代码中可以看出是通过改变播放的位置来达到变速播放效果.

至于从本地加载mp3则是使用了FP10的FileRenference.load()方法,得到本地MP3文件的数据,
然后通过org.audiofx.mp3类库将数据转换为含有声音数据的Sound对象.

关于代码就说这么多了,其实做到这里我也有很多不明白的地方,但我是个实用主义者,先学会使用,然后再研究.

源码下载(Download Source):
ChangeSpeedWithoutMP3.zip (496.12 KB)


注意:请使用Flash CS4 Professional打开源文件编译.
代码写得不是很成熟和规范,水平有限,见谅 :)

参考资源与资料:
http://www.flexiblefactory.co.uk/flexible
http://www.bytearray.org/?p=329
http://www.minimal.be/scratch/
http://www.kaourantin.net/2008/0 ... e-noise-part-3.html
http://www.flashbrighton.org/wordpress/?p=9
http://www.blixtsystems.com/2008 ... nd-sampledataevent/

P.S. 播放完毕后会出现:
     Error: Error #2030: 遇到文件尾。
        at flash.utils::ByteArray/readFloat()
        at com.kingnare.media::SoundSpeed/sampleDataHandler()
错误,大家自行处理一下 :)

原帖地址

http://bbs.actionscript3.cn/thread-14039-1-5.html


文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:flash打造视频照相系列教程三
下一篇:Flash地图编辑器下载
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  Flash 3d
  相关文章
·Flash性能优化的一些细节
·关于游戏引擎PushButton的教程和
·关于游戏引擎PushButton的教程和
·关于游戏引擎PushButton的教程和
·Flash Player的“跑道/切片模型
·11款基于flash的等角(2.5D)引
·flash Undo/Redo的实现原理和方
·控制加载flash文件尺寸大小-uilo
·[flash疯狂破解加密系列三]内存
·[flash疯狂破解加密系列二]疯狂
  热门文章
·Flash进度条的制作详细讲解(组图)
·Flex 3 AdvancedDataGrid的使用(第二
·全Flash动画网站实现的基础教学
·FLV播放器汇总
·FLASH+XML相册(附源码)
·flash幻灯片网页效果
·超酷flash光晕移动效果
·Flash打造简单的飘雪动画视觉特效
·flash水影效果字
·flash春雷闪电效果
·Flash制作大雪纷飞效果动画
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号