开发者

FMOD gapless loop and sequence playback

开发者 https://www.devze.com 2023-04-03 19:26 出处:网络
I started using FMOD library, because I need to play sounds without gaps in C# application (both one sound in a loop and many sounds in a sequence). Can anyone show me the correct way to do it? I trie

I started using FMOD library, because I need to play sounds without gaps in C# application (both one sound in a loop and many sounds in a sequence). Can anyone show me the correct way to do it? I tried make something based on examples, but it's not working as I would like it to work. Firstly, when I try to set if the sound is looped, while it's playing,

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

nothing is going on. It only works fine, when I set th mode, before I start playback.

The second issue is: how can I be notified that the sound has reached the end? I tried to do it this way:

channel.setCallback(eofCallback);

where eofCallback is a reference to SoundEndCallback

    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;
    }

But this callback is reached only when I manually invoke stop() on channel, not when开发者_如何学Go the track ends.

Or eventually do you know any other library that would give me easily what I need? I chose FMOD, because it's quite popular, but I don't like its oldschool C++-like way of coding (no events, no exceptions, etc.).


And I have teh answer for my second question: to get notified you have to firstly set callback as mentioned before, and after that you've got to use System.update() method (it must be called periodically in a loop). This is a kind of polling,


To set the loop mode of a sound at runtime use Channel::setMode, Sound::setMode is like setting the defaults for any channels played from that sound (it won't affect currently playing sounds).

As for Channel::setCallback, make sure you are calling System::update regularly to have the callbacks fire for events like the sound playing to the end.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号