[PYTHON] Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern

Einführung

Ich wollte einige Inhalte mit VOICEROID erstellen, aber ich kann die Stimme auf einem Computer ohne VOICEROID-Software nicht hören! !! ** ** **

Dann dachte ich: "Lass uns die API finden und etwas dagegen tun!", Aber ich suchte nach der API, konnte sie aber überhaupt nicht finden, also gab ich den eingegebenen Text über VOICEROID weiter, speicherte die Audiodatei und machte etwas, um sie aufzurufen. Es war.

** Referenzartikel ** Versuchen Sie, VOICEROID2 (Akari Kosei) aus dem Programm zu entfernen Wie überprüfe ich die Benutzeroberfläche mit dem Inspect-Tool? [Windows 8 / Windows 8.1 Store App-Entwicklung]

** Gebraucht etc. ** python3 {tkinter, wave, pywinauto}

Betonstruktur

Verwenden Sie den tkinter von python3, um Eingabefelder, Senden-Schaltflächen und Zeichenbilder anzuzeigen. Wenn Sie die Senden-Taste drücken, wird der Text an die VOICEROID-Software gesendet. Speichern Sie ihn daher als Sprache. (Mit Pywinauto)

Sehen wir uns die Funktionsweise von VOICEROID2 an

Wenn Sie sich das Programm mit Bezug auf das ansehen, was in Referenzartikel geschrieben steht, können Sie sehen, dass das Erhalten des Handles des Fensters der Schlüssel zu dieser Zeit ist. .. Um zu sehen, wie es funktioniert, verwenden wir ein Tool namens Inspect.exe, mit dem Sie sehen können, wie die Benutzeroberfläche funktioniert.

1. Beobachten Sie den Fluss des Speicherns der Stimme

"-" Zeigt die untere Ebene an

Desktop
- "VOICEROID2"Fenster
-- ""Benutzerdefiniert
--- ""Taste
---- "Sprachspeicherung"Text

2, beobachten Sie den Fluss des Speicherns der Stimme

"-" Zeigt die untere Ebene an

Desktop
- "VOICEROID2"Fenster
-- "speichern als"Dialog
--- "sparen(S)"Taste

3, beobachten Sie den Fluss der speichernden Stimme

"-" Zeigt die untere Ebene an

Desktop
- "VOICEROID2"Fenster
-- "speichern als"Dialog
--- "speichern als"Dialog
----| "Ja(Y)"Taste
----| "Nein(N)"Taste

4, beobachten Sie den Fluss der speichernden Stimme

"-" Zeigt die untere Ebene an

Desktop
- "VOICEROID2"Fenster
-- "Sprachspeicherung"Fenster
--- "Information"Dialog
---- "OK"Taste

Nehmen Sie das entsprechende heraus und schreiben Sie es in den Code

** Kokko ** ist am nervigsten und es erscheinen mehrere ähnliche Namen, so dass die Hierarchie seltsam wird. Es tut meinem Kopf weh, also lass uns ein Lied spielen oder Kaffee trinken.

Vor dem Programmcode (Ergänzung)

Beim Voice2-Import verwendet talkVOICEROID2 Referenzartikel so wie es ist. Starten Sie VOICEROID2 im Voraus und führen Sie dann voiceroidtalk.py aus. Es gibt ein Bestätigungsfenster, wenn Sie von VOICEROID2 Voice Save zu "Save As" wechseln, diesmal jedoch auf "Vom nächsten Mal weglassen".

Hauptbildschirm

voiceroidtalk.py


import wave
import winsound as ws
import tkinter
import sys
import tkinter.messagebox as tkm
import time
from voice2 import talkVOICEROID2
from voiceroid2_1 import talkVOICEROID2_1
from voiceroid2_2 import talkVOICEROID2_2
from voiceroid2_3 import talkVOICEROID2_3
from voiceroid2_4 import talkVOICEROID2_4
import time

root=tkinter.Tk()
root.geometry("1920x1080")
root.title(u"aoi talk")
kotonoha=tkinter.PhotoImage(file="C:/Users/takumi/Desktop/voice/01.png ")
canvas=tkinter.Canvas(bg="white",width=475,height=750)
canvas.place(x=1300,y=250)
canvas.create_image(0,0, image=kotonoha, anchor=tkinter.NW)

def addlist(text):
    mysay="you: "+ text
    print(mysay)
    listbox.insert(tkinter.END,mysay)
    chat = "Aoi: " + talk(text)

    #if 0<=int(text):
    #    aoivoice=int(text)

    Entry1.delete(0, tkinter.END)
    chatCut(chat)
    #addRep(aoi)

def chatCut(chat):    
    aoi=chat
    addRep(aoi)

