Я пытаюсь загрузить звук с помощью библиотеки 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, когда воспроизведение мультимедиа иногда прекращается.
Вы не проверяете возвращаемое значение 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.
Других решений пока нет …