필유홈2.0

admin | write

각설하고,

소리(Sound) 인스턴스(instance)의 음량(volume)은 그 자체로 조절할 수 없습니다. 아시다시피(?) SoundTransform 클래스로만 변경이 가능하죠. 또한 transform을 거치는 인스턴스에는 tween을 줄 수 없기 때문에(문법상으로는 문제가 없지만 실행해보면 당연히 tween이 안 먹힙니다) 페이드인(fade-in)을 구현하는 데 어려움이 있었습니다.

그래서 찾아본 결과:
Fading sound using AS3 (새창)

요약하자면 다음 fla 소스(임의로 행순서를 바꾸고 주석을 달았습니다):
var fadeInIncr = 0.1;   // 음량 전역변수
var soundFadeInTimer:Timer = new Timer(100,30);
var snd:Sound = new Sound(new URLRequest("myLoop.mp3"));
var trans:SoundTransform = new SoundTransform(fadeInIncr, 0);
var channel:SoundChannel = snd.play(0, 1, trans);

soundFadeInTimer.addEventListener("timer", soundFadeIn);
soundFadeInTimer.start();

function soundFadeIn(e:TimerEvent){   // 이벤트 핸들러
    fadeInIncr += 1/30;

    var sAmbienceVol:SoundTransform = new SoundTransform(fadeInIncr, 0);
    channel.soundTransform = sAmbienceVol;
}


수정:
위 방법으로는 여러 개의 인스턴스에 각각 페이드인 효과를 구현할 수 없다는 내용의 장문-_-을 썼다가, 별 의미 없어서 지웠습니다. 여러 개의 인스턴스에서 사용하려면 ENTER_FRAME 이벤트 핸들러(즉 idle 함수)에서 for문 돌려가며 해당 인스턴스의 음량 변수를 가지고 와서 변경하면 됩니다(물론 SoundTransform을 통해서). 타이머 클래스에는 currentCount라는 속성(property)이 있는데, 이걸 사용해도 되겠죠. 방법은 여러가지. 페이드아웃 역시 마찬가지로 구현하면 됩니다.

페이드인/페이드아웃을 구현한 예제 (새창)



<< PREV : [1] : ... [34] : [35] : [36] : [37] : [38] : [39] : [40] : [41] : [42] : ... [196] : NEXT >>

필유홈2.0
일단은 (복)학생...

카테고리

분류 전체보기 (196)
음악 (56)
(29)
게임 (23)
영화 (18)
(13)
응용프로그램 (11)
프로그래밍 (12)
엑셀 (3)
우리말 (2)
기타 (29)
 
Total : 144953
Today : 21 Yesterday : 241
-_-동맹

믹시

블로그 예절 캠페인



Creative Commons License
이 곳은 크리에이티브 커먼즈 코리아 저작자표시-비영리 2.0 South Korea 라이센스에 따라 이용하실 수 있습니다.