-1

我正在尝试使用 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。

4

1 回答 1

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' 和 'enableSoundEffects' 传递了 false,并且文档明确指出,除非其中一个为 true,否则不会返回有效指针。

于 2015-11-16T03:00:06.963 回答