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

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

SoundMixer 클래스에는 SWF 파일의 전역 사운드 컨트롤에 대한 정적 속성과 메서드가 포함되어 있습니다. SoundMixer 클래스는 SWF에 포함된 스트리밍 사운드를 제어하며, 동적으로 만들어진 Sound 객체(ActionScript로 만들어진 Sound 객체)는 제어하지 않습니다.



Public 속성
 속성다음에 의해 정의됨
  bufferTime : int
[static] 스트리밍 시작 전에 포함된 스트리밍 사운드를 버퍼에 미리 로드하는 시간(초)입니다.
SoundMixer
 Inheritedconstructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다.
Object
 Inheritedprototype : Object
[static] 클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다.
Object
  soundTransform : SoundTransform
[static] 전역 사운드 속성을 제어하는 SoundTransform 객체입니다.
SoundMixer
Public 메서드
 메서드다음에 의해 정의됨
  
[static] 보안 제한 사항으로 인해 액세스할 수 없는 사운드가 있는지 여부를 확인합니다.
SoundMixer
  
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[static] 현재 사운드 웨이브의 스냅샷을 취하여 지정된 ByteArray 객체에 배치합니다.
SoundMixer
 Inherited
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다.
Object
 Inherited
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다.
Object
 Inherited
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다.
Object
 Inherited
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다.
Object
  
[static] 현재 재생 중인 모든 사운드를 정지합니다.
SoundMixer
 Inherited
지정된 객체의 문자열 표현을 반환합니다.
Object
 Inherited
지정된 객체의 프리미티브 값을 반환합니다.
Object
속성 정보
bufferTime속성
bufferTime:int  [read-write]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

스트리밍 시작 전에 포함된 스트리밍 사운드를 버퍼에 미리 로드하는 시간(초)입니다. 크로스 도메인 정책 파일을 구현하지 않는 한, 다른 도메인의 SWF 파일에서는 로드된 사운드의 데이터(버퍼링 시간 포함)에 액세스할 수 없습니다. 보안 및 사운드에 대한 자세한 내용은 Sound 클래스 설명을 참조하십시오.

SoundMixer.bufferTime 속성은 SWF 파일에 포함된 스트리밍 사운드의 버퍼링 시간에만 영향을 주며, 동적으로 만들어진 Sound 객체(ActionScript로 만든 Sound 객체)와는 무관합니다. SoundMixer.bufferTime 값은 Sound.load() 메서드에 전달된 SoundLoaderContext 객체에 지정되어 있는 기본 버퍼링 시간을 재정의하거나 설정할 수 없습니다.


구현
    public static function get bufferTime():int
    public function set bufferTime(value:int):void

참고 사항

soundTransform속성 
soundTransform:SoundTransform  [read-write]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

전역 사운드 속성을 제어하는 SoundTransform 객체입니다. SoundTransform 객체에는 볼륨, 패닝, 왼쪽 스피커 할당, 오른쪽 스피커 할당 등을 설정할 수 있는 속성이 포함되어 있습니다. SoundTransform 객체는 SWF 파일에 포함된 사운드에만 영향을 줍니다. 이 속성에서 사용되는 SoundTransform 객체는 개별적인 사운드 설정 적용 후 전체 사운드에 적용할 최종 사운드 설정을 제공합니다.


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

참고 사항

메서드 정보
areSoundsInaccessible()메서드
public static function areSoundsInaccessible():Boolean

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

보안 제한 사항으로 인해 액세스할 수 없는 사운드가 있는지 여부를 확인합니다. 예를 들어, SWF 파일과 다른 도메인에서 로드한 사운드는 해당 사운드의 서버에 SWF 파일의 도메인에 대한 액세스 권한을 부여하는 크로스 도메인 정책 파일이 없으면 액세스가 불가능합니다. 그래도 사운드를 로드하여 재생할 수는 있지만, 액세스할 수 없는 사운드에서는 사운드의 ID3 메타데이터를 가져오는 것과 같은 낮은 레벨의 작업은 수행할 수 없습니다.

반환값
Boolean

참고 사항

computeSpectrum()메서드 
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

현재 사운드 웨이브의 스냅샷을 취하여 지정된 ByteArray 객체에 배치합니다. 값은 -1.0부터 1.0까지의 정규화된 부동 소수점 값으로 outputArray 매개 변수에 전달된 ByteArray 객체를 새 값으로 덮어씁니다. 만들어진 ByteArray 객체의 크기는 512개의 부동 소수점 값으로 고정되며, 처음 256개의 값은 왼쪽 채널을, 다음 256개의 값은 오른쪽 채널을 나타냅니다.

