【おしゃべる】ファイルに記載のかなを音声に変換する♬

まだまだ初歩的だが、ファイルに記載された’かな’を音声で発生できるようになりました。
原理は、あいうえおかきくけこさしすせそ。。。わをん。。。が。。。という感じで録音して一音ずつ分離したwavファイルを保管しておきます。
そして、一音ずつ連続再生すると文章を読むような感じになります。
女性声を目指して若干ウワンより高めの声で読みます。
###やったこと
・最初の一歩
・日本語を読ませて発声する
・ファイルを読ませて発声する
###最初の一歩
```py
# -*- 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に録音されます。
###・日本語を読ませて発声する
これも上記とほとんど同じですが、以下の関数等を追加します。

```py
。。。
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=['あ','い','し','て','る','う','わ','ん','さ','ん','ま','る']という日本語を読んでくれました。
###・ファイルを読ませて発声する
今夜の最後は以下が記述されているテキストファイルを読んで、発声することです。

```sentence.txt
あ い し て る う わ ん さ ん
```
コードは以下のとおりです。

```py
# -*- 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)エンコード以外のファイルを開くのに苦労した話](https://qiita.com/Yuu94/items/9ffdfcb2c26d6b33792e)

```py
file1 = open("sentence2.txt","r",encoding="utf-8") 
sentence=file1.read()
f_list=sentence.split(" ")
```
ということで、ほとんどの文章は「かな」レベルで発声できるようになりました。
###まとめ
・音声をフレーズとして発声させてみた
・音の高低を変換して出力できる
・テキストファイルを読み込んで発声させることができた

・すべての音に対応させる予定である
###おまけ
以下にコードを置くと共に、発声した音声を置いた
・[AudioAutoencoder/make_sentence.py](https://github.com/MuAuan/AudioAutoencoder/blob/master/make_sentence.py)
・[AudioAutoencoder/data/ohayo005_sin.wav](https://github.com/MuAuan/AudioAutoencoder/blob/master/data/ohayo005_sin.wav)