Qt里的QSoundEffect在Linux和Windows平台上的差异

最近写一个morse码练习软件,使用Qt开发,用到了QSoundEffect。

因为Qt跨平台的特性,把Linux下的源代码直接放到Windows下编译可以直接通过,但运行起来却有问题。在Linux下节奏正常的播放,在Windows下节奏明显变慢。找不出问题,只好用个笨办法,在代码开始运行时启动一个QElapsedTimer,每行代码执行完毕qDebug输出一下消耗时长。把Linux和Windows平台输出的调试信息对比发现,QSoundEffect的stop,Linux平台上耗时0,Windows平台上耗时大约200多毫秒。这个时长在大多环境下不是问题,在morse码播放无法接受,一个滴声的长度一般也就在80毫秒左右。

最后用线程解决了这个问题。把播放任务放到线程里,主线程正常计时,调用线程播放滴嗒声,stop动作放在线程里,对主线程的计时没有影响。

然后的问题是200毫秒还是太长了,两个连续的滴声经常无法正常工作。于是用多个滴声线程,播放之前检查一下,谁闲着就用谁。

基本可以正常使用。

 

posted @ 2023-01-28 20:54  桑底坡  阅读(296)  评论(0编辑  收藏  举报