我正在使用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. 可以阻止iOS AudioServicesPlaySystemSound直到完成播放聲音?
- 4. 如何使用Qt播放聲音
- 5. 如何知道在Android中播放聲音是否完成?
- 6. 下載完成後播放聲音
- 7. 如何檢查音頻文件已完成在Android中播放
- 8. 如何播放音頻先完成音頻文件,然後開始播放?
- 9. 如何播放聲音文件「OnTouch」
- 10. 如何播放聲音文件?
- 11. 聲音文件未播放
- 12. 播放.swf聲音文件?
- 13. 播放聲音文件iOS
- 14. WP7播放聲音 - 當聲音播放完畢
- 15. 播放聲音直到dialogbox.dialogresult == dialogresult.OK
- 16. 如何在完成播放聲音後關閉視圖
- 17. 在python中播放聲音文件
- 18. Android - 在類文件中播放聲音?
- 19. 在Java中播放聲音文件
- 20. 在PyQt中播放聲音文件
- 21. UIButton - 如何讓它播放聲音
- 22. 在使用文本到語音前獲取聲音完成播放
- 23. 播放聲音文件到skype電話
- 24. 聲音播放和播放聲音
- 25. 成員來播放聲音
- 26. 播放生成的聲音
- 27. 等待,直到另一個聲音完成之前播放一個新的
- 28. 如何在Android QT中播放音頻文件?
- 29. 如何在點擊事件中逐個播放聲音文件
- 30. 在iPhone上完美播放聲音
我們可以看到一些示例代碼嗎?我很好奇你什麼時候檢查QSound :: isFinished,並且從你的問題不是很明顯 – MildWolfie