• 通过ByteArray来播放MP3


    在Actionscript3中,由于没有Sound.loadBytes()方法,所以无法通过ByteArray来直接播放MP3。SWF和图片文件(JPEG,GIF和PNG)可以通过Loader.loadBytes加载,并不需要太多的操作就可以使用,而原始的声音数据可以通过Sound对象的SampleDataEvent来播放。现在事情有点棘手,如果你的MP3数据在ByteArray中,如何播放它呢。as3swf库可以帮助你解决这个问题。

    http://bbs.9ria.com/thread-38407-1-1.html
    我们要做以下几步:
      1.创建一个嵌入了MP3的SWF。
      2.通过LoaderoadBytes导入SWF。
      3.实例化绑定的类。
    显然,最麻烦的差事是创建嵌入了MP3的SWF。刚开始,我们要创建一个嵌入了虚拟MP3的虚拟SWF,来看看里面有什么,然后再动态创建这个结构。(We’ll just start by creating a dummy SWF using a dummy MP3 to see how it has to look like, in order to recreate the structure dynamically later.)

    1. package
    2. {
    3.    import flash.display.Sprite;
    4.    public class MP3Wrapper extends Sprite
    5.    {
    6.       [Embed(source="test.mp3")]
    7.       public var soundClass:Class;
    8.    }
    9. }
    复制代码

    这段代码我们只是嵌入进来了MP3,并且把它绑定到一个叫Sound类上。当我们把这个SWF导入到主SWF上的时候,我们可以声明这个类的实例,然后我们得到了一个包含该MP3的声音对象,这时就可以播放它了。
    上面的代码就像这样创建SWF的:

    1. [69:FileAttributes] AS3: true, HasMetadata: false, UseDirectBlit: false, UseGPU: false, UseNetwork: false
    2. [09:SetBackgroundColor] Color: ffffffff
    3. [86:DefineSceneAndFrameLabelData]
    4.    Scenes:
    5.       [0] Offset: 0, Name: Scene 1
    6. [14:DefineSound] SoundID: 1, Format: 2, Rate: 44kHz, Size: 16bit, Type: stereo, Samples: 6867072
    7. [82:DoABC] Lazy: true, Length: 767
    8. [76:SymbolClass]
    9.    Symbols:
    10.       [0] TagID: 1, Name: MP3Wrapper_soundClass
    11.       [1] TagID: 0, Name: MP3Wrapper
    12. [01:ShowFrame]
    13. [00:End]

    这里面有三个有用的标签:
    1.DefineSound:包含了嵌入的MP3.我们所用的MP3是44kHz,16bit,立体声,包含了6867072声音采样。它属于SWF的内部资源,ID为1.
    2.DoABC:包含所有的Actionscript字节,这里是文档类和定义的声音类。
    3.SymbolClass:把Actionscript类文件绑定到库资源上,在我们的例子里,文档类是MP3Wrapper,这里

    最重要的,是被绑定到库资源里的ID为1的MP3Wrapper_soundClass类。

    我们刚刚重用了包括DoABC和SymboClass的所有标签,留下了DefineSound标签,需要我们去动态创建。DefineSound包括了原始的声音数据(这里是MP3),这里面包含了一些标签,它们告诉Flash Player数据的规格数等,比如声音采样的数量、采样率、采样大小、是单声道还是立体声播放,还有库ID等(通常是1,因为我们只有一个库资源)

    TagDefineSound的有一个非常方便的工厂方法,用来从MP3创建自己,这个方法叫做createWithMP3。这个方法自动去扫描MP3,来确定MP3里包含的采样数量,还有采样率等:

    1. var defineSound:TagDefineSound = TagDefineSound.createWithMP3(1, mp3);

    这里代码展示了在运行时创建包含MP3文件的SWF,并开始播放它:

  • 相关阅读:
    用c#写一个json的万能解析器
    使用Xpath从网页中获取数据
    pdf文件流生成pdf文件
    AES加密和Base64混合加密
    参数请求post, get , delete中的基本使用(2)
    参数请求post, get , delete中的基本使用(1)
    java多线程打印ABC
    我的开发工具
    MyBatis的#与$
    struts1
  • 原文地址:https://www.cnblogs.com/xcai/p/2839018.html
Copyright © 2020-2023  润新知