Как я могу воспроизвести звук, в то время как другие строки кода выполняются одновременно?

1

Я хочу, чтобы мой код делал это, но с музыкой, играющей в фоновом режиме:

import time 
while True:
    print ('ligma')
    time.sleep(1.5)

Я попробовал это:

import time 
import winsound
while True:
    print ('ligma')
    time.sleep(1.5)
    winsound.PlaySound("dank", winsound.SND_ALIAS)

но повторяет звук, а затем повторяет слово. Я ожидаю, что он повторит это слово и одновременно воспроизведет звук.

  • 1
    Ваше приложение однопоточное. Функция PlaySound имеет возможность сделать его многопоточным, т.е. немедленно вернуться и позволить продолжить цикл. См. Документ winsound docs.python.org/2/library/winsound.html : SND_ASYNC
Теги:
while-loop

2 ответа

1
Лучший ответ

Вам нужно воспроизвести звук в другом потоке, так что ваш другой код может выполняться одновременно.

import time
import winsound
from threading import Thread

def play_sound():
    winsound.PlaySound("dank", winsound.SND_ALIAS)

while True:
    thread = Thread(target=play_sound)
    thread.start()
    print ('ligma')
    time.sleep(1.5)

EDIT: я переместил объявление потока в цикл. Мой первоначальный ответ был создан за пределами цикла, что вызвало RuntimeError. Подробнее читайте здесь: https://docs.python.org/3/library/threading.html#threading.Thread.start

  • 0
    Я получаю сообщение об ошибке при использовании этого кода
  • 0
    @DerekLeyman Возможно, вы получили ошибку о том, что поток может быть запущен только один раз. Я скорректировал код, чтобы поток создавался в цикле. Попробуйте это и дайте мне знать, если это сработало!
0

Он называется асинхронным звуком, а флаг winsound.SND_ASYNC в PlaySound позволяет воспроизводить звук, пока ваш код продолжает выполнять:

winsound.PlaySound("dank", winsound.SND_ALIAS|winsound.SND_ASYNC)

Из памяти это даст вам один звуковой канал, т.е. Воспроизведение других звуков отключит любые воспроизводимые в данный момент звуки. Если требуется более параллельное воспроизведение, требуется что-то вроде PyGame.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню