패키지flash.media
클래스public final class SoundChannel
상속SoundChannel Inheritance EventDispatcher Inheritance Object

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

SoundChannel 클래스는 응용 프로그램의 사운드를 제어합니다. 모든 사운드가 사운드 채널에 할당되며 응용 프로그램은 함께 혼합된 여러 사운드 채널을 가질 수 있습니다. SoundChannel 클래스에는 stop() 메서드, 채널의 진폭(볼륨)을 모니터링하는 속성 및 SoundTransform 객체를 해당 채널에 할당하는 속성이 포함되어 있습니다.

예제 보기

참고 사항

Sound
SoundTransform


Public 속성
 속성다음에 의해 정의됨
 Inheritedconstructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다.
Object
  leftPeak : Number
[읽기 전용] 왼쪽 채널의 현재 진폭(볼륨)을 나타내는 0(묵음)부터 1(최대 진폭)까지의 값입니다.
SoundChannel
  position : Number
[읽기 전용] 사운드가 재생 중일 때 position 속성은 사운드 파일에서 재생 중인 현재 위치를 나타냅니다.
SoundChannel
 Inheritedprototype : Object
[정적] 클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다.
Object
  rightPeak : Number
[읽기 전용] 오른쪽 채널의 현재 진폭(볼륨)을 나타내는 0(묵음)부터 1(최대 진폭)까지의 값입니다.
SoundChannel
  soundTransform : SoundTransform
사운드 채널에 할당된 SoundTransform 객체입니다.
SoundChannel
Public 메서드
 메서드다음에 의해 정의됨
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
리스너에서 이벤트 알림을 받을 수 있도록 EventDispatcher 객체에 이벤트 리스너 객체를 등록합니다.
EventDispatcher
 Inherited
이벤트를 이벤트 흐름으로 전달합니다.
EventDispatcher
 Inherited
EventDispatcher 객체에 특정 유형의 이벤트에 대한 리스너가 등록되어 있는지 여부를 확인합니다.
EventDispatcher
 Inherited
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다.
Object
 Inherited
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다.
Object
 Inherited
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher 객체에서 리스너를 제거합니다.
EventDispatcher
 Inherited
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다.
Object
  
채널의 사운드 재생을 중단합니다.
SoundChannel
 Inherited
지정된 객체의 문자열 표현을 반환합니다.
Object
 Inherited
지정된 객체의 프리미티브 값을 반환합니다.
Object
 Inherited
