Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre

Prémisse / Ce que vous voulez réaliser

Je veux créer un changeur de voix en utilisant Python et SPTK.

Je me suis référé au site suivant. Le code source est essentiellement utilisé tel quel sans être réécrit.

Problèmes / messages d'erreur qui se produisent


*** Now recording ... (10 sec)
*** extract pitch ...
*** extract mel cepstrum
*** modify parameters ...
'x2x' �́A�����R�}���h�܂��͊O���R�}���h�A
����”\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B
'x2x' �́A�����R�}���h�܂��͊O���R�}���h�A
����”\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B
'sopr' �́A�����R�}���h�܂��͊O���R�}���h�A
����”\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B
*** play!
'sopr' �́A�����R�}���h�܂��͊O���R�}���h�A
����”\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B
Traceback (most recent call last):
  File "C:/Users/joho-2/PycharmProjects/R sound 10/R sound 10.py", line 127, in <module>
    play("output.raw")
  File "C:/Users/joho-2/PycharmProjects/R sound 10/R sound 10.py", line 78, in play
    f = open(raw_file, "rb")
IOError: [Errno 2] No such file or directory: 'output.raw'

Code source correspondant

#coding: utf-8
import pyaudio
import struct
import subprocess

#Changeur de voix simple utilisant SPTK

CHANNELS = 1
RATE = 16000
CHUNK = 1024

def record(raw_file, record_seconds=5):
    """Enregistrer un fichier audio
La durée d'enregistrement est fixe. Je n'ai pas pu terminer la boucle lorsque j'ai appuyé sur le clavier ..."""
    fp = open(raw_file, "wb")
    for _ in range(0, int(RATE / CHUNK * record_seconds)):
        data = stream.read(CHUNK)
        fp.write(struct.pack('s' * CHUNK * 2, *data))
    fp.close()
    stream.stop_stream()
    stream.close()
    p.terminate()

def extract_pitch(raw_file, pitch_file):
    """Extraction des paramètres de hauteur"""
    cmd = "x2x +sf %s | pitch -a 1 -s 16 -p 80 > %s" % (raw_file, pitch_file)
    subprocess.call(cmd, shell=True)

def extract_mcep(raw_file, mcep_file):
    """Extraction des paramètres de Mercepstram"""
    cmd = "x2x +sf %s | frame -p 80 | window | mcep -m 25 -a 0.42 > %s" % (raw_file, mcep_file)
    subprocess.call(cmd, shell=True)

def modify_pitch(m, pitch_file, mcep_file, raw_file):
    """Déformer et resynthétiser la hauteur
m est supérieur à 1=>Voix basse
m est inférieur à 1=>Voix haute"""
    cmd = "sopr -m %f %s | excite -p 80 | mlsadf -m 25 -a 0.42 -p 80 %s | clip -y -32000 32000 | x2x +fs > %s" % (m, pitch_file, mcep_file, raw_file)
    subprocess.call(cmd, shell=True)

def modify_speed(frame_shift, pitch_file, mcep_file, raw_file):
    """Resynthétiser en transformant la vitesse de parole
    frame_le décalage est petit=>Conversation rapide
    frame_Le décalage est grand=>lentement"""
    cmd = "excite -p %f %s | mlsadf -m 25 -a 0.42 -p %f %s | clip -y -32000 32000 | x2x +fs > %s" % (frame_shift, pitch_file, frame_shift, mcep_file, raw_file)
    subprocess.call(cmd, shell=True)

def hoarse_voice(pitch_file, mcep_file, raw_file):
    """Chuchotement"""
    modify_pitch(0, pitch_file, mcep_file, raw_file)

def robot_voice(frame_period, record_seconds, mcep_file, raw_file):
    """Voix de robot
    frame_la période est petite=>Faible
    frame_la période est longue=>haute"""
    sequence_length = record_seconds * RATE * frame_period
    cmd = "train -p %d -l %d | mlsadf -m 25 -a 0.42 -p 80 %s | clip -y -32000 32000 | x2x +fs > %s" % (frame_period, sequence_length, mcep_file, raw_file)
    subprocess.call(cmd, shell=True)

