如何播放声音文件直到它完成Qt?

时间:2015-10-07 11:46:49

标签: qt

我正在使用QSound来播放音频文件。音频文件持续时间为10秒。 播放完整的10秒音频文件后,我有一些任务。所以对于这个我使用QSound::isFinished方法,但这总是立即返回false。示例

2 个答案:

答案 0 :(得分:3)

根据问题的当前措辞,我假设您正在立即检查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检查并将定时器更改为单次拍摄,持续时间与文件的长度相同(加上一点来说明变量的开始时间)。这将导致它只超时一次,在文件结束后这样做。这不是我的首选方法,但它有可能。

答案 1 :(得分:1)

改为使用QSoundEffect并连接到playingChanged信号。

http://doc.qt.io/qt-5/qsoundeffect.html#playing-prop