Python + winsound – проверьте, воспроизводится ли аудиофайл

Есть ли способ проверить, воспроизводится ли аудиофайл с помощью winsound?

Идея заключается в том, что музыка воспроизводится в фоновом режиме, в то время как пользователь может вводить данные через терминал. Для этого я решил использовать SND_ASYNC.

Дело в том, что, как только файл закончен, я хочу, чтобы он воспроизводил другой звуковой файл, но у меня нет средств проверки, когда звуковой файл действительно воспроизводится.

Полагаю, я мог проверить, как долго звуковой файл и на какой-то другой игре, но я предполагаю, что есть более простой способ сделать это.

Кто-нибудь здесь знает о более легком решении?

Нет никакого способа сделать это с помощью winsound ; это мертвый простой, минималистский модуль.


Тем не менее, есть довольно простой способ сделать это косвенно: создать фоновый поток для синхронного воспроизведения звука, а затем установить флаг. Или даже просто используйте поток как флаг. Например:

 import threading import winsound t = threading.Thread(target=winsound.PlaySound, args=[sound, flags]) while True: do_some_stuff() t.join(0) if not t.is_alive(): # the sound has stopped, do something 

С другой стороны, если все, что вы хотите сделать, это воспроизвести другой звук, как только закончите каждый, просто нажмите их все в очереди:

 import queue import threading import winsound def player(q): while True: sound, flags = q.get() winsound.PlaySound(sound, flags) q = queue.Queue() t = threading.Thread(target=player, args=[q]) t.daemon = True q.push(a_sound, some_flags) q.push(another_sound, some_flags) do_stuff_for_a_long_time()