이 EventDispatcher 객체 또는 조상 객체에 지정한 이벤트 유형에 대한 이벤트 리스너가 등록되어 있는지 여부를 확인합니다.
EventDispatcher
이벤트
 이벤트 요약 다음에 의해 정의됨
 Inherited[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 얻어 활성화될 때 전달됩니다.EventDispatcher
 Inherited[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 잃고 비활성화될 때 전달됩니다.EventDispatcher
  사운드 재생이 완료될 때 전달됩니다.SoundChannel
속성 정보
leftPeak속성
leftPeak:Number  [읽기 전용]

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

왼쪽 채널의 현재 진폭(볼륨)을 나타내는 0(묵음)부터 1(최대 진폭)까지의 값입니다.



구현
    public function get leftPeak():Number
position속성 
position:Number  [읽기 전용]

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

사운드가 재생 중일 때 position 속성은 사운드 파일에서 재생 중인 현재 위치를 나타냅니다. 사운드가 중단 또는 일시 정지될 때 position 속성은 사운드 파일에서 재생된 마지막 위치를 나타냅니다.

일반적으로는 사운드가 중단될 때 position 속성 값을 저장하는 데 사용합니다. 나중에, 저장된 위치에서 사운드를 다시 시작할 수 있습니다.

사운드가 반복되면 각 반복이 시작될 때 position이 0으로 재설정됩니다.



구현
    public function get position():Number
rightPeak속성 
rightPeak:Number  [읽기 전용]

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

오른쪽 채널의 현재 진폭(볼륨)을 나타내는 0(묵음)부터 1(최대 진폭)까지의 값입니다.



구현
    public function get rightPeak():Number
soundTransform속성 
soundTransform:SoundTransform  [읽기/쓰기]

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

사운드 채널에 할당된 SoundTransform 객체입니다. SoundTransform 객체에는 볼륨, 패닝, 왼쪽 스피커 할당, 오른쪽 스피커 할당 등을 설정할 수 있는 속성이 포함되어 있습니다.



구현
    public function get soundTransform():SoundTransform
    public function set soundTransform(value:SoundTransform):void

참고 사항

메서드 정보
stop()메서드
public function stop():void

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

채널의 사운드 재생을 중단합니다.


예제

다음 예제에서는 사용자가 버튼을 클릭하여 사운드 파일을 일시 정지하고 다시 재생할 수 있습니다.

생성자에서 사운드 파일이 로드됩니다. 이 예제에서는 파일이 SWF 파일과 동일한 디렉토리에 있는 것으로 가정합니다. 텍스트 필드는 사용자가 사운드를 재생하거나 일시 정지하기 위한 버튼으로 사용됩니다. 사용자가 button 텍스트 필드를 클릭하면 clickHandler() 메서드가 호출됩니다.

clickHandler() 메서드에서 사용자가 처음 텍스트 필드를 클릭하면 사운드가 재생되도록 설정되고 사운드 채널에 할당됩니다. 그런 다음 사용자가 텍스트 필드를 클릭해서 일시 정지하면 사운드 재생이 중단됩니다. 사운드 채널의 position 속성은 사운드가 중단되었을 때 사운드의 위치를 기록합니다. 이 속성은 사용자가 텍스트 필드를 클릭하여 다시 재생을 시작하면 해당 위치에서 사운드를 다시 시작하는 데 사용됩니다. Sound.play() 메서드가 호출될 때마다 새로운 SoundChannel 객체가 생성되어 channel 변수에 할당됩니다. Sound 객체는 사운드 채널의 stop() 메서드를 사용하여 사운드를 일시 정지해야 하므로 SoundChannel 객체에 할당되어야 합니다.

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.events.MouseEvent;
    import flash.text.TextFieldAutoSize;
            
    public class SoundChannel_stopExample extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel = new SoundChannel();
        private var button:TextField = new TextField();

        public function SoundChannel_stopExample() {
            var req:URLRequest = new URLRequest("MySound.mp3");
            snd.load(req);
            
            button.x = 10;
            button.y = 10;
            button.text = "PLAY";
            button.border = true;
            button.background = true;
            button.selectable = false;
            button.autoSize = TextFieldAutoSize.CENTER;

            button.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(button);
        }

        private function clickHandler(e:MouseEvent):void {
            var pausePosition:int = channel.position;

            if(button.text == "PLAY") {
                channel = snd.play(pausePosition);
                button.text = "PAUSE";
            } 
            else {
                channel.stop();
                button.text = "PLAY";
            }
        }
    }
}
이벤트 정보
soundComplete 이벤트
이벤트 객체 유형: flash.events.Event
속성 Event.type = flash.events.Event.SOUND_COMPLETE

언어 버전: ActionScript 3.0
런타임 버전: AIR 1.0 Flash Player 9

사운드 재생이 완료될 때 전달됩니다.

Event.SOUND_COMPLETE 상수는 soundComplete 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 사운드 재생이 완료된 Sound 객체입니다.

예제

다음 예제는 재생 목록에서 노래를 선택한 다음 재생을 클릭하여 선택한 순서대로 노래를 재생합니다.

생성자에서 노래 목록과 재생 선택에 필요한 행을 저장할 텍스트 필드가 정의됩니다. 일반적으로 버튼은 재생에 사용되고 목록 상자는 노래 목록에 사용됩니다. 텍스트 서식 객체는 선택한 노래 목록 행의 서식을 기울임꼴로 변경하도록 정의되었습니다. 사용자가 텍스트 필드를 클릭하면 clickHandler() 메서드가 호출됩니다.

clickHandler() 메서드에서 텍스트 필드 객체의 getLineIndexAtPoint() 메서드는 사용자가 클릭한 행의 인덱스를 반환합니다. getLineText() 메서드는 행 인덱스를 사용하여 텍스트 내용을 가져옵니다. if 문은 사용자가 노래를 재생하도록 선택했는지 또는 재생 목록에 추가하도록 선택했는지 확인합니다. 사용자가 재생을 선택하고 노래가 선택된 경우 마우스 클릭에 대한 이벤트 리스너가 제거되고 playNext() 메서드가 호출되어 노래를 재생하기 시작합니다. 사용자가 노래 제목을 선택하면 행의 내용이 songList 배열에 추가되고 행 서식이 기울임꼴로 설정됩니다.

