まだまだ初歩的だが、ファイルに記載された’かな’を音声で発生できるようになりました。
原理は、あいうえおかきくけこさしすせそ。。。わをん。。。が。。。という感じで録音して一音ずつ分離したwavファイルを保管しておきます。
そして、一音ずつ連続再生すると文章を読むような感じになります。
女性声を目指して若干ウワンより高めの声で読みます。
###やったこと
・最初の一歩
・日本語を読ませて発声する
・ファイルを読ませて発声する
###最初の一歩
# -*- coding:utf-8 -*-
import pyaudio
import numpy as np
import wave
RATE=44100
CHUNK = 22050
p=pyaudio.PyAudio()
f_list=['a','i','si','te','ru','u','wa','n','sa','n']
stream=p.open(format = pyaudio.paInt16,
channels = 1,
rate = int(RATE*1.15),
frames_per_buffer = CHUNK,
input = True,
output = True) # inputとoutputを同時にTrueにする
w = wave.Wave_write("./fft_sound/Success_a-n_05/a-n-iine/aiueo/ohayo005_sin.wav")
p = (1, 2, RATE, CHUNK, 'NONE', 'not compressed')
w.setparams(p)
for i in f_list:
wavfile = './fft_sound/Success_a-n_05/a-n-iine/aiueo/'+i+'.wav'
print(wavfile)
wr = wave.open(wavfile, "rb")
input = wr.readframes(wr.getnframes())
output = stream.write(input)
w.writeframes(input)
こんなに簡単なコードでf_list=['a','i','si','te','ru','u','wa','n','sa','n']と発声してくれました。
しかも音声は少しアップrate = int(RATE*1.15)しています。
そして、その音声はohayo005_sin.wavに録音されます。
###・日本語を読ませて発声する
これも上記とほとんど同じですが、以下の関数等を追加します。
。。。
f_list=['あ','い','し','て','る','う','わ','ん','さ','ん','ま','る']
def kana2a(i):
j='n'
if i=='あ':
j='a'
elif i=='い':
j='i'
elif i=='し':
j='si'
elif i=='て':
j='te'
elif i=='る':
j='ru'
elif i=='う':
j='u'
elif i=='わ':
j='wa'
elif i=='ん':
j='n'
elif i=='さ':
j='sa'
elif i=='ま':
j='ma'
return j
for i in f_list:
i=kana2a(i)
。。。
これで、見事にf_list=['あ','い','し','て','る','う','わ','ん','さ','ん','ま','る']という日本語を読んでくれました。
###・ファイルを読ませて発声する
今夜の最後は以下が記述されているテキストファイルを読んで、発声することです。
あ い し て る う わ ん さ ん
コードは以下のとおりです。
# -*- coding:utf-8 -*-
import pyaudio
import numpy as np
import wave
import struct
RATE=44100
CHUNK = 22050
p=pyaudio.PyAudio()
file1 = open("sentence2.txt","r",encoding="utf-8")
sentence=file1.read()
print(sentence)
f_list=sentence.split(" ")
stream=p.open(format = pyaudio.paInt16,
channels = 1,
rate = int(RATE*1.15),
frames_per_buffer = CHUNK,
input = True,
output = True) # inputとoutputを同時にTrueにする
w = wave.Wave_write("./fft_sound/Success_a-n_05/a-n-iine/aiueo/ohayo005_sin.wav")
p = (1, 2, RATE, CHUNK, 'NONE', 'not compressed')
w.setparams(p)
def kana2a(i):
j='n'
if i=='あ':
j='a'
elif i=='い':
j='i'
elif i=='し':
j='si'
elif i=='て':
j='te'
elif i=='る':
j='ru'
elif i=='う':
j='u'
elif i=='わ':
j='wa'
elif i=='ん':
j='n'
elif i=='さ':
j='sa'
elif i=='ま':
j='ma'
return j
for i in f_list:
i=kana2a(i)
wavfile = './fft_sound/Success_a-n_05/a-n-iine/aiueo/'+i+'.wav'
print(wavfile)
wr = wave.open(wavfile, "rb")
input = wr.readframes(wr.getnframes())
output = stream.write(input)
w.writeframes(input)
以下の三行で日本語テキストが読み込み、sentenceに代入し、f_list=['あ', 'い', 'し', 'て', 'る', 'う', 'わ', 'ん', 'さ', 'ん']を作成してくれます。
※ここで「,encoding="utf-8"」を記載することが日本語入力のミソです
参考では、「,encoding="utf-8_sig"」でできたとのことですが、ウワンは通常のものでできました
【参考】
WindowsでCP932(Shift-JIS)エンコード以外のファイルを開くのに苦労した話
file1 = open("sentence2.txt","r",encoding="utf-8")
sentence=file1.read()
f_list=sentence.split(" ")
ということで、ほとんどの文章は「かな」レベルで発声できるようになりました。
###まとめ
・音声をフレーズとして発声させてみた
・音の高低を変換して出力できる
・テキストファイルを読み込んで発声させることができた
・すべての音に対応させる予定である
###おまけ
以下にコードを置くと共に、発声した音声を置いた
・AudioAutoencoder/make_sentence.py
・AudioAutoencoder/data/ohayo005_sin.wav