def child_voice(pitch_file, mcep_file, raw_file):
    """Voix enfant"""
    cmd = "sopr -m 0.4 %s | excite -p 80 | mlsadf -m 25 -a 0.1 -p 80 %s | clip -y -32000 32000 | x2x +fs > %s" % (pitch_file, mcep_file, raw_file)
    subprocess.call(cmd, shell=True)

def deep_voice(pitch_file, mcep_file, raw_file):
    """Voix épaisse"""
    cmd = "sopr -m 2.0 %s | excite -p 80 | mlsadf -m 25 -a 0.6 -p 80 %s | clip -y -32000 32000 | x2x +fs > %s" % (pitch_file, mcep_file, raw_file)
    subprocess.call(cmd, shell=True)

def raw2wav(raw_file, wav_file):
    cmd = "sox -e signed-integer -c %d -b 16 -r %d %s %s" % (CHANNELS, RATE, raw_file, wav_file)
    subprocess.call(cmd, shell=True)

def play(raw_file):
    """Lire le fichier brut"""
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(2), channels=CHANNELS, rate=RATE, output=True)
    f = open(raw_file, "rb")
    data = f.read(CHUNK)
    while data != '':
        stream.write(data)
        data = f.read(CHUNK)
    stream.stop_stream()
    stream.close()
    p.terminate()

if __name__ == "__main__":
    #Durée d'enregistrement (fixe)
    record_seconds = 10

    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    pitch_file = "temp.pitch"
    mcep_file = "temp.mcep"
    raw_file = "temp.raw"
    output_file = "output.raw"

    #Enregistrez l'audio d'origine et exportez-le sous forme de fichier brut
    print "*** Now recording ... (%d sec)" % record_seconds
    record(raw_file, record_seconds)

    #Extraction de paramètres
    print "*** extract pitch ..."
    extract_pitch(raw_file, pitch_file)

    print "*** extract mel cepstrum"
    extract_mcep(raw_file, mcep_file)

    #Diverses transformations de paramètres
    print "*** modify parameters ..."

    #Un seul peut être activé
    modify_pitch(0.3, pitch_file, mcep_file, output_file)
#    modify_speed(300, pitch_file, mcep_file, output_file)
#    hoarse_voice(pitch_file, mcep_file, output_file)
#    robot_voice(100, record_seconds, mcep_file, output_file)
#    child_voice(pitch_file, mcep_file, output_file)
    deep_voice(pitch_file, mcep_file, output_file)

    #Lire l'audio converti
    print "*** play!"
    play("output.raw")

Ce que j'ai essayé

Je pensais que c'était un problème avec la version Python, donc j'ai changé de 3 à 2 mais cela n'a pas fonctionné ... Je pensais que je ne pouvais pas enregistrer en premier lieu, alors j'ai revu le site plusieurs fois et étudié. L'erreur n'est pas partie d'ici et cela n'a tout simplement pas fonctionné ;;

Informations complémentaires (version FW / outil, etc.)

Je suis un débutant qui vient d'étudier Python récemment. Je serais très heureux si vous pouviez me donner quelques conseils. Merci beaucoup.

Recommended Posts

Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
Je veux faire un jeu avec Python
Je souhaite créer une application Web en utilisant React et Python flask
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Je veux écrire dans un fichier avec Python
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Je veux gérer l'optimisation avec python et cplex
Je veux travailler avec un robot en python.
[Python] Je veux faire d'une liste imbriquée un taple
Je veux faire fonctionner un ordinateur quantique avec Python
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux faire une macro de clic avec pyautogui (désir)
Je veux faire une macro de clic avec pyautogui (Outlook)
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Je veux ajouter un joli complément à input () en python
Je veux déboguer avec Python
[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python
Je souhaite créer une source sonore de karaoké en séparant les instruments et les voix en utilisant Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Je souhaite rechercher le texte intégral avec elasticsearch + python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Fractal pour faire et jouer avec Python
Je veux créer un environnement Python
Faisons la voix lentement avec Python
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Je veux faire de matplotlib un thème sombre
Je veux utiliser MATLAB feval avec python
Je veux créer une fenêtre avec Python
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
Essayez de créer un code de "décryptage" en Python
Je souhaite utiliser le répertoire temporaire avec Python2
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Essayez de créer un groupe de dièdre avec Python
Je veux créer du code C ++ à partir de code Python!
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques