Как я могу прервать 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 вверху вашего кода.

Другие вопросы по тегам