사운드 객체,즉 Sound클래스는 외부의 mp3파일로 접근하여 다운로드하며 재생을 할 수 있다.
음원을 다운받기 위해서는 서버에 Request하는 객체인 Request클래스를 선언하여 경로를 선어나여야 하고 그 값은 Sound.load()메서드의 파라미터 값으로 사용된다. 이부분은 일단 Loader나 URLLoader등과 같다.
이처럼 불러온 경로가 만들어지면 Sound.play()를 통하여 스트림을 시작한다. play()는 파일 받기 시작과 동시에 재생을 하며 SoundChannel을 반환한다. 재생되는 사운드의 볼륨 조절이나 정지를 하려면 SoundChannel을 사용해야 하는데 SoundChannel을 Delegate한 객체가 SoundChannel = Sonud.play()와 같이 채널에 사운드 스트림 연결 객체를 대입하여 채널과 음원데이터를 연결한다.

[ 사운드 스트림 객체와 사운드 채널 ]
Sound 객체는 스트림 연결/종료만 관리하므로 음원 파일을 계속 받지만 소리만 정지 시키고 싶을 때는 채널에서 stop()메서드를 사용한다. 그러면 사운드 스트림은 중단되지 않고 현재 재생되는 사운드만 정지 시킬 수 있다. 그러나 채널에는 play()라는 메서드가 없다. 따라서 사운드 객체에 play()를 통하여 다시 채널을 생성해야 한다.
* Sound.play()는 사운드 채널을 반환하므로 이전에 대입된 사운드 채널은 Sound.play()이후 새로운 채널을 사용하게 된다. 따라서 이전에 사용된 이벤트 리스너등을 Sound.play() 이후 새로 등록해 주어야 한다.
* Sound.close()는 스트림을 중단하는 것이다. 따라서 재생을 중단하기 위해서는 사운드 채널의 stop()을 사용한다.

var sd:Sound = new Sound();
sd.load( new URLRequest("사운드파일 경로") );
var sc:SoundChannel = new SoundChannel();
sc = sd.play()     --> 사운드 스트림상의 사운드 데이터를 채널에 등록
sc.stop()            --> 채널의 사운드를 정지
sd.close()          --> 사운드 스트림을 중단


[ 일시정지와 재생시점 ]
안타깝게도 비디오객체 처럼 pause와 resume메서드가 없다. 따라서 사운드 채널에서 현재까지의 재생된 위치를 얻어와 저장하고 있다가 Sound.play( startTime, loops, sndTransform )에서 startTime대입하여야 한다. 값은 밀리초 단위이다.

var pos:int = sc.position --> 현재 재생중인 위치
sc = sd.play( pos )        --> 시작위치를 성절하고 스트림 재생




[일시정지는 버퍼가 끝난후 노래가 나올 때 이후 실행 가능 합니다.]


Posted by 버터백통