我有一个更长的wav文件,我想要播放较小的部分。 我将startTime和endTime存储为qint64,并且已经加载了audiofile:
player = new QMediaPlayer;
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(slotTick(qint64)));
player->setNotifyInterval(10);
player->setMedia(QUrl::fromLocalFile(mediasource));
...
player->setPosition(startTime);
player->play();
我用positionChanged Signal观察位置并使用下面的插槽,一旦达到所需部分的结尾就停止播放:
void PlayerWidget::slotTick(qint64 time){
if(endTime >= 0 && time >= endTime){
if(player->state() == QMediaPlayer::PlayingState){
player->stop();
}
}
不幸的是,该程序在玩家停止后不久就崩溃了。可能是什么原因
答案 0 :(得分:0)
刚刚遇到同样的问题,虽然我不知道根本原因,但我设法以某种方式直观地找到了真正有用的解决方案。
不是直接调用player->stop()
,而是使用singleShot QTimer
触发它。相当于Python代码:QtCore.QTimer.singleShot(0, player.stop)
。