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 有效指针是真的。
我正在尝试使用 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 有效指针是真的。