참고: 이 메서드에는 서로 다른 도메인 간 로딩에 대한 제한 사항과 로컬 파일 보안 제한 사항이 적용됩니다. 로컬 SWF 파일 또는 호출하는 SWF와 다른 도메인에 속하는 서버로부터 로드되는 사운드로 작업을 할 때는 크로스 도메인 정책 파일을 통해 샌드박스 제한 사항을 해결해야 합니다. 자세한 내용은 Sound 클래스 설명을 참조하십시오.

이 메서드는 Flash Player 업데이트 3 이상의 RTMP에서 지원됩니다. 서버측 스크립트에서 Flash Media Server의 스트림에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 Client.audioSampleAccessClient.videoSampleAccess 속성( Adobe Flash Media Server용 서버측 ActionScript 언어 참조 설명서)을 참조하십시오.

매개 변수

outputArray:ByteArray — 해당 사운드와 연관된 값이 들어 있는 ByteArray 객체입니다. 보안 제한 사항으로 인해 사용할 수 없는 사운드(areSoundsInaccessible == true)가 있는 경우 outputArray 객체는 변경 없이 유지됩니다. 모든 사운드가 정지된 경우 outputArray 객체는 0으로 채워집니다.
 
FFTMode:Boolean (default = false) — 사운드 데이터에 대해 먼저 Fourier 변형을 수행할지 여부를 나타내는 부울 값입니다. 이 매개 변수를 true로 설정하면 메서드는 원시 사운드 웨이브 대신 주파수 스펙트럼을 반환합니다. 주파수 스펙트럼에서 저주파는 왼쪽에, 고주파는 오른쪽에 표시됩니다.
 
stretchFactor:int (default = 0) — 사운드 샘플의 해상도입니다. stretchFactor 값을 0으로 설정하면 44.1KHz로 데이터가 샘플링되고, 값이 1이면 22.05KHz로, 값이 2이면 11.025KHz로 데이터를 샘플링하는 방식으로 진행됩니다.

참고 사항


예제

다음 예제에서는 computeSpectrum() 메서드를 사용하여 사운드 웨이브 데이터를 그래픽으로 나타냅니다.

생성자에서 사운드 파일이 로드되고 재생하도록 설정됩니다. 이 예제에서는 오류 처리가 없고 사운드 파일이 SWF 파일과 동일한 디렉토리에 있는 것으로 가정합니다. 이 예제는 사운드가 재생되는 동안 Event.ENTER_FRAME 이벤트를 수신하고 onEnterFrame() 메서드를 반복적으로 트리거하여 사운드 데이터의 그래프를 그립니다. 사운드 재생이 완료되면 onPlaybackComplete() 메서드가 Event.ENTER_FRAME 이벤트에 대한 리스너를 제거하여 드로잉 프로세스를 중단합니다.

onEnterFrame() 메서드에서 computeSpectrum() 메서드는 원시 사운드를 bytes 바이트 배열 객체에 저장합니다. 데이터는 44.1 KHz로 샘플링됩니다. 512바이트의 데이터가 있는 바이트 배열로, 각각 -1~1 사이의 부동 소수점 값을 포함합니다. 첫 번째 256개의 값은 왼쪽 채널을 나타내고 두 번째 256개의 값은 오른쪽 채널을 나타냅니다. 첫 번째 for 루프는 첫 번째 256개의 데이터 값(왼쪽 스테레오 채널)을 읽고 Graphics.lineTo() 메서드를 사용하여 각 점에서 다음 점까지 선을 그립니다. 사운드 웨이브의 벡터 그래픽 표시는 클래스의 sprite 객체에 직접 기록됩니다. 사운드 바이트는 바이트 스트림에서 32비트 부동 소수점 숫자로 읽히고 그래프의 세로 범위를 나타내기 위해 플롯 높이가 곱해집니다. 폭은 채널 길이의 두 배로 설정됩니다. 두 번째 for 루프는 다음 256개의 값(오른쪽 스테레오 채널)을 읽고 라인을 역순으로 나타냅니다. g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);g.lineTo(0, PLOT_HEIGHT); 메서드는 웨이브의 기준선을 그립니다. 결과 파형 형태는 거울 이미지 효과를 나타냅니다.

