我正试图用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 );
根据文件:
仅当参数"track"、"startPaused"或"enableSoundEffects"设置为true时,才返回指向ISound的指针。注意:如果此方法返回ISound作为结果,则在不再需要ISound接口后,必须调用ISound::drop()。否则会造成内存浪费。如果无法播放声音,此方法也可能返回0,尽管"track"、"startPaused"或"enableSoundEffects"已设置为true。
因此,您为"track"、"startPaused"one_answers"enableSoundEffects"传递false,文档明确表示,除非其中一个为true,否则不会返回有效指针。