2011-09-07 3 views
2

FMOD 라이브러리를 사용하기 시작했는데, C# 응용 프로그램에서 갭이없는 사운드를 재생해야하기 때문입니다 (루프의 한 사운드와 시퀀스의 많은 사운드). 누구든지 저에게 올바른 방법을 보여줄 수 있습니까? 나는 예제를 기반으로 무언가를 만들려고했지만 작동하지 않기 때문에 효과가 없습니다. 나는 소리가 반복되는 경우, 설정하려고하면 첫째, 그것은FMOD gapless 루프 및 시퀀스 재생

if (value) 
    sound1.setMode(FMOD.MODE.LOOP_NORMAL); 
else 
    sound1.setMode(FMOD.MODE.LOOP_OFF); 

아무것도 진행되지 않으며, 놀고있다. 그것은 재생을 시작하기 전에, 내가 모드를 설정하면 잘 작동합니다.

두 번째 문제는 다음과 같습니다. 어떻게 소리가 끝났다는 알림을받을 수 있습니까? 채널에()하지 않을 때 트랙 끝을 eofCallback가 기준입니다

channel.setCallback(eofCallback); 

private FMOD.RESULT SoundEndCallback(IntPtr channelraw, FMOD.CHANNEL_CALLBACKTYPE type, IntPtr commanddata1, IntPtr commanddata2) 
    { 
     FMOD.RESULT result; 

     if (type == FMOD.CHANNEL_CALLBACKTYPE.END) 
     { 
      //logic here 
     } 
     return FMOD.RESULT.OK; 
    } 

을 SoundEndCallback하기 그러나이 콜백 내가 수동으로 정지를 호출 할 경우에만 도달 : 나는이 방법을 시도 .

결국 내가 필요한 것을 쉽게 줄 수있는 다른 라이브러리를 알고 있습니까? FMOD를 선택했는데, 꽤 인기가 있었지만, 나는 oldschool C++과 같은 코딩 방법 (이벤트 나 예외는 아님)을 좋아하지 않는다.

답변

0

런타임시 사운드의 루프 모드를 설정하려면 Channel :: setMode를 사용합니다. Sound :: setMode는 해당 사운드에서 재생되는 모든 채널의 기본값을 설정하는 것과 같습니다 (현재 재생되는 사운드에는 영향을주지 않음).

Channel :: setCallback의 경우 사운드 재생과 같은 이벤트에 콜백을 실행하려면 System :: update를 정기적으로 호출해야합니다.

1

그리고 나는 두 번째 질문에 답을 얻었습니다. 앞서 언급 한 콜백을 먼저 설정해야한다는 알림을 받으려면 System.update() 메서드를 사용해야합니다 (이 메서드는 주기적으로 고리). 이것은 일종의 투표입니다.