我有一个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,但显然我缺少一些东西。
问题: