Help us understand the problem. What is going on with this article?

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

まだまだ初歩的だが、ファイルに記載された’かな’を音声で発生できるようになりました。
原理は、あいうえおかきくけこさしすせそ。。。わをん。。。が。。。という感じで録音して一音ずつ分離した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=['あ','い','し','て','る','う','わ','ん','さ','ん','ま','る']という日本語を読んでくれました。

・ファイルを読ませて発声する

今夜の最後は以下が記述されているテキストファイルを読んで、発声することです。

sentence.txt
あ い し て る う わ ん さ ん

コードは以下のとおりです。

# -*- 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away