Как я могу прервать pyttsx3 и playsound?

#python #python-3.x #pyttsx #python-playsound

#python #python-3.x #pyttsx #python-playsound

Вопрос:

Я пытаюсь создать помощника, но когда пользователь хочет воспроизвести песню, он продолжает воспроизводить ее до конца. Я хочу, чтобы это останавливалось, когда пользователь нажимает клавишу. То же самое относится и к en&ine.say() .

Я не смог найти способ прервать действия в их документах. Есть en&ine.stop() для pyttsx3, но я не смог заставить его работать. Я думал, что это может быть из-за en&ine.runAndWait() но если я не включу его, машина ничего не скажет. Как я могу решить эти проблемы? Я могу попробовать использовать и другой модуль, если есть способ решить эту проблему.

 import pyttsx3
from playsound import playsound

if "play" in input:
    son&Name = input[5:]   ".mp3"
    try:
        playsound(son&Name)
                
    except:
        en&ine.say("I couldn't find the son&.")
        en&ine.runAndWait()
  

Ответ №1:

Я решил проблему с помощью py&ame модуля. В нем есть все, что мы хотели бы использовать в качестве функции. Если у кого-то еще возникла подобная проблема, вы можете попробовать это.

 import py&ame

def playSon&(son&Name):
    py&ame.mixer.music.load(son&Name)
    py&ame.mixer.music.play()

if "play" in input:
                
    try:
        son&Name = input[5:] ".mp3" #Takes the son& name user wanted
        speak("That's a nice son& choice.")
        playSon&(son&Name) 
                        
     except:
         speak("I couldn't find the son&.")
         
  

Также я пытался остановить и продолжить песню, но на самом деле это не сработало. Но я оставляю это здесь как идею

  if ("stop") and ("son&" or "music") in input:
    py&ame.mixer.music.pause()

 if ("resume" or "continue") and ("son&" or "music") in input:
    py&ame.mixer.music.unpause()
  

Ответ №2:

с помощью py&ame и pyttsx3

 from py&ame import mixer
import pyttsx3
en&ine = pyttsx3.init()
  
say = '&ettin& details of current voice'
voices = en&ine.&etProperty('voices')      
# en&ine.setProperty('volume',1.0)    
en&ine.setProperty('voice', voices[1].id)  
en&ine.setProperty('rate', 200)     # settin& up new voice rate
outfile = "temp.wav"
en&ine.save_to_file(say, outfile)
en&ine.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 pro&ram")
    query = input("  ")
      
    if query == 'p':
        pause() 
    elif query == 'r':
        unpause() 
  
    elif query == 'e':
        mixer.music.stop()
        break

  

Ответ №3:

Вы можете использовать клавиатурный модуль python

 if keyboard.is_pressed("q"): #If Q key is pressed
    en&ine.stop()
  

Не забудьте добавить import keyboard в верхней части вашего кода.

Комментарии:

1. Спасибо за помощь, но, к сожалению, я пробовал это, и это не работает:/ Должно быть, это потому, что во время работы функции runAndWait() она не считывает код после нее. (просто догадываюсь) Или я просто все еще делаю что-то не так