我正在使用QSound
播放音频文件。音频文件的持续时间是10秒。 播放完整的10秒音频文件后,我有一些任务。所以对于这个我使用QSound::isFinished
方法,但是这总是立即返回false。示例如何播放声音文件,直到它在Qt中完成?
回答
根据问题的当前措辞,我假设您正在检查isFinished,这将确实返回false。
我认为你最好的选择是使用QTimer并将它的超时信号连接到某个将检查isFinished的插槽。当声音开始播放时,您将启动计时器。当isFinished返回true时,您可以停止计时器并执行任何需要的操作。如果它返回false,请等待下一个超时。
// In the .h
// ...
private slots:
void onTimeout();
private:
QTimer* timer;
QSound sound;
// ...
// In the .cpp
// In your constructor
// ...
timer = new Timer();
connect(timer, SIGNAL(timeout()), this, SIGNAL(onTimeout())),
// ...
// Starting the sound
// ...
sound.play();
timer.start(10); // In milliseconds.
// ...
// onTimeout slot
void MyClass::onTimeout()
{
if(sound.isFinished())
{
timer.stop();
// Do some things.
}
}
我假设可以播放不同长度的音频文件,我选择了10毫秒。 QSound也不保证立即开始播放。
如果你知道为 一个 事实就起到将始终具有相同长度的音频,你可以放弃isFinished检查和更改计时器为单发与持续时间的文件的长度相同(加稍微考虑可变的开始时间)。这将导致它仅超时一次,并且应该在文件完成后这样做。这不是我喜欢的方法,但它是一种可能性。
谢谢我将实施它。但问题是,isFinished()不返回true?那么该怎么办?当声音立即开始isFinished()返回false。 –
isFinished将不会返回true,直到文件完全播放完毕,在您的情况下,大约在您调用play()之后10秒钟。直到这10秒钟过去(播放完成),它将返回false。 – MildWolfie
/*我的代码是这样的 QSound * player = 0; player = new QSound(“/ filepath.wav”); player-> play(); (!player-> isFinished); qDebug()<<“配乐完成”; 因此,我只想在声音文件完成时打电话给degug,但是当声音立即开始时,qDebug启动? –
改为使用QSoundEffect并连接到playingChanged信号。
- 1. 在Qt + Mac上播放声音文件
- 2. 播放声音,等待它完成播放并继续(iphone)
- 3. 如何使用Qt播放声音
- 4. 如何知道在Android中播放声音是否完成?
- 5. 下载完成后播放声音
- 6. 如何检查音频文件已完成在Android中播放
- 7. 如何播放音频先完成音频文件,然后开始播放?
- 8. 如何播放声音文件“OnTouch”
- 9. 播放声音直到dialogbox.dialogresult == dialogresult.OK
- 10. 声音文件未播放
- 11. 如何在完成播放声音后关闭视图
- 12. 在PyQt中播放声音文件
- 13. 在使用文本到语音前获取声音完成播放
- 14. 播放声音文件到skype电话
- 15. 成员来播放声音
- 16. 等待,直到另一个声音完成之前播放一个新的
- 17. 如何在Android QT中播放音频文件?
- 18. 使用QT播放远程声音
- 19. 如何在播放完声音后释放MediaPlayer?
- 20. 如何在WinForms中播放声音?
- 21. 如何在Java中播放声音?
- 22. 如何在JavaFX中播放声音?
- 23. 如何在Flixel中播放wav声音?
- 24. 如何在Android中播放声音
- 25. 如何在NETCore中播放声音?
- 26. 如何在iOS中播放声音?
- 27. 如何在C#中播放声音?
- 28. 如何在C++中播放.WAV声音
- 29. 如何在C#中播放声音,.NET
- 30. 如何在C#中播放声音?
我们可以看到一些示例代码吗?我很好奇你什么时候检查QSound :: isFinished,并且从你的问题不是很明显 – MildWolfie