def addRep(aoi):
    listbox.insert(tkinter.END, aoi)
    #Sprachverarbeitung
    voiceroid=aoi[5:]
    voiceroid=voiceroid+"Tsu"
    word=len(voiceroid)
    destime=round(word/7+0.1,1)
    #destime=round(word/7+1.1,1)
    #Wenn Sie auf dem Desktop nicht sprechen können, fügen Sie den folgenden Kommentar hinzu
    #talkVOICEROID2(voiceroid)
    #time.sleep(destime)
    #-----------zzz
    #Ändern Sie die Zeitverzögerungsverarbeitung gemäß den Spezifikationen
    talkVOICEROID2_1(voiceroid)
    time.sleep(0.3)
    talkVOICEROID2_2(voiceroid)
    time.sleep(0.2)
    talkVOICEROID2_3(voiceroid)
    time.sleep(0.2)
    talkVOICEROID2_4(voiceroid)

def talk(say):
    if say == 'end':
        return ('wir sehen uns')
    else:
        return (say)

static=tkinter.Label(text=u"Sprich mit Aoi-chan!")
static.pack()

Entry1=tkinter.Entry(width=50)
Entry1.insert(tkinter.END,u"Hallo")
Entry1.pack()

button=tkinter.Button(text=u"Senden", width=50,command=lambda: addlist(Entry1.get()))
button.pack()

listbox=tkinter.Listbox(width=55,height=15)
listbox.pack()

root.mainloop()

Teil bearbeiten

Wenn Sie die Kraft haben, es einfacher zusammenzusetzen ...

voiceroid2_1.py


# -*- coding: utf-8 -*-
import pywinauto

def search_child_byclassname_1(class_name, uiaElementInfo, target_all = False):
    target = []
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():

        #Bestätigung der Übereinstimmung mit ClassName
        if childElement.class_name == class_name:
            if target_all == False:
                return childElement
            else:
                target.append(childElement)
    if target_all == False:
        #Falsch wenn nicht
        return False
    else:
        return target

def search_child_byname_1(name, uiaElementInfo):
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():

        #Bestätigung der Namensübereinstimmung
        if childElement.name == name:
            return childElement
    #Falsch wenn nicht
    return False

def talkVOICEROID2_1(speakPhrase):
    #Desktop-Elemente
    parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()

    #Suche nach Voiceroid
    voiceroid2 = search_child_byname_1("VOICEROID2",parentUIAElement)
    # *Wenn beigefügt ist
    if voiceroid2 == False:
        voiceroid2 = search_child_byname_1("VOICEROID2*",parentUIAElement)

    #Wechsel von hier
    #Holen Sie sich ElementInfo des Textelements
    TextEditViewEle = search_child_byclassname_1("TextEditView",voiceroid2)
    textBoxEle = search_child_byclassname_1("TextBox",TextEditViewEle)

    #Holen Sie sich die Kontrolle
    textBoxEditControl = pywinauto.controls.uia_controls.EditWrapper(textBoxEle)

    #Textregistrierung
    textBoxEditControl.set_edit_text(speakPhrase)

    #Schaltfläche "Get"
    buttonsEle = search_child_byclassname_1("Button",TextEditViewEle,target_all = True)
    #Suchen Sie die Wiedergabetaste
    playButtonEle = ""
    for buttonEle in buttonsEle:
        #Suchen Sie nach Textblöcken
        textBlockEle = search_child_byclassname_1("TextBlock",buttonEle)
        if textBlockEle.name == "Sprachspeicherung":
            playButtonEle = buttonEle
            break

    #Holen Sie sich die Tastensteuerung
    playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playButtonEle)

    #Drücken Sie die Wiedergabetaste
    playButtonControl.click()


voiceroid2_2.py


#Zweites Mal
# -*- coding: utf-8 -*-
import pywinauto

def search_child_byclassname_2(class_name, uiaElementInfo, target_all = False):
    target = []
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Übereinstimmung mit ClassName
        if childElement.class_name == class_name:
            if target_all == False:
                return childElement
            else:
                target.append(childElement)
    if target_all == False:
        #Falsch wenn nicht
        return False
    else:
        return target

def search_child_byname_2(name, uiaElementInfo):
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Namensübereinstimmung
        if childElement.name == name:
            return childElement
    #Falsch wenn nicht
    return False

def talkVOICEROID2_2(speakPhrase):
    #Desktop-Elemente
    parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
    #Suche nach Voiceroid
    voiceroid2 = search_child_byname_2("VOICEROID2",parentUIAElement)
    # *Wenn beigefügt ist
    if voiceroid2 == False:
        voiceroid2 = search_child_byname_2("VOICEROID2*",parentUIAElement)

    #Wechsel von hier
    #Speichern Sie als Get ElementInfo des Elements
    saveEle = search_child_byclassname_2("#32770",voiceroid2)

    playsaveEle = search_child_byclassname_2("Button",saveEle,target_all = False)

    #Holen Sie sich die Tastensteuerung
    playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playsaveEle)

    #Drücken Sie die Wiedergabetaste
    playButtonControl.click()

voiceroid2_3.py


#Drittes Mal
# -*- coding: utf-8 -*-
import pywinauto

def search_child_byclassname_3(class_name, uiaElementInfo, target_all = False):
    target = []
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Übereinstimmung mit ClassName
        if childElement.class_name == class_name:
            if target_all == False:
                return childElement
            else:
                target.append(childElement)
    if target_all == False:
        #Falsch wenn nicht
        return False
    else:
        return target

