패키지 | flash.media |
클래스 | public final class SoundMixer |
상속 | SoundMixer Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
sampleData
이벤트를 전달하는 Sound 객체에 대한 응답으로 생성되는 사운드인 동적으로 생성된 사운드까지 제어합니다.
속성 | 정의 주체 | ||
---|---|---|---|
audioPlaybackMode : String [정적]
모든 Sound 객체의 오디오 재생 모드를 지정합니다. | SoundMixer | ||
bufferTime : int [정적]
스트리밍 시작 전에 포함된 스트리밍 사운드를 버퍼에 미리 로드하는 시간(초)입니다. | SoundMixer | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
soundTransform : flash.media:SoundTransform [정적]
전역 사운드 속성을 제어하는 SoundTransform 객체입니다. | SoundMixer | ||
useSpeakerphoneForVoice : Boolean [정적]
장치가 음성 모드인 경우 스피커폰을 전환합니다. | SoundMixer |
메서드 | 정의 주체 | ||
---|---|---|---|
[정적]
보안 제한 사항으로 인해 액세스할 수 없는 사운드가 있는지 여부를 확인합니다. | SoundMixer | ||
[정적]
현재 사운드 웨이브의 스냅샷을 취하여 지정된 ByteArray 객체에 배치합니다. | SoundMixer | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
[정적]
현재 재생 중인 모든 사운드를 정지합니다. | SoundMixer | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
audioPlaybackMode | 속성 |
audioPlaybackMode:String
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 3 |
모든 Sound 객체의 오디오 재생 모드를 지정합니다. 모바일 장치의 경우 플랫폼 특징에 따라 이 속성은 사운드 속성과 기본값을 설정합니다. 데스크톱 및 TV 환경에서는 오디오 재생 모드 간에 기능적 차이가 없습니다.
이 속성의 유효한 값은 AudioPlaybackMode 클래스에 정의됩니다.
참고 iOS에서 한 응용 프로그램이 audioPlaybackMode=AudioPlaybackMode.VOICE
를 설정하면 다른 응용 프로그램에서 이를 AudioPlaybackMode.MEDIA
로 변경할 수 없습니다.
AudioPlaybackMode.VOICE
모드의 사용을 최소화하고 음성 통화가 끝나는 즉시 AudioPlaybackMode.MEDIA
로 전환하여 다른 응용 프로그램이 미디어 모드로 재생될 수 있도록 하십시오.
iOS에서 오디오 재생 모드를 변경하면 음악을 재생하는 기본 응용 프로그램이 잠시 일시 정지합니다.
기본값: AudioPlaybackMode.MEDIA.
구현
public static function get audioPlaybackMode():String
public static function set audioPlaybackMode(value:String):void
오류
ArgumentError — kInvalidParameterError
|
관련 API 요소
bufferTime | 속성 |
bufferTime:int
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
스트리밍 시작 전에 포함된 스트리밍 사운드를 버퍼에 미리 로드하는 시간(초)입니다. 크로스 도메인 정책 파일을 구현하지 않는 한, 다른 도메인의 SWF 파일에서는 로드된 사운드의 데이터(버퍼링 시간 포함)에 액세스할 수 없습니다. 보안 및 사운드에 대한 자세한 내용은 Sound 클래스 설명을 참조하십시오. 크로스 도메인 정책 파일을 구현하지 않는 한, 다른 도메인에 있는 파일의 코드에서는 로드된 사운드의 데이터(버퍼링 시간 포함)에 액세스할 수 없습니다. 하지만 AIR 응용 프로그램의 응용 프로그램 샌드박스에서 코드는 모든 소스의 사운드 파일에 있는 데이터에 액세스할 수 있습니다. 보안 및 사운드에 대한 자세한 내용은 Sound 클래스 설명을 참조하십시오.
SoundMixer.bufferTime
속성은 SWF 파일에 포함된 스트리밍 사운드의 버퍼링 시간에만 영향을 주며, 동적으로 만들어진 Sound 객체(ActionScript로 만든 Sound 객체)와는 무관합니다. SoundMixer.bufferTime
값은 Sound.load()
메서드에 전달된 SoundLoaderContext 객체에 지정되어 있는 기본 버퍼링 시간을 재정의하거나 설정할 수 없습니다.
구현
public static function get bufferTime():int
public static function set bufferTime(value:int):void
관련 API 요소
soundTransform | 속성 |
soundTransform:flash.media:SoundTransform
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
전역 사운드 속성을 제어하는 SoundTransform 객체입니다. SoundTransform 객체에는 볼륨, 패닝, 왼쪽 스피커 할당, 오른쪽 스피커 할당 등을 설정할 수 있는 속성이 포함되어 있습니다. 이 속성에서 사용되는 SoundTransform 객체는 개별적인 사운드 설정 적용 후 전체 사운드에 적용할 최종 사운드 설정을 제공합니다.
구현
public static function get soundTransform():flash.media:SoundTransform
public static function set soundTransform(value:flash.media:SoundTransform):void
관련 API 요소
useSpeakerphoneForVoice | 속성 |
useSpeakerphoneForVoice:Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 3 |
장치가 음성 모드인 경우 스피커폰을 전환합니다. 기본적으로 SoundMixer.audioPlaybackMode
가 AudioPlaybackMode.VOICE
로 설정된 경우 스마트폰에서 오디오 출력에 이어폰이 사용됩니다. useSpeakerphoneForVoice
속성을 사용하면 전화 응용 프로그램에서 스피커폰 단추를 구현할 수 있도록 기본 출력을 재정의할 수 있습니다. AudioPlaybackMode.VOICE
가 아닌 모드에서는 이 속성이 효과가 없습니다. 데스크톱 및 TV 환경에서 이 속성은 효과가 없습니다.
참고 iOS에서 응용 프로그램이 audioPlaybackMode=VOICE
를 설정하고 다른 응용 프로그램이 음성 모드를 재생하는 경우 useSpeakerphoneForVoice=true
를 설정할 수 없습니다.
참고 Android에서는 AIR 응용 프로그램 설명자의 android.permission.MODIFY_AUDIO_SETTINGS
를 설정해야 하며, 그렇지 않으면 이 값을 변경해도 아무런 효과가 없습니다. 또한 이 설정은 전역 장치 설정입니다. 장치에서 실행되는 다른 응용 프로그램은 언제든지 기본 장치 설정을 변경할 수 있습니다.
기본값: false.
구현
public static function get useSpeakerphoneForVoice():Boolean
public static function set useSpeakerphoneForVoice(value:Boolean):void
관련 API 요소
areSoundsInaccessible | () | 메서드 |
public static function areSoundsInaccessible():Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
보안 제한 사항으로 인해 액세스할 수 없는 사운드가 있는지 여부를 확인합니다. 예를 들어 이 메서드를 호출하는 내용과 다른 도메인에서 로드한 사운드는 해당 사운드의 서버에 해당 도메인의 도메인에 대한 액세스 권한을 부여하는 URL 정책 파일이 없으면 액세스가 불가능합니다. 그래도 사운드를 로드하여 재생할 수는 있지만, 액세스할 수 없는 사운드에서는 사운드의 ID3 메타데이터를 가져오는 것과 같은 낮은 레벨의 작업은 수행할 수 없습니다.
응용 프로그램 보안 샌드박스의 AIR 응용 프로그램 내용의 경우 이 메서드를 호출하면 항상 false
가 반환됩니다. 다른 도메인에서 로드된 사운드를 비롯한 모든 사운드는 응용 프로그램 보안 샌드박스의 내용에 액세스할 수 있습니다.
Boolean — 부울의 문자열 표현입니다.
|
관련 API 요소
computeSpectrum | () | 메서드 |
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9 |
현재 사운드 웨이브의 스냅샷을 취하여 지정된 ByteArray 객체에 배치합니다. 값이 -1.0부터 1.0까지의 정규화된 부동 소수점 값으로 지정되고, outputArray
매개 변수에 전달된 ByteArray 객체는 새 값으로 덮어쓰여집니다. 만들어진 ByteArray 객체의 크기는 512개의 부동 소수점 값으로 고정되며, 처음 256개의 값은 왼쪽 채널을, 다음 256개의 값은 오른쪽 채널을 나타냅니다.
참고: 이 메서드에는 크로스 도메인 로딩에 대한 제한 사항과 로컬 파일 보안 제한 사항이 적용됩니다. 로컬 파일 또는 호출하는 내용과 다른 도메인에 속하는 서버로부터 로드되는 사운드로 작업을 할 때는 크로스 도메인 정책 파일을 통해 샌드박스 제한 사항을 해결해야 합니다. 자세한 내용은 Sound 클래스 설명을 참조하십시오. 또한 이 메서드는 RTMP 서버와 같은 도메인에 있는 내용에서 호출된 경우에도 RTMP 스트림에서 데이터를 추출하는 데에는 사용할 수 없습니다.
이 메서드는 Flash Player 9.0.115.0 이상 및 Adobe AIR의 RTMP에서 지원됩니다. 서버측 스크립트에서 Flash Media Server의 스트림에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 Client.audioSampleAccess
및 Client.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로 데이터를 샘플링하는 방식으로 진행됩니다.
|
관련 API 요소
flash.utils.ByteArray
flash.media.Sound
flash.media.SoundLoaderContext.checkPolicyFile
예제 ( 예제 사용 방법 )
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 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
현재 재생 중인 모든 사운드를 정지합니다.
>Flash Professional에서 이 메서드는 재생 헤드를 중단시키지 않습니다. 스트리밍으로 설정된 사운드는 사운드가 있는 프레임 위로 재생 헤드가 이동하면 재생을 다시 시작합니다.
이 속성을 사용할 경우 다음과 같은 보안 모델을 생각해 볼 수 있습니다.
- 기본적으로
SoundMixer.stopAll()
메서드를 호출하면 해당 메서드를 호출하는 객체와 동일한 보안 샌드박스에 있는 사운드만 중단됩니다. 호출하는 객체와 동일한 샌드박스에서 재생이 시작되지 않은 사운드는 정지되지 않습니다. - Sound 클래스의
load()
메서드를 사용하여 사운드를 로드할 경우, SoundLoaderContext 객체인context
매개 변수를 지정할 수 있습니다. SoundLoaderContext 객체의checkPolicyFile
속성을true
로 설정하면 Flash Player 또는 Adobe AIR에서는 해당 사운드가 로드된 서버의 크로스 도메인 정책 파일을 확인합니다. 서버에 크로스 도메인 정책 파일이 있고 호출하는 내용의 도메인을 이 파일에서 허용할 경우,SoundMixer.stopAll()
메서드를 사용하여 로드된 사운드를 중단할 수 있으며, 그렇지 않으면 중단할 수 없습니다.
그러나 Adobe AIR에서 application
보안 샌드박스의 내용, 즉 AIR 응용 프로그램과 함께 설치되는 내용은 이러한 보안 제한에 의해 제한되지 않습니다.
보안에 대한 자세한 내용은 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); } } }
Tue Jun 12 2018, 03:17 PM Z