QT QSoundEffect立即在QThread环境中播放?

时间:2019-07-19 15:30:24

标签: c++ qt

我有一个QT项目(基于QT 5.12.4的QT Creator 4.9.2),我在其中模拟每分钟心跳数变化的心跳声。 我创建了一个具有200ms样本的QSoundEffect,并希望通过线程睡眠(例如200ms样本,800ms睡眠以模拟60 BPM)来迭代该样本。

我已按照建议将所有内容放在单独的QThread中(并且必须在后台,我需要听BPM更改)。

但是,看来

 m_heartbeat.play();

将实际播放推迟到循环结束。我从进一步的测试/调试得出结论:

如果我使用以下命令播放测试程序(通过UI按钮触发):

emit playSample();
emit mSecondsPause(800);
emit playSample();
emit mSecondsPause(800);
emit playSample();

按钮暂停几秒钟,我听到示例的1倍(但这是示例3次,这是我通过调试器运行得出的结果)。

同样在调试器中,我可以跳过play()调用,无限期地等待,但仍然听不到示例。仅在完全继续之后,我才能听到示例(循环结束)。没有调试就无法解决问题。 将线程优先级提高为实时也无济于事。

我为“低延迟”选择了QSoundEffect,但显然我缺少一些东西。

问题:

  1. 我在做什么错了?
  2. 我可以立即强制QSoundEffect.play()吗?
  3. 我需要发信号通知打样完成吗?
  4. 我可以使用一些互斥锁/信号量/ ..吗?
  5. UI线程妨碍了吗?
  6. 是否有一些不错的示例代码可以解决此问题?

0 个答案:

没有答案