package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    import flash.text.TextField;

    public class SoundMixer_computeSpectrumExample extends Sprite {

        public function SoundMixer_computeSpectrumExample() {
            var snd:Sound = new Sound();
            var req:URLRequest = new URLRequest("Song1.mp3");
            snd.load(req);
            
            var channel:SoundChannel;
            channel = snd.play();
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
        }

        private function onEnterFrame(event:Event):void {
            var bytes:ByteArray = new ByteArray();
            const PLOT_HEIGHT:int = 200;
            const CHANNEL_LENGTH:int = 256;

            SoundMixer.computeSpectrum(bytes, false, 0);
            
            var g:Graphics = this.graphics;
            
            g.clear();
       
            g.lineStyle(0, 0x6600CC);
            g.beginFill(0x6600CC);
            g.moveTo(0, PLOT_HEIGHT);
            
            var n:Number = 0;
            
            for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }

            g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            g.endFill();
 
            g.lineStyle(0, 0xCC0066);
            g.beginFill(0xCC0066, 0.5);
            g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            
            for (i = CHANNEL_LENGTH; i > 0; i--) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }
  
            g.lineTo(0, PLOT_HEIGHT);
            g.endFill();
        }
        
        private function onPlaybackComplete(event:Event):void {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
    }
}

stopAll()메서드 
public static function stopAll():void

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

현재 재생 중인 모든 사운드를 정지합니다.

이 메서드는 재생 헤드를 정지하지 않습니다. 스트리밍으로 설정된 사운드는 사운드가 있는 프레임 위로 재생 헤드가 이동하면 재생을 다시 시작합니다.

이 속성을 사용할 경우 다음과 같은 Flash Player 보안 모델을 생각해 볼 수 있습니다.

자세한 내용은 다음을 참조하십시오.


예제

다음 예제에서는 stopAll() 메서드를 사용하여 동시에 재생되는 2개의 사운드를 음소거합니다.

생성자에서 2개의 다른 사운드 파일이 로드되고 재생하도록 설정됩니다. 첫 번째 사운드는 로컬로 로드되어 사운드 채널에 할당됩니다. 파일이 SWF 파일과 동일한 디렉토리에 있는 것으로 가정합니다. 두 번째 파일이 Adobe 사이트에서 로드되어 스트리밍됩니다. SoundMixer.stopAll() 메서드를 사용하려면 모든 사운드에 액세스할 수 있어야 합니다. SoundLoaderContext 객체를 사용하여 크로스 도메인 정책 파일을 검사할 수 있습니다. 또한 각 사운드는 사운드 파일을 로드할 때 IO 오류가 발생하면 호출되는 이벤트 리스너를 가지고 있습니다. muteButton 텍스트 필드도 생성됩니다. 이 필드는 마우스 클릭을 수신하고 muteButtonClickHandler() 메서드를 호출합니다.

muteButtonClickHandler() 메서드에서 텍스트 필드 내용이 "MUTE"이면 areSoundsInaccessible() 메서드는 사운드 믹서가 파일에 대한 액세스 권한을 가졌는지 확인합니다. 파일을 액세스할 수 있으면 stopAll() 메서드가 사운드를 중단합니다. 텍스트 필드를 다시 클릭하면 첫 번째 사운드가 재생되기 시작하고 텍스트 필드의 내용이 다시 "MUTE"로 바뀝니다. 이번에는 stopAll() 메서드가 실행 중인 한 사운드를 음소거합니다. 사운드 채널 stop() 메서드는 채널에 할당된 특정 사운드를 중단하는 데 사용될 수도 있습니다. 채널 기능을 사용하려면 play() 메서드가 호출될 때마다 채널에 사운드를 재할당해야 합니다.

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

    public class SoundMixer_stopAllExample extends Sprite  {
        private var firstSound:Sound = new Sound();
        private var secondSound:Sound = new Sound();
        private var muteButton:TextField = new TextField();
        private var channel1:SoundChannel = new SoundChannel();
        
        public function SoundMixer_stopAllExample() {
            firstSound.load(new URLRequest("mySound.mp3"));
            secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"));

            firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler);
            secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler);
            
            channel1 = firstSound.play();
            secondSound.play();
            
            muteButton.autoSize = TextFieldAutoSize.LEFT;
            muteButton.border = true;
            muteButton.background = true;
            muteButton.text = "MUTE";
        
            muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler);         
        
            this.addChild(muteButton);
        }

        private function muteButtonClickHandler(event:MouseEvent):void {

            if(muteButton.text == "MUTE") {        
  
                if(SoundMixer.areSoundsInaccessible() == false) {
                    SoundMixer.stopAll();
                    muteButton.text = "click to play only one of sound.";
                }
                else {
                    muteButton.text = "The sounds are not accessible.";
                }
            }
           else {
                firstSound.play();        
                muteButton.text = "MUTE";
           }
        } 

        private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }

        private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }
    }
}




 

이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서

현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/ActionScriptLangRefV3/flash/media/SoundMixer.html