2010년 3월 27일 토요일

#사운드를 이용한 mp3 플레이어_(3)SoundTransform

SoundTransform 클래스에는 볼륨, 패닝(왼쪽 스피커와 오른쪽 스피커의 음량 조절) 등에

대한 속성이 포함되어 있다. 따라서 사운드의 볼륨과 패닝을 조절하기 위해서는 SoundTransform 클래스를 이용해야한다.

 

 

SoundTransform 객체를 생성하는 방법에는 두가지가 있다.

 

첫번째

 

[code as3]
var vol_tran:SoundTransform = channel.soundTransform;
[/code]

 

두번째

 

[code as3]
var vol_tran:SoundTransform = new SoundTransform(1, 0);
[/code]

 

첫번째 방법은 SoundChannel 클래스의 soundTransform 속성을 사용하여 생성한다.

 

 

두번째 방법은 SoundTransform 클래스에서 객체를 생성한다.

첫번째 파라미터는 볼륨값이고, 두번째 파라미터는 패닝값이다.

 

 

첫번째 방법을 이용하여 사운드 볼륨과 패닝을 조절하겠다. 그럼 이제 만들어보자.

 

[code as3]
package
{
import fl.events.SliderEvent;
import fl.controls.Slider;

import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
import flash.net.URLRequest;

public class MyMusic extends Sprite
{
 public function MyMusic()
 {
  super(); // Sprite 클래스(상속하는 상위클래스)  생성.
  configureSound(); // 사운드 설정
 }

 /**
  *  @private
  *   사운드 객체 : 객체 생성시 자동으로 사운드 파일 로드.
  */
 private var music:Sound = new Sound(new URLRequest("힘을내줘.mp3"));

 /**
  *  @private
  *  사운드 채널
  */
 private var channel:SoundChannel;

 /**
  *  @private
  *  현재 재생 위치(ms)
  */
 private var position:Number = 0;

 /**
  *  @private
  *  사운드 변환 : 볼륨 및 패닝 속성 포함.
  */
 private var vol_tran:SoundTransform;

 /**
  *  @private
  *  사운드 초기화
  *
  *  Slider(클래스) snapInterval(속성) : 패닝 slider 이동시 값이 증가하거나 감소하는 기준 간격 설정.
  */

 private function configureSound():void
 {
  pan_slider.maximum = 1; // 패닝 Slider 최대값 설정.
  pan_slider.minimum = -1; // 패닝 Slider 최소값 설정.
  pan_slider.value = 0;    // 기본값 0으로 설정.
  pan_slider.snapInterval = 0.1; // 0.1만큼 증가 감소.
  pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화.
  play_btn.mouseEnabled = true;   // 재생 버튼 활성화.

  pause_btn.addEventListener(MouseEvent.CLICK, pauseButtonClickHandler); //일시정지버튼 이벤트 등록.
  play_btn.addEventListener(MouseEvent.CLICK, playButtonClickHandler); // 재생버튼 이벤트 등록.
  sound_vol.addEventListener(SliderEvent.THUMB_DRAG, volumeSliderHandler); // 볼륨조절 이벤트 등록
  pan_slider.addEventListener(SliderEvent.THUMB_DRAG, panSliderHandler); // 패닝조절 이벤트 등록
 }

 /**
  *  @private
  *  사운드 볼륨
  *
  *  사운드 볼륨 범위 : 0 ~ 1
  *  SoundTransForm의 volume 속성 값 : 0 ~ 1
  *  Slider Component 값(정수값) : -1, 0, 1
  *  event.target : 마우스로 Slider를 클릭한 지점
  *  Slider(클래스) value(속성) : 현재 값을 가져오거나 설정.
  *                               이 값은 최소값과 최대값 사이에서 슬라이더 썸의 위치에 따라 결정.
  *  Slider : maximum = 10, minimum = 0
  */
 private function volumeSliderHandler(event:SliderEvent):void
 {
  vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 볼륨 정보를 넘겨줌.
  vol_tran.volume = event.target.value / 10; // 실제 보륨에 적용하기 위해 단위변환.
  channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨을 다시 적용.
 }

 /**
  *  @private
  *  사운드 패닝
  *
  *  사운드 패닝 범위 : -1 ~ 1
  *  SoundTransForm의 volume 속성 값 : 0 ~ 1
  *  Slider Component 값(정수값) : -1, 0, 1
  */
 private function panSliderHandler(event:SliderEvent):void
 {
  vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 패닝 정보를 넘겨줌.
  vol_tran.pan = event.value;
  channel.soundTransform = vol_tran; // 변환된 사운드의 패닝 다시 적용.
 }

 /**
  *  @private
  *  일시정지 버튼 
  */
 private function pauseButtonClickHandler(event:MouseEvent):void
 {
  pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화.
  play_btn.mouseEnabled = true; // 재생 버튼 활성화.
  position = channel.position; // 현재 재생 위치 저장.
  channel.stop(); // 사운드 정지.
 }

 /**
  *  @private
  *  재생 버튼
  */
 private function playButtonClickHandler(event:MouseEvent):void
 {
  pause_btn.mouseEnabled = true; // 일시정지버튼 활성화.
  play_btn.mouseEnabled = false; // 재생버튼 비활성화.
  channel = music.play(position); // 사운드 재생.
  vol_tran = channel.soundTransform;  // 현재 재생되고 있는 사운드의 볼륨, 패닝 정보를 넘겨줌.
  vol_tran.volume = sound_vol.value / 10;
  channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨, 패닝을 다시 적용.
 }
}
}
[/code]

 

댓글 없음:

댓글 쓰기