Как я могу прервать pyttsx3 и воспроизведение звука?
Я пытаюсь сделать помощника, но когда пользователь хочет воспроизвести песню, он продолжает ее воспроизводить до конца. Я хочу, чтобы он останавливался, когда пользователь нажимает клавишу. То же самое и дляengine.say()
, тоже.
Я не мог найти способ прервать действия с их документами. Естьengine.stop()
для pyttsx3, но я не мог заставить его работать. Я думал, это может быть из-заengine.runAndWait()
но если я не добавлю его, машина ничего не скажет. Как я могу решить эти проблемы? Я могу попробовать использовать и другие модули, если есть способ решить эту проблему.
import pyttsx3
from playsound import playsound
if "play" in input:
songName = input[5:] + ".mp3"
try:
playsound(songName)
except:
engine.say("I couldn't find the song.")
engine.runAndWait()
3 ответа
Я решил проблему с помощью pygame
модуль. В нем есть все, что мы хотели бы использовать в качестве функции. Если у кого-то еще есть такая проблема, вы можете попробовать.
import pygame
def playSong(songName):
pygame.mixer.music.load(songName)
pygame.mixer.music.play()
if "play" in input:
try:
songName = input[5:]+".mp3" #Takes the song name user wanted
speak("That's a nice song choice.")
playSong(songName)
except:
speak("I couldn't find the song.")
Также я пытался остановить песню и продолжить, но это не сработало. Но я оставляю это здесь как идею
if ("stop") and ("song" or "music"):
pygame.mixer.music.pause()
if ("resume" or "continue") and ("song" or "music"):
pygame.mixer.music.unpause()
с помощью pygame и pyttsx3
from pygame import mixer
import pyttsx3
engine = pyttsx3.init()
say = 'getting details of current voice'
voices = engine.getProperty('voices')
# engine.setProperty('volume',1.0)
engine.setProperty('voice', voices[1].id)
engine.setProperty('rate', 200) # setting up new voice rate
outfile = "temp.wav"
engine.save_to_file(say, outfile)
engine.runAndWait()
mixer.init()
mixer.music.load("temp.wav")
mixer.music.play()
def stop():
mixer.music.stop()
def pause():
mixer.music.pause()
def unpause():
mixer.music.unpause()
while True:
print("Press 'p' to pause, 'r' to resume")
print("Press 'e' to exit the program")
query = input(" ")
if query == 'p':
pause()
elif query == 'r':
unpause()
elif query == 'e':
mixer.music.stop()
break
Вы можете использовать модуль клавиатуры Python
if keyboard.is_pressed("q"): #If Q key is pressed
engine.stop()
Не забудьте добавить import keyboard
вверху вашего кода.