首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制m4a文件

如何控制m4a文件
EN

Stack Overflow用户
提问于 2013-11-19 21:02:58
回答 1查看 158关注 0票数 1

我正在播放m4a文件,这些文件要求我使用NetStream对象并希望使用SoundChannel对象来控制音频(因为这是我知道的将HSlider控件与音频文件同步的唯一方法)。我的问题是,我不能连接声音通道与音频源。事件处理程序button1_clickHandler甚至不重新定义SoundChannel对象的存在。有办法用SoundChannel来控制这种类型的音频文件吗?如果不是,我如何设置HSlider的位置--我尝试过使用HSlider.value,但不知怎么会被覆盖。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            private var audioExample:AudioExample_M4A;
            public function init():void{
                audioExample = new AudioExample_M4A();
            }
            private function button1_clickHandler(event:MouseEvent):void{
                if(audioExample.soundChannel){
                    audioExample.soundChannel.stop()
                    trace("Yes")
                }else{
                    trace("No")
                }

            }
        ]]>
    </mx:Script>
    <mx:Button label="Play / Pause"  click="button1_clickHandler(event)"/>
</mx:Application>

下面是类文件AudioExample_M4A.as:

代码语言:javascript
复制
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.SoundChannel;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public class AudioExample_M4A extends Sprite {
        public var soundChannel:SoundChannel= new SoundChannel();;
        public var temp:String = new String()

        public var audioURL:String = "badge.m4a";
        private var connection:NetConnection;
        public var stream:NetStream;

        public function AudioExample_M4A() {
            connection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            connection.connect(null);
        }


        private function netStatusHandler(event:NetStatusEvent):void {
            switch (event.info.code) {
                case "NetConnection.Connect.Success":
                    connectStream();
                    break;
                case "NetStream.Play.StreamNotFound":
                    break;
            }
        }

        private function connectStream():void {
            stream = new NetStream(connection);
            stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            stream.client={onMetaData:function(obj:Object):void{
                trace("metadata: duration=" + obj.duration);
                }
            }
            soundChannel = stream.play(audioURL) as SoundChannel;
        }
}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-19 23:34:52

不能SoundChannel对象控制NetStream对象。这是两种完全不同的媒体播放方法,据我所知,它们并不具有共同的基础。

若要允许滑块控制指针位置,需要执行以下操作:

  • 按百分比获得滑块位置(slider.position * slider.minimum/slider.maximum在火花中,在MX中不确定)
  • 得到歌曲的持续时间。这是通过NetStream.onMetaData检索的。
  • 使用滑块百分比乘以持续时间的参数调用NetStream.seek() (seek()期望该值以秒为单位)。所以NetStream.seek( duration * positionPercentage )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20081975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档