Ich habe auf die folgende Seite verwiesen. Der Quellcode wird grundsätzlich so verwendet, wie er ist, ohne neu geschrieben zu werden.
[ http://aidiary.hatenablog.com/entry/20120701/1341126474 ] Verwendung von SPTK (1) Installation, Wellenformzeichnung, Audiowiedergabe
[ http://aidiary.hatenablog.com/entry/20150225/1424863972 ] Statistische Sprachkonvertierung (2) Nehmen wir einen Sprachwechsler vor
*** 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'
#coding: utf-8
import pyaudio
import struct
import subprocess
#Einfacher Sprachwechsler mit SPTK
CHANNELS = 1
RATE = 16000
CHUNK = 1024
def record(raw_file, record_seconds=5):
"""Nehmen Sie eine Audiodatei auf
Die Aufnahmezeit ist festgelegt. Ich konnte die Schleife nicht beenden, als ich die Tastatur drückte ..."""
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):
"""Extraktion von Tonhöhenparametern"""
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):
"""Extraktion von Mercepstram-Parametern"""
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):
"""Verformt und synthetisiert die Tonhöhe neu
m ist größer als 1=>Tiefe Stimme
m ist kleiner als 1=>Hohe Stimme"""
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):
"""Resynthetisieren Sie, indem Sie die Sprechgeschwindigkeit ändern
frame_Verschiebung ist klein=>Schnelles Gespräch
frame_Die Verschiebung ist groß=>langsam"""
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):
"""Flüstern"""
modify_pitch(0, pitch_file, mcep_file, raw_file)
def robot_voice(frame_period, record_seconds, mcep_file, raw_file):
"""Roboterstimme
frame_Zeitraum ist klein=>Niedrig
frame_Zeitraum ist groß=>hoch"""
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):
"""Kinderstimme"""
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):
"""Dicke Stimme"""
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):
"""Rohdatei abspielen"""
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__":
#Aufnahmezeit (fest)
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"
#Nehmen Sie das Original-Audio auf und exportieren Sie es als Rohdatei
print "*** Now recording ... (%d sec)" % record_seconds
record(raw_file, record_seconds)
#Parameterextraktion
print "*** extract pitch ..."
extract_pitch(raw_file, pitch_file)
print "*** extract mel cepstrum"
extract_mcep(raw_file, mcep_file)
#Verschiedene Parametertransformationen
print "*** modify parameters ..."
#Es kann nur eine aktiviert werden
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)
#Spielen Sie das konvertierte Audio ab
print "*** play!"
play("output.raw")
Ich dachte, es sei ein Problem mit der Python-Version, also habe ich von 3 auf 2 gewechselt, aber es hat nicht funktioniert ... Ich dachte, ich könnte überhaupt nicht aufnehmen, also habe ich die Seite viele Male überprüft und studiert. Der Fehler ist von hier nicht verschwunden und hat einfach nicht funktioniert ;;
Ich bin ein Anfänger, der gerade Python studiert hat. Ich würde mich sehr freuen, wenn Sie mir einen Rat geben könnten. Vielen Dank.