问题理解混音如何在Win10下的python + QSoundEffect + winmm中工作

时间:2019-06-11 04:22:03

标签: python windows qt audio mixing

我有一个Python项目,该项目使用PySide2与基于Qt的UI配合使用,并且还使用QSoundEffect播放声音。我发现,我可以同时创建和播放两种声音,但是当我改变一种声音的音量时,它会改变所有声音的总音量。

它被认为是错误,请参见此处的示例: https://forum.qt.io/topic/46996/qsoundeffect-setvolume-setting-whole-app-volume/10

因此,我决定使用QSoundEffect发出一种声音,并借助python模块ctypes发出另一种声音,直接调用Windows DLL,如下所示:

from ctypes import c_buffer, windll
...
windll.winmm.mciSendStringA(....)

这也可行,并且两种声音一起播放,但是令我惊讶的是QSoundEffect.setVolume()仍然控制着两种声音的音量。

基本上,我可以用不同的方式混合声音,但不能单独控制其音量。

所以,这不是Qt错误,而是其他原因。

另一方面,如果您在MSDN论坛上提问,人们会告诉您,低级Win API没有分离声音和混合的概念,您需要手动进行,而我绝对可以混合声音在这里。

我-不是-问如何在python中正确播放声音,并且-不是-寻找解决方案或第三方库,我知道很多。

我想了解这种情况的发生原因,以及在这种情况下我要处理的是哪种Win sound子系统(由于缺少更好的术语),也许对此事足够精通的人可能会对此有所启发对我来说。

1 个答案:

答案 0 :(得分:0)

我很早以前就遇到了这个问题,确实,这是一个错误。我认为这符合您的描述:

https://bugreports.qt.io/browse/QTBUG-43765

我没有找到其他解决方案,但是在我正在从事的游戏项目中使用了第三方声音库,但是我不会为您烦恼:-) 好吧,如果那很重要的话,我没有使用python,QT和C ++。