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
Другие вопросы по тегам