не может остановить воспроизведение звука изящно используя pydub или playsound в python - PullRequest
0 голосов
/ 08 октября 2019

Этот вопрос был задан и получен ответ здесь: Остановить воспроизведение звука в 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.

1 Ответ

0 голосов
/ 25 октября 2019

Я бы порекомендовал использовать simpleaudio для воспроизведения (Pydub будет использовать его по умолчанию, если он установлен). Который должен реагировать на прерывание клавиатуры немедленно, так как он выполняет воспроизведение в отдельном потоке.

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