FMOD воспроизведение без зазора и последовательности - PullRequest
2 голосов
/ 07 сентября 2011

Я начал использовать библиотеку FMOD, потому что мне нужно воспроизводить звуки без пробелов в приложении C # (как один звук в цикле, так и много звуков в последовательности). Может кто-нибудь показать мне правильный способ сделать это? Я пытался сделать что-то на основе примеров, но это не работает, как я хотел бы, чтобы это работало. Во-первых, когда я пытаюсь установить, зациклен ли звук во время воспроизведения,

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

ничего не происходит. Работает нормально, только когда я установил th-режим, прежде чем начать воспроизведение.

Вторая проблема: как я могу получить уведомление о том, что звук достиг конца? Я пытался сделать это так:

channel.setCallback(eofCallback);

, где eofCallback является ссылкой на 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;
    }

Но этот обратный вызов достигается только тогда, когда я вручную вызываю stop () на канале, а не когда заканчивается дорожка.

Или, в конце концов, вы знаете какую-нибудь другую библиотеку, которая бы дала мне легко то, что мне нужно? Я выбрал FMOD, потому что он довольно популярен, но мне не нравится его oldschool C ++ - как способ кодирования (без событий, без исключений и т. Д.).

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

И у меня есть ответ на мой второй вопрос: чтобы получить уведомление, вы должны сначала установить обратный вызов, как упомянуто ранее, и после этого вы должны использовать метод System.update () (он должен периодически вызываться в цикле).).Это своего рода опрос,

0 голосов
/ 08 сентября 2011

Чтобы установить режим петли звука во время выполнения, используйте Channel :: setMode, Sound :: setMode аналогичен установке значений по умолчанию для любых каналов, воспроизводимых с этого звука (это не повлияет на воспроизводимые в данный момент звуки).

Что касается Channel :: setCallback, убедитесь, что вы регулярно вызываете System :: update, чтобы вызывать обратные вызовы для таких событий, как звук, воспроизводимый до конца.

...