1: 名無しさん@おーぷん 2016/03/30(水)12:11:21 ID:55H
もう旬は過ぎたと思うけど音声合成作ろうと思うんだ
どうかな?
多分のんびりベースなので数ヶ月かかると思う
2: 酢酸イオン◆CH3COOHLDA 2016/03/30(水)12:14:39 ID:KXQ
がんばあ
3: 名無しさん@おーぷん 2016/03/30(水)12:16:05 ID:55H
応援あった!
やりまする
基本はsin波合成というかフォルマント合成でいこうと思うよ
元音声からフォルマント抜き出してパラメータとして合成するよ
4: 名無しさん@おーぷん 2016/03/30(水)12:35:25 ID:55H
波形の分析は普通FFTとか使うけど今回は使いません
というか使うけど時間分解能がいまひとつなので簡単なDFTを改造して使うよ
DFTもFFTも中身は同じだけど、位相成分があると嘘の周波数を出力するね
だから、一波形を切り出してDFTするよ
ゼロクロスからの一波形をDFTするとcos成分が小さくなるんだよね
この結果の虚数部が周波数特性を表しているよ
6: Awn◆AwnAwnAwnA 2016/03/30(水)13:49:07 ID:bwA
なんというDSPスレ!これは期待age
7: 名無しさん@おーぷん 2016/03/30(水)14:05:49 ID:55H
まず足回りから作るよ
https://ideone.com/lKFPcXこれがPCMクラス
MONO_PCM pcm1;
MONO_PCM pcm2;
pcm1.clear();
pcm1.add(0);
pcm1.add(1);
pcm1.add(2);
pcm1.add(1);
pcm1.add(0);
pcm1.write("test.wav");
pcm2.write("test.wav");
こんな感じで自由にwavファイルが出来るよ。
途中の要素は
for( size_t i = 0 ; i < pcm1.s.size() ; i++ ){
pcm1.s[i] *= 2;
}
みたいにいじれるよ
今回はライブラリとか使わないつもりなので、ゴリゴリ書くよ
9: 名無しさん@おーぷん 2016/03/31(木)13:12:15 ID:gUR
次にDFTします。なぜFFTじゃないかというと周波数分解能が十分じゃ
ないと思っているから。1024サンプルでn/1024という周期を持っていて
なおかつ先頭が0からはじまって、最後が0で終わる周波数以外は
COS成分が出ちゃいます。
これは位相が0じゃないからです。先頭が0から始まる波なら
f(x)=αsin(θ)という関数の合成で表せるのですが、
f(x)=αsin(θ+β)だと加法定理でsin(θ)cos(β)+cos(θ)sin(β)と
分解されてしまってcos成分が出てしまいます。
よってすごくシンプルに考えて1波形切り出してDFTしてCOS成分
ネグっちゃえば周波数成分じゃん!となりそうです
10: 名無しさん@おーぷん 2016/03/31(木)13:26:42 ID:gUR
それでcos成分をネグるとか色々弄りたいので自分でも直せるDFTにします。
コードはこれです。
https://ideone.com/OXlWXi簡単に説明すると前のPCMクラスのstからedまでの場所について
dftすると結果がグローバルのRe,Imに格納されます。
で結果をN=ed-stとしてidft(逆デジタルフーリエ変換)を
呼び出すと元の波形に戻ります。
これもれなく元に戻ります。
idftすごいですね。前も後ろもどこも抜けません。
11: 名無しさん@おーぷん 2016/04/02(土)15:37:49 ID:o5g
では早速wavファイルを読んでみますよ
結構ソースがスパゲティですが大体次の流れでいきます
無音領域を検知してファイル内の先頭、最後を求める
求めた領域から1波形を抽出しDFTにかける
求まったデータの虚数部のみから最大値をいくつかもとめて逆DFTする
その時の虚数部の値をグラフ化する
虚数部は元に戻す時にSINの係数になります。よってこれを使いますよ
さて問題は一波形の抽出ですね。波形を見てみると微小範囲ではそれほど変わっていません
よってDFTと同じ原理で直前の波形と重ねあわせて一番マッチするところを
一波形とします。サンプリング数1からnまで値をずらして掛けあわせて
最大となるところが一波形となりますよ、多分。
でこれで「ひ」という音声を解析します。
とりあえずDFTで20個フォルマント合成したのがこれ
http://neon.cx/up/NEONUjdL5y.wavそのフォルマント周波数の時間推移がこれです。
http://neon.cx/up/NEONU9XNGQ.gif 12: 名無しさん@おーぷん 2016/04/04(月)17:21:01 ID:qu8
13: 名無しさん@おーぷん 2016/04/10(日)08:02:29 ID:OLN
なんかとてつもなく難しそうなことやってる!
14: 名無しさん@おーぷん 2016/04/11(月)17:03:10 ID:FWQ
友達の声をサンプリングしてフォルマント周波数を収集してます
分かったのは上の図で4kHzあたりにも波がありますが、
これは低い方の波形と同一だということです
EXCELでプロットするまで分からなかったですよ
しばらく波形とにらめっこしますよ
15: 名無しさん@おーぷん 2016/04/12(火)13:36:37 ID:J3A
16: 名無しさん@おーぷん 2016/04/12(火)13:44:29 ID:J3A
17: 名無しさん@おーぷん 2016/07/11(月)21:30:59 ID:myE
何やってるか高レベルすぎてわからんぞい
引用元: http://toro.open2ch.net/test/read.cgi/tech/1459307481/
同人音声ちゃんねる をフォロー
コメント