2009年09月07日

STRAIGHTでハマった部分。

基本的にハマる部分はほとんどないと思うのですがいくつか。

・基本周波数が特定できない場合

 F0=0Hzになってしまうと囁き声になってしまう。
 Harvest!!の声はこれを逆手にとって使っているが、解析に失敗した部分だけ囁きになるパターンが多い。特にVOCALOIDの合成音声は解析に失敗しやすい気がする。

・straightConfig構造体の意味

 frameShift=>多分1フレームの長さ、単位はミリ秒。
 frameLength=>要検証

 STF形式で保存する際にここら辺の値を保存しなくて俺涙目。

・非周期性尺度とスペクトラム配列

 straightSourceGetAperiodicityFrequencyLength(...)と
 straightSpecgramGetFrequencyLength(...)で

非周期性尺度とスペクトラムの1フレームのデータを格納するdouble型配列に必要な配列長が与えられますが、合成元と合成先で長さが異なる場合があります。合成元の配列長と合成先の配列長が異なる場合、ピッチが変化されてしまいます。
 例えば、合成元のLengthが1024で合成先が512の場合、1オクターブ高い(低いだっけかなぁ)音で合成されます。サンプルではこの差を考慮していないのでそのまま書くと後で無理矢理下げなくてはいけなくなり、音声の質が一気に劣化します。最初これ気付くの時間かかった。
 本来合成元と合成先の値は同じになるべきなんですがなぜそうなったのかは分からないので、とりあえず合成先に無理矢理合わせて合成しています。僕の耳にはあまり品質の劣化は分かりませんでしたが、もしかしたら劣化するかもしれません。

 とりあえずこの辺りが合成で躓いた部分です。後はVSQにあわせて合成する方が僕にはしんどかったです。ご参考までに。
posted by HAL at 01:24| Comment(2) | 音声合成 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして、もしかしたら間違っているかもしれないけれども、
SPTK等とおなじなら・・・・
フレームは分析窓の事で、オーバーラップさせているんでは?

つまり、1000msの音声を500ms length の250ms shiftで分析する場合

frame 1 0〜500ms
frame 2 250〜750ms
frame 3 500〜1000ms

とか。



なんか面白そうなんで、私もつかってみたいと思います
Posted by akira_you at 2009年09月29日 11:25
はじめまして^^

音声合成は完全に素人なので適当にやってました(苦笑)
なるほど、それで合点がいきました。
と言うことはやり方的にはそれほど問題が無いみたいです。
移動分と分析する時間の長さなんですね。
ありがとうございます、謎が解けました。

STRAIGHT Libraryは重いですが、音声解析の知識が無くても多少のことができて面白いです。これが商用利用以外フリーと言うのが信じられません。
Posted by HAL at 2009年09月29日 12:49
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。