Этот вопрос был задан и ответил здесь: Остановить воспроизведение звука в pydub
Тем не менее, один ответ не работает для меня. Я использую pydub, Python 3.6 на Ubuntu 18.04. Я новичок в Python (но не в программировании!).
Я пробовал несколько вариантов следующего кода, включая приведенный выше:
def ring():
sound_alarm = True
while True:
try:
print(f'sound_alarm is {sound_alarm}')
if sound_alarm == False:
return
play(sound)
except KeyboardInterrupt:
sound_alarm = False
print('done playing sound.')
break
Я получаю следующее:
sound_alarm is True
^Csound_alarm is True
^Csound_alarm is True
sound_alarm is True
Я позволил ему зациклиться один раз, дважды попытался убить его, и, очевидно, он продолжал зацикливаться.
Вместо этого я попытался использовать playsound, но поведение определенно мне не нравится. Это не убивает воспроизведение сразу. Он останавливает воспроизведение, но дает очень уродливую трассировку стека (см. ниже). Однако, если я не могу убить его СЕЙЧАС, похоже, это не очень хорошее решение.
(python3.6:16669): GStreamer-CRITICAL **: 11:18:46.456:
Trying to dispose element playbin, but it is in PLAYING instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.