Проблема с пониманием того, как работает микширование звуков в python + QSoundEffect + winmm под Win10

У меня есть проект Python, который использует PySide2 для работы с пользовательским интерфейсом на основе Qt, а также QSoundEffect для воспроизведения звуков. Как я выяснил, я могу создавать и воспроизводить два звука одновременно, но когда я изменяю громкость одного из них, изменяется общая громкость всех звуков.

Это считается ошибкой, см., например, здесь: https://forum.qt.io/topic/46996/qsoundeffect-setvolume-setting-whole-app-volume/10.

Поэтому я решил сделать один звук с помощью QSoundEffect, а другой — с помощью ctypes модуля python, напрямую вызывая Windows DLL, например так:

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

это также работает, и два звука воспроизводятся вместе, но, к моему удивлению, QSoundEffect.setVolume() по-прежнему управляет громкостью обоих звуков.

В принципе, я могу микшировать звуки по-разному, но не могу управлять их громкостью по отдельности.

Так что это не ошибка Qt, это что-то другое.

С другой стороны, если вы спросите на форумах MSDN, люди скажут вам, что в низкоуровневом Win API нет понятия отдельных звуков и микширования, это нужно делать вручную, а здесь я точно могу микшировать звуки.

Я -- НЕ -- спрашиваю о том, как правильно воспроизводить звуки в python, и -- НЕ -- ищу решение или стороннюю библиотеку, я знаю, что их много.

Я хочу понять, почему так происходит и с какой звуковой подсистемой Win (за неимением лучшего термина) я имею дело в данном случае, может быть, кто-нибудь, достаточно разбирающийся в этом вопросе, сможет пролить свет на это для меня.


person user1481126    schedule 11.06.2019    source источник


Ответы (1)


Я столкнулся с этой проблемой довольно давно, и действительно, это ошибка. Я думаю, что это соответствует вашему описанию:

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

Я не нашел другого решения, кроме использования сторонней звуковой библиотеки для игрового проекта, над которым я работал, но я не буду беспокоить вас этим :-) Ну, я не использовал python, QT и C++, если это имеет значение.

person Benjamin J.    schedule 11.06.2019