Computerstimme per Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lopt
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 09:36

Ich möchte das der Computer mir in gewissen Situationen Sachen antwortet, dazu such ich eine Computerstimme die ich per Python ansteuern kann.
Warum: Ich versuch derzeit mein Computer per Sprachbefehle zu steuern, das realisier ich per Python Skripte die die jeweiligen Wörter als Parameter erhalten, ("Musik Band", "Tee, Earl Grey, Heiß") und ich brauch in gewissen Situationen eine Antwort vom Computer.

Theoretisch besteht zwar die Möglichkeit, das ich selber etwas sprech, allerdings finde ich Computerstimmen ästhetischer als meine eigene.

Gibt es ein Modul dafür? Ich habe nichts dergleichen gefunden. Oder gibt es evtl eine Möglichkeit über Windows/Linux Programme zu gehen dafür?

Danke.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Auf dem Mac gibt es den Shell-Befehl say, der mittels subprocess sehr einfach zu benutzen ist. Für Windows und Linux kann ich leider nicht weiterhelfen, vielleicht gibt es da ja etwas äquivalentes.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo,

unter Linux bietet sich dafür "espeak" an, damit kannst du komplett dynamische Sprachausgaben erzeugen. Wenn es nur um ein, zwei vorgefertigte Ausgaben geht ("Ja", "Nein" oder wasweißich), interessiert dich vll. ein Blick auf diese Demo.

Für espeak gibt es sogar Python-Bindings - ich denke aber, dass subprocess auch völlig ausreicht.



Schönen Gruß,

brb
lunar

Für Windows gibt es die Microsoft Speech API.
LivingOn
User
Beiträge: 33
Registriert: Montag 11. August 2008, 07:53

Wenn es sich nur um ein paar feststehende Worte/Sätze handelt, dann könntest Du diese auch als wav, mp3, ... speichern und je nach Bedarf abspielen. Eine recht gute Sprachausgabe findest Du z.B. hier. Einfach gewünschten Text eingeben, Audioaufzeichnug (z.B. audacity) starten und Play drücken ;-)
Sollte es dynamisch sein und die Texte stehen zuvor nicht fest, dann ist der Vorschlag von Barabbas besser!
problembär

Ich hatte bisher unter Linux immer mbrola

http://tcts.fpms.ac.be/synthesis/

verwendet. Dafür gibt es sehr viele Stimmen in verschiedenden Sprachen. Die Installation war etwas "tricky", siehe z.B. hier.
Auch das Klangergebnis, das ich bisher damit erzielen konnte, war leider nicht so gut wie das von espeak. Ich bin beeindruckt!
Lopt
User
Beiträge: 9
Registriert: Freitag 11. März 2011, 09:36

Danke, Danke für die ganzen Antworten :)
Wenn es sich nur um ein paar feststehende Worte/Sätze handelt, dann könntest Du diese auch als wav, mp3,
An soetwas simples hab ich natürlich nicht gedacht! Es sind zwar einige verschiedene Wörter (Liste von Bands zB) aber die ändern sich kaum. Aber ich denk ich werd erstmal die anderen Möglichkeit ausprobieren/sondieren und dann ggf darauf zurückgreifen wenn mir die nicht zusagen :)
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Lopt hat geschrieben: An soetwas simples hab ich natürlich nicht gedacht!
Simpel ist relativ ;) Das fällt von der Grundidee her unter Unit Selection, und je nachdem, wie man das angeht ist es nicht ganz so simpel.

Das kann schnell ausarten. Dann lieber gleich was fertiges verwenden, wie vorgeschlagen.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Oh das hab ich schon mal gepostet, aber jetzt nomml. :P

Code: Alles auswählen

import win32com.client as wcc
from tkinter import *
class Sprecher(object):
    def __init__(self):
        self.standard="nichts"
        self.speaker=wcc.Dispatch("SAPI.SpVoice")
        self.fenster=Tk()

        self.frame1=Frame(master=self.fenster,relief=RIDGE,bd=2)
        self.frame2=Frame(master=self.fenster,relief=RIDGE,bd=3)

        self.speakButton=Button(master=self.frame1,text="Sprechen",command=self.sprechen)
        self.speakEntry=Entry(master=self.frame1,width=80)

        self.tonScale=Scale(master=self.frame2,from_=10,to=100)
        self.schnellScale=Scale(master=self.frame2,from_=-10,to=10)
        self.lageScale=Scale(master=self.frame2,from_=-10,to=10)

        self.sprechendLabel=Label(master=self.fenster,text="Gesprochen wird: "+self.standard)

        self.tonLabel=Label(master=self.frame2,text="Lautstärke bestimmen")
        self.schnellLabel=Label(master=self.frame2,text="Tonschnelle bestimmen")
        self.lageLabel=Label(master=self.frame2,text="Tonlage bestimmen")


        self.frame1.grid(row=1,padx=10,pady=10)
        self.frame2.grid(row=2)
        self.speakButton.grid(padx=10,pady=10)
        self.speakEntry.grid(padx=10,pady=10)

        self.tonScale.grid(row=3,column=1,pady=10,padx=10)
        self.schnellScale.grid(row=3,column=2,pady=10,padx=10)
        self.lageScale.grid(row=3,column=3,pady=10,padx=10)
        self.tonLabel.grid(row=4,column=1,pady=5,padx=10)
        self.schnellLabel.grid(row=4,column=2,pady=5,padx=10)
        self.lageLabel.grid(row=4,column=3,pady=5,padx=10)
        
        


        self.sprechendLabel.grid(row=4,pady=10,padx=10)
        
        self.fenster.mainloop()
    

    def sprechen(self):
        textApp=self.speakEntry.get()
        self.sprechendLabel.config(text="Gesprochen wird: "+textApp)
        tonSchnelle=int(self.schnellScale.get())
        tonLage=int(self.lageScale.get())
        tonVolume=int(self.tonScale.get())

        
        self.speaker.Rate=tonSchnelle
        self.speaker.Volume=tonVolume

        text="""<pitch middle="{0}" > {1} </pitch> """.format(tonLage,textApp)

        self.speaker.Speak(text)
                

a=Sprecher()
WildCat
User
Beiträge: 2
Registriert: Dienstag 20. Juli 2021, 15:32

Unter Linux könntest du gTTS benutzen.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

10Jahre!
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Antworten