irrKlang получить ISound * от play2D ()

Я пытаюсь загрузить звук с помощью библиотеки irrKlang, и она прекрасно работает при воспроизведении, но я хочу получить PlayLength() а также PlayPosition() свойства, но программа завершает работу, когда сделано. Вот что я делаю:

#define ResX "res.mod"
irrklang::ISoundEngine* se = irrklang::createIrrKlangDevice();
if( !se->isCurrentlyPlaying( ResX ) ){
irrklang::ISound *s = se->play2D( ResX, false, false, false );
while( s->getPlayPosition() < s->getPlayLength() ) //Do something
}

Когда я делаю s->getPlayPosition() или же s->getPlayLength() сбой программы

Сначала я приведу здесь некоторые уточнения:
Я не могу использовать while( se->isCurrentlyPlaying( ResX ) ) так как isCurrentlyPlaying() не возвращает 0, когда воспроизведение мультимедиа иногда прекращается.

-1

Решение

Вы не проверяете возвращаемое значение play2D, чтобы увидеть, является ли он действительным указателем или нет (и это не так)

Ваш код говорит:

irrklang::ISound *s = se->play2D( ResX, false, false, false );

Согласно документам:

Возвращает указатель на ISound, только если для параметров «track», «startPaused» или «enableSoundEffects» задано значение true. Примечание: если этот метод возвращает ISound как результат, вы ДОЛЖНЫ вызывать ISound :: drop () после того, как вам больше не нужен интерфейс ISound. В противном случае это приведет к потере памяти. Этот метод также может вернуть 0, хотя ‘track’, ‘startPaused’ или ‘enableSoundEffects’ были установлены в true, если звук не может быть воспроизведен.

Таким образом, вы передаете false для «track», «startPaused» и «enableSoundEffects», а в документах конкретно говорится, что действительный указатель не будет возвращен, если только один из них не будет true.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]