playNext() 메서드는 배열 목록을 반복하여 각 노래를 로드하고 재생합니다. 또한 사운드 채널에도 노래가 할당됩니다. 노래 재생이 끝나면 사운드 채널에 대한 이벤트 리스너가 응답하기 위해 추가되고 Event.SOUND_COMPLETE 이벤트가 전달됩니다. 그런 다음 soundCompleteHandler() 메서드가 playNext() 메서드를 호출하여 다음 노래를 재생합니다. 이 프로세스는 배열에 나열된 모든 노래의 재생이 끝날 때까지 계속됩니다.

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
    import flash.text.TextFormat;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.events.IOErrorEvent;

    public class SoundChannel_event_soundCompleteExample extends Sprite {
        private var channel:SoundChannel = new SoundChannel();
        private var songList:Array = new Array();
        private var listTextField:TextField = new TextField();
        private var songFormat:TextFormat = new TextFormat();
        private var arrayIndex:int = 0;
        private var songSelected:Boolean = false;
        
        public function SoundChannel_event_soundCompleteExample() {
            
            listTextField.autoSize = TextFieldAutoSize.LEFT;
            listTextField.border = true
            listTextField.background = true;
            listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" 
                                + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY";
        
            songFormat.italic = true;
 
            listTextField.addEventListener(MouseEvent.CLICK, clickHandler);
                        
            addChild(listTextField);
        }
        
        private function clickHandler(e:MouseEvent):void {
            var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY);
            var line:String = listTextField.getLineText(index);
            var firstIndex:uint = listTextField.getLineOffset(index);
            var playLine:uint = listTextField.numLines - 1;

                if((index == playLine) && (songSelected == true)) {
                    listTextField.removeEventListener(MouseEvent.CLICK, clickHandler);
                    playNext();       

                } else if (index != playLine) {
                     songList.push(line.substr(0, (line.length - 1)));
                     listTextField.setTextFormat(songFormat, firstIndex, 
                                (firstIndex + listTextField.getLineLength(index)));     
                    songSelected = true;
                 }
        }

        private function playNext():void {
 
             if(arrayIndex < songList.length) {
                var snd:Sound = new Sound();
                snd.load(new URLRequest(songList[arrayIndex]));
                channel = snd.play();
                
                channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
                arrayIndex++;
 
            } else {
                songSelected = false;
                    
                while(arrayIndex > 0) {
                    songList.pop();
                    arrayIndex--;
                }
            }
        }    

        private function soundCompleteHandler(e:Event):void {
            playNext();
        }

        private function errorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }
    }
}
예제 예제 사용 방법
SoundChannelExample.as

다음 예제에서는 MP3 파일을 로드하여 재생하고, MP3 파일이 로드 및 재생될 때 발생하는 사운드 이벤트에 대한 정보를 표시합니다. Timer 객체는 50밀리초마다 재생 헤드의 위치에 대한 업데이트된 정보를 제공합니다. 이 예제를 실행하려면 MySound.mp3 파일을 SWF 파일과 같은 디렉토리에 넣습니다.
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;
    import flash.utils.Timer;

    public class SoundChannelExample extends Sprite {
        private var url:String = "MySound.mp3";
        private var soundFactory:Sound;
        private var channel:SoundChannel;
        private var positionTimer:Timer;

        public function SoundChannelExample() {
            var request:URLRequest = new URLRequest(url);
            soundFactory = new Sound();
            soundFactory.addEventListener(Event.COMPLETE, completeHandler);
            soundFactory.addEventListener(Event.ID3, id3Handler);
            soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            soundFactory.load(request);

            channel = soundFactory.play();
            channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);

            positionTimer = new Timer(50);
            positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler);
            positionTimer.start();
        }
        

        private function positionTimerHandler(event:TimerEvent):void {
            trace("positionTimerHandler: " + channel.position.toFixed(2));
        }

        private function completeHandler(event:Event):void {
            trace("completeHandler: " + event);
        }

        private function id3Handler(event:Event):void {
            trace("id3Handler: " + event);
        }

        private function ioErrorHandler(event:Event):void {
            trace("ioErrorHandler: " + event);
            positionTimer.stop();       
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler: " + event);
        }

        private function soundCompleteHandler(event:Event):void {
            trace("soundCompleteHandler: " + event);
            positionTimer.stop();
        }
    }
}