def search_child_byname_3(name, uiaElementInfo):
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Namensübereinstimmung
        if childElement.name == name:
            return childElement
    #Falsch wenn nicht
    return False

def talkVOICEROID2_3(speakPhrase):
    #Desktop-Elemente
    parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
    #Suche nach Voiceroid
    voiceroid2 = search_child_byname_3("VOICEROID2",parentUIAElement)
    # *Wenn beigefügt ist
    if voiceroid2 == False:
        voiceroid2 = search_child_byname_3("VOICEROID2*",parentUIAElement)

    #Wechsel von hier
    #Rufen Sie die ElementInfo des Sicherungselements mit dem Vornamen ab
    saveEle = search_child_byclassname_3("#32770",voiceroid2)
    
    #Als zweiten Namen speichern(ja oder Nein)Holen Sie sich ElementInfo des Elements
    resaveEle = search_child_byclassname_3("#32770",saveEle)
    
    #Im Griff in der Sekunde aufbewahren(Holen Sie sich die Schaltfläche JA)
    yessEle = search_child_byclassname_3("Button",resaveEle,target_all = True)
    #Suchen Sie die Schaltfläche Ja
    playyesEle = ""
    for yesEle in yessEle:
        #Das erste Argument ist das aktuelle Handle, das zweite Argument ist das vorherige Save-Handle
        #Suchen Sie nach dem Namen Ja, wo Sie sind
        a=search_child_byclassname_3("#32770",saveEle)
        if yesEle.name=="Ja(Y)":
            playyesEle=yesEle
            break

    #Holen Sie sich die Tastensteuerung
    playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playyesEle)

    #Drücken Sie die Wiedergabetaste
    playButtonControl.click()

voiceroid2_4.py


#4 ..
# -*- coding: utf-8 -*-
import pywinauto

def search_child_byclassname_4(class_name, uiaElementInfo, target_all = False):
    target = []
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Übereinstimmung mit ClassName
        if childElement.class_name == class_name:
            if target_all == False:
                return childElement
            else:
                target.append(childElement)
    if target_all == False:
        #Falsch wenn nicht
        return False
    else:
        return target

def search_child_byname_4(name, uiaElementInfo):
    #Durchsuchen Sie alle untergeordneten Elemente
    for childElement in uiaElementInfo.children():
        #Bestätigung der Namensübereinstimmung
        if childElement.name == name:
            return childElement
    #Falsch wenn nicht
    return False

def talkVOICEROID2_4(speakPhrase):
    #Desktop-Elemente
    parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
    #Suche nach Voiceroid
    voiceroid2 = search_child_byname_4("VOICEROID2",parentUIAElement)
    # *Wenn beigefügt ist
    if voiceroid2 == False:
        voiceroid2 = search_child_byname_4("VOICEROID2*",parentUIAElement)

    #Wechsel von hier
    #Audio-Speicherfenster(Bestätigung speichern)Holen Sie sich ElementInfo des Elements
    wavEle = search_child_byclassname_4("Window",voiceroid2)
    #Holen Sie sich ElementInfo für das Info-Dialogelement
    infoEle = search_child_byclassname_4("#32770",wavEle)
    
    #JA Tastenerfassung
    yessEle = search_child_byclassname_4("Button",infoEle,target_all = True)
    #Suchen Sie die Schaltfläche Ja
    playyesEle = ""
    for yesEle in yessEle:
        #Suchen Sie nach Textblöcken

        w=search_child_byclassname_4("#32770",wavEle)
        if yesEle.name=="OK":
            playyesEle=yesEle
            break

    #Holen Sie sich die Tastensteuerung
    playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playyesEle)

    #Drücken Sie die Wiedergabetaste
    playButtonControl.click()

Schließlich

Ich konnte es sicher herausnehmen! !! Aoi Chan Kawaii Yatter (Müdigkeit) Nun, zu diesem Zeitpunkt können nur Leute, die VOICEROID2 haben, dies tun, aber ich würde dies gerne auf Webseiten tun können.

Sicherheit? ?? Oh, es war ein guter Kerl ...

Recommended Posts

Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, die Lesezeichen zu visualisieren, die mit Doc2Vec und PCA nach Slack fliegen
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe versucht, mich automatisch mit Selen bei Twitter anzumelden (RPA, Scraping)
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Erhalten Sie Tweets mit der Google Cloud-Funktion und speichern Sie Bilder automatisch in Google Fotos
Ich habe versucht, datetime <-> string mit tzinfo mit strftime () und strptime () zu konvertieren.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
[Markov-Kette] Ich habe versucht, Zitate und negative Emotionen in Python einzulesen.
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, GAN (mnist) mit Keras zu bewegen
Ich habe DCGAN implementiert und versucht, Äpfel zu generieren
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe versucht, DP mit Fibonacci-Sequenz zu studieren
Ich habe versucht, Jupyter mit allen Amazon-Lichtern zu starten
Ich habe versucht, Tundele mit Naive Bays zu beurteilen
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe versucht zu debuggen.
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
[Einführung in AWS] Ich habe versucht, eine Konversations-App zu portieren und mit text2speech @ AWS playing zu spielen
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben