9RIA.com天地会 - 论坛

返回列表 发帖

天地培训

9RIA天地会官方培训机构

Adobe官方认证培训中心

[代码] 在FP10下MP3变速播放

(11楼更新源文件,加载更快,修正遇见文件尾的错误)

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

查看例子(Run Demo),需要FlashPlayer10:


点击其中的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):

注意:请使用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()
错误,大家自行处理一下 :)

[ 本帖最后由 kingnare 于 2008-10-25 03:57 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
2

评分人数

  • 龙城flash

  • Swfdong

龙城flash 赐本贴 银子 + 10  诏曰: 还要努力
Swfdong 赐本贴 威望 + 2 银子 + 5  诏曰: 灰常好帖:-)

Kingnare
网站试运行

天地人才库
墙裂支持:-)
放了首歌,结果减速&加速后都会变得很有爱=v=这就是可以基于变速来玩变调的例子了~
期待FlashCS4 for Mac  ing...
http://blog.swfdong.org

TOP

原来是在等Mac版的CS4啊,我一直奇怪你为什么不上CS4,原来是这个原因
Kingnare
网站试运行

TOP

好兄弟,讲义气!---by eko

踏上天地会荣耀之路!

 

申请舵主

加入掘金队

加入译林军

知识专题整理

 

咨询(QQ):

1442604479(小地)

 

原帖由 kingnare 于 2008-10-23 23:45 发表
原来是在等Mac版的CS4啊,我一直奇怪你为什么不上CS4,原来是这个原因

这个extract的实现原理我大概弄明白了。
他是把要播放的数据分成一小段一小段来播放,每当读下一段时会广播SAMPLE_DATA那个事件,此时如果修改其data内容,就改变了他播放的内容...
而kingnare兄实现变速的原理,是将Sound对象extract后的ByteArray中[对应位置+偏移量(由速度决定)]的数据,写入SAMPLE_DATA事件的data属性中...
很是聪明滴做法:-)

不过提个小建议:
根据官方文档,Sound.extract是可以只抽取指定位置、指定长度的数据的,可以试着在进行SAMPLE_DATA的写入时再extract所需部分的数据,这样在MP3文件加载完成后就不需要再“卡”一阵了:-)
2

评分人数

龙城flash 赐本贴 银子 + 20  诏曰: 继续努力
kingnare 赐本贴 银子 + 5  诏曰: 好主意

http://blog.swfdong.org

TOP

  好主意 边解边播放
Kingnare
网站试运行

TOP

  我下载一个Flash Player 10 不知道安装到哪去了,打开还是 Flash Player 9

TOP

http://www.adobe.com/support/flashplayer/downloads.html
这个页面上有AX控件和独立播放器
打包:
http://download.macromedia.com/p ... update1_flash10.zip

独立播放器下载后放个固定的地方,然后运行一下,之后再双击打开的SWF文件就都使用刚才运行的flashplayer.exe了。
1

评分人数

龙城flash 赐本贴 银子 + 10  诏曰: 可以播放了。

Kingnare
网站试运行

TOP

回复 7# 的帖子

可以播放了。声音效果有问题,短 而且卡。

TOP

嗯,这个解码后都变成44.1千赫的了,有可能是这个原因。
龙城大大,能否把你音源共享一下,或者共享音源的一部分也可以,偶想拿来做测试
Kingnare
网站试运行

TOP

MP3 1.6 MB 分卷压缩

附件: 您需要登录才可以下载或查看附件。没有帐号?注册

TOP

查到声音为什么播放不连续了,是使用的org.audiofx的mp3类库造成的,对于低码率好像支持不是很好。
所以在下面的测试中把由FileReference加载本地文件这个功能去掉了,直接由URL来加载MP3声音文件了。

按照小东的提示,渐进式读取声音数据,果然不卡了,呵呵。

下面是SWF和ZIP包:




输入框中输入MP3路径,相对的或是完整的都可以,只要能找到MP3文件就成。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
Kingnare
网站试运行

TOP

我现在访问不了网络上的 MP3 ? 
等下我重启一下电脑。

能不能访问本地和网络的效果一样呢。。。。

TOP

本地的话 得输入本地的路径了
比如说 SWF文件和MP3在一个文件夹下,那就可以直接输入MP3的名字了,比如上面ZIP文件夹中的那个sound.mp3

如果在其他盘或目录,那估计路径就要写全了,例如D:/music/sound.mp3

Kingnare
网站试运行

TOP

原帖由 kingnare 于 2008-10-25 03:53 发表
查到声音为什么播放不连续了,是使用的org.audiofx的mp3类库造成的,对于低码率好像支持不是很好。
所以在下面的测试中把由FileReference加载本地文件这个功能去掉了,直接由URL来加载MP3声音文件了。

按照小东的提示,渐进 ...

看来FP10还是有BUG,不知道为什么,在我这里用新版Swf和老版的进行播放某些特定的MP3文件,都会断断续续的。
而播放一些MP3时,是渐进载入的特别卡,整体载入的基本不卡...

[ 本帖最后由 Swfdong 于 2008-10-26 22:04 编辑 ]
http://blog.swfdong.org

TOP

嗯,看来还有得研究哇,我这儿边大都是320kbps的,只是测试了其中几首~~
看来要扩大采样了
Kingnare
网站试运行

TOP

返回列表