Python winsound, флаг ASYNC не работает?
Я использую Python 3.5 и пытаюсь воспроизвести звук, продолжая сразу же со своим сценарием; в соответствии с https://docs.python.org/3.5/library/winsound.html флаг "winsound.SND_ASYNC" должен быть подходящим способом. Однако следующее не производит никакого звука:
import winsound
winsound.PlaySound('C:/Users/Bob/Sounds/sound.wav', winsound.SND_ASYNC)
Достаточно интересно, если я поменяю флаг на "winsound.SND_FILENAME", звук воспроизводится:
import winsound
winsound.PlaySound('C:/Users/Bob/Sounds/sound.wav', winsound.SND_FILENAME)
Есть идеи, почему асинхронный флаг не работает?
2 ответа
Согласно документам,
Параметр sound может быть именем файла, аудиоданными в виде строки или None. Его интерпретация зависит от значения флагов, которые могут быть битовой комбинацией ORed констант, описанных ниже
Примерно так:
import winsound
winsound.PlaySound('C:/Users/Bob/Sounds/sound.wav', winsound.SND_FILENAME | winsound.SND_ASYNC)
На всякий случай, если кто-то будет гуглить это со смыслом, особенноwinsound.SND_ASYNC
флаг не работает в сочетании сwinsound.SND_FILENAME | winsound.SND_ASYNC
, и все работает без него, только дляwinsound.SND_FILENAME
- иногда проблема в том, что при вызове winsound в конце вашего скрипта он не будет воспроизводиться с асинхронным флагом, потому что скрипт уже остановлен, поэтому он останавливает все остальное с асинхронным флагом. Проверь это:
import winsound
import time
def wavsound(asynced=True):
flags = winsound.SND_FILENAME | winsound.SND_ASYNC if asynced else winsound.SND_FILENAME
winsound.PlaySound(r"path_to_your_wav_file", flags)
# it would or would not play at the end of your python script if:
wavsound(asynced=True) # play if this line uncommented and wavsound(asynced=False) commented
# wavsound(asynced=False) # not play if this line uncommented and wavsound(asynced=True) commented
# time.sleep(2) # if uncomment this - play first 2 seconds and then cutoff with asynced=True