irrKlang get ISound* from play2D()

irrKlang get ISound* from play2D()

本文关键字:play2D from get ISound irrKlang      更新时间:2023-10-16

我正试图用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"answers"enableSoundEffects"传递false,文档明确表示,除非其中一个为true,否则不会返回有效指针。