irrKlang 从 play2D() 获取 ISound*

irrKlang get ISound* from 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() 在媒体有时停止播放时不会 return 0。

您没有检查 play2D 的 return 值以查看它是否是有效指针(实际上不是)

您的代码表示:

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

根据文档:

Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or 'enableSoundEffects' have been set to true. Note: if this method returns an ISound as result, you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or 'enableSoundEffects' have been set to true, if the sound could not be played.

因此,您为 'track'、'startPaused' 和 'enableSoundEffects' 传递了 false 并且文档明确指出除非其中之一,否则不会 returned 有效指针是真的。