Je voulais créer du contenu avec VOICEROID, mais je n'entends pas la voix sur un ordinateur qui n'a pas le logiciel VOICEROID! !! ** **
Ensuite, j'ai pensé: "Trouvons l'API et faisons quelque chose!", Mais j'ai cherché l'API, mais je ne l'ai pas trouvée du tout, j'ai donc passé le texte saisi via VOICEROID, sauvegardé le fichier audio et fait quelque chose pour l'appeler. C'était.
** Article de référence ** Essayez de déplacer VOICEROID2 (Akari Kosei) du programme Comment inspecter l'interface utilisateur avec l'outil Inspecter? [Développement d'applications Windows 8 / Windows 8.1 Store]
** Utilisé etc. ** python3 {tkinter, wave, pywinauto}
Utilisez le tkinter de python3 pour afficher les zones de saisie, les boutons d'envoi et les images de caractères. Lorsque vous appuyez sur le bouton d'envoi, le texte est envoyé au logiciel VOICEROID, alors enregistrez-le en tant que voix. (Utilisation de pywinauto)
Si vous regardez le programme en référence à ce qui est écrit dans Article de référence, vous pouvez voir que l'obtention de la poignée de la fenêtre est la clé de cette fois. .. Pour voir comment cela fonctionne, nous utilisons un outil appelé Inspect.exe qui vous permet de voir comment fonctionne l'interface utilisateur.
"-" Indique la couche inférieure
bureau
- "VOICEROID2"fenêtre
-- ""Douane
--- ""bouton
---- "Stockage de la voix"texte
"-" Indique la couche inférieure
bureau
- "VOICEROID2"fenêtre
-- "enregistrer sous"dialogue
--- "sauvegarder(S)"bouton
"-" Indique la couche inférieure
bureau
- "VOICEROID2"fenêtre
-- "enregistrer sous"dialogue
--- "enregistrer sous"dialogue
----| "Oui(Y)"bouton
----| "Non(N)"bouton
"-" Indique la couche inférieure
bureau
- "VOICEROID2"fenêtre
-- "Stockage de la voix"fenêtre
--- "information"dialogue
---- "OK"bouton
** Kokko ** est le plus ennuyeux, et plusieurs noms similaires apparaissent, donc la hiérarchie devient étrange. Ça me fait mal à la tête, alors joue une chanson ou bois un café.
from voice2 import talkVOICEROID2 utilise Article de référence tel quel. Démarrez VOICEROID2 à l'avance, puis exécutez voiceroidtalk.py. Il y a une fenêtre de confirmation lors du passage de l'enregistrement vocal VOICEROID2 à «Enregistrer sous», mais cette fois, il est réglé sur «Omettre de la prochaine fois»
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)
#Traitement de la voix
voiceroid=aoi[5:]
voiceroid=voiceroid+"Tsu"
word=len(voiceroid)
destime=round(word/7+0.1,1)
#destime=round(word/7+1.1,1)
#Si vous ne pouvez pas parler sur le bureau, ajoutez le commentaire suivant
#talkVOICEROID2(voiceroid)
#time.sleep(destime)
#-----------zzz
#Changer le traitement de la temporisation selon les spécifications
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 ('à plus')
else:
return (say)
static=tkinter.Label(text=u"Parlez à Aoi-chan!")
static.pack()
Entry1=tkinter.Entry(width=50)
Entry1.insert(tkinter.END,u"Bonjour")
Entry1.pack()
button=tkinter.Button(text=u"Envoyer", width=50,command=lambda: addlist(Entry1.get()))
button.pack()
listbox=tkinter.Listbox(width=55,height=15)
listbox.pack()
root.mainloop()
Si vous avez le pouvoir de l'assembler plus facilement ...
voiceroid2_1.py
# -*- coding: utf-8 -*-
import pywinauto
def search_child_byclassname_1(class_name, uiaElementInfo, target_all = False):
target = []
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom de classe
if childElement.class_name == class_name:
if target_all == False:
return childElement
else:
target.append(childElement)
if target_all == False:
#Faux sinon
return False
else:
return target
def search_child_byname_1(name, uiaElementInfo):
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom
if childElement.name == name:
return childElement
#Faux sinon
return False
def talkVOICEROID2_1(speakPhrase):
#Éléments de bureau
parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
#Rechercher voiceroid
voiceroid2 = search_child_byname_1("VOICEROID2",parentUIAElement)
# *Si est attaché
if voiceroid2 == False:
voiceroid2 = search_child_byname_1("VOICEROID2*",parentUIAElement)
#Changer d'ici
#Obtenir ElementInfo de l'élément de texte
TextEditViewEle = search_child_byclassname_1("TextEditView",voiceroid2)
textBoxEle = search_child_byclassname_1("TextBox",TextEditViewEle)
#Prenez le contrôle
textBoxEditControl = pywinauto.controls.uia_controls.EditWrapper(textBoxEle)
#Enregistrement de texte
textBoxEditControl.set_edit_text(speakPhrase)
#Obtenir le bouton
buttonsEle = search_child_byclassname_1("Button",TextEditViewEle,target_all = True)
#Trouvez le bouton de lecture
playButtonEle = ""
for buttonEle in buttonsEle:
#Rechercher des blocs de texte
textBlockEle = search_child_byclassname_1("TextBlock",buttonEle)
if textBlockEle.name == "Stockage de la voix":
playButtonEle = buttonEle
break
#Obtenir le contrôle du bouton
playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playButtonEle)
#Appuyez sur le bouton de lecture
playButtonControl.click()
voiceroid2_2.py
#Deuxième fois
# -*- coding: utf-8 -*-
import pywinauto
def search_child_byclassname_2(class_name, uiaElementInfo, target_all = False):
target = []
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom de classe
if childElement.class_name == class_name:
if target_all == False:
return childElement
else:
target.append(childElement)
if target_all == False:
#Faux sinon
return False
else:
return target
def search_child_byname_2(name, uiaElementInfo):
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom
if childElement.name == name:
return childElement
#Faux sinon
return False
def talkVOICEROID2_2(speakPhrase):
#Éléments de bureau
parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
#Rechercher voiceroid
voiceroid2 = search_child_byname_2("VOICEROID2",parentUIAElement)
# *Si est attaché
if voiceroid2 == False:
voiceroid2 = search_child_byname_2("VOICEROID2*",parentUIAElement)
#Changer d'ici
#Enregistrer sous Obtenir les informations d'élément
saveEle = search_child_byclassname_2("#32770",voiceroid2)
playsaveEle = search_child_byclassname_2("Button",saveEle,target_all = False)
#Obtenir le contrôle du bouton
playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playsaveEle)
#Appuyez sur le bouton de lecture
playButtonControl.click()
voiceroid2_3.py
#Troisième fois
# -*- coding: utf-8 -*-
import pywinauto
def search_child_byclassname_3(class_name, uiaElementInfo, target_all = False):
target = []
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom de classe
if childElement.class_name == class_name:
if target_all == False:
return childElement
else:
target.append(childElement)
if target_all == False:
#Faux sinon
return False
else:
return target
def search_child_byname_3(name, uiaElementInfo):
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom
if childElement.name == name:
return childElement
#Faux sinon
return False
def talkVOICEROID2_3(speakPhrase):
#Éléments de bureau
parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
#Rechercher voiceroid
voiceroid2 = search_child_byname_3("VOICEROID2",parentUIAElement)
# *Si est attaché
if voiceroid2 == False:
voiceroid2 = search_child_byname_3("VOICEROID2*",parentUIAElement)
#Changer d'ici
#Obtenez le ElementInfo de l'élément de sauvegarde avec le prénom
saveEle = search_child_byclassname_3("#32770",voiceroid2)
#Enregistrer sous un deuxième nom(Oui ou non)Obtenir ElementInfo de l'élément
resaveEle = search_child_byclassname_3("#32770",saveEle)
#Stocker dans la poignée à l'intérieur du second(Obtenez le bouton OUI)
yessEle = search_child_byclassname_3("Button",resaveEle,target_all = True)
#Trouvez le bouton Oui
playyesEle = ""
for yesEle in yessEle:
#Le premier argument est le handle actuel, le second argument est le handle de sauvegarde précédent
#Cherchez le nom oui là où vous êtes
a=search_child_byclassname_3("#32770",saveEle)
if yesEle.name=="Oui(Y)":
playyesEle=yesEle
break
#Obtenir le contrôle du bouton
playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playyesEle)
#Appuyez sur le bouton de lecture
playButtonControl.click()
voiceroid2_4.py
#4e
# -*- coding: utf-8 -*-
import pywinauto
def search_child_byclassname_4(class_name, uiaElementInfo, target_all = False):
target = []
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom de classe
if childElement.class_name == class_name:
if target_all == False:
return childElement
else:
target.append(childElement)
if target_all == False:
#Faux sinon
return False
else:
return target
def search_child_byname_4(name, uiaElementInfo):
#Rechercher tous les éléments enfants
for childElement in uiaElementInfo.children():
#Confirmation de correspondance de nom
if childElement.name == name:
return childElement
#Faux sinon
return False
def talkVOICEROID2_4(speakPhrase):
#Éléments de bureau
parentUIAElement = pywinauto.uia_element_info.UIAElementInfo()
#Rechercher voiceroid
voiceroid2 = search_child_byname_4("VOICEROID2",parentUIAElement)
# *Si est attaché
if voiceroid2 == False:
voiceroid2 = search_child_byname_4("VOICEROID2*",parentUIAElement)
#Changer d'ici
#Fenêtre d'enregistrement audio(Enregistrer la confirmation)Obtenir ElementInfo de l'élément
wavEle = search_child_byclassname_4("Window",voiceroid2)
#Obtenir ElementInfo pour l'élément de dialogue d'informations
infoEle = search_child_byclassname_4("#32770",wavEle)
#Acquisition du bouton OUI
yessEle = search_child_byclassname_4("Button",infoEle,target_all = True)
#Trouvez le bouton Oui
playyesEle = ""
for yesEle in yessEle:
#Rechercher des blocs de texte
w=search_child_byclassname_4("#32770",wavEle)
if yesEle.name=="OK":
playyesEle=yesEle
break
#Obtenir le contrôle du bouton
playButtonControl = pywinauto.controls.uia_controls.ButtonWrapper(playyesEle)
#Appuyez sur le bouton de lecture
playButtonControl.click()
J'ai pu le sortir en toute sécurité! !! Aoi Chan Kawaii Yatter (Fatigue) Eh bien, à ce stade, seules les personnes qui ont VOICEROID2 peuvent le faire, mais j'aimerais pouvoir le faire sur des pages Web.
Recommended Posts