・基本周波数が特定できない場合
F0=0Hzになってしまうと囁き声になってしまう。
Harvest!!の声はこれを逆手にとって使っているが、解析に失敗した部分だけ囁きになるパターンが多い。特にVOCALOIDの合成音声は解析に失敗しやすい気がする。
・straightConfig構造体の意味
frameShift=>多分1フレームの長さ、単位はミリ秒。
frameLength=>要検証
STF形式で保存する際にここら辺の値を保存しなくて俺涙目。
・非周期性尺度とスペクトラム配列
straightSourceGetAperiodicityFrequencyLength(...)と
straightSpecgramGetFrequencyLength(...)で
非周期性尺度とスペクトラムの1フレームのデータを格納するdouble型配列に必要な配列長が与えられますが、合成元と合成先で長さが異なる場合があります。合成元の配列長と合成先の配列長が異なる場合、ピッチが変化されてしまいます。
例えば、合成元のLengthが1024で合成先が512の場合、1オクターブ高い(低いだっけかなぁ)音で合成されます。サンプルではこの差を考慮していないのでそのまま書くと後で無理矢理下げなくてはいけなくなり、音声の質が一気に劣化します。最初これ気付くの時間かかった。
本来合成元と合成先の値は同じになるべきなんですがなぜそうなったのかは分からないので、とりあえず合成先に無理矢理合わせて合成しています。僕の耳にはあまり品質の劣化は分かりませんでしたが、もしかしたら劣化するかもしれません。
とりあえずこの辺りが合成で躓いた部分です。後はVSQにあわせて合成する方が僕にはしんどかったです。ご参考までに。
SPTK等とおなじなら・・・・
フレームは分析窓の事で、オーバーラップさせているんでは?
つまり、1000msの音声を500ms length の250ms shiftで分析する場合
frame 1 0〜500ms
frame 2 250〜750ms
frame 3 500〜1000ms
とか。
なんか面白そうなんで、私もつかってみたいと思います
音声合成は完全に素人なので適当にやってました(苦笑)
なるほど、それで合点がいきました。
と言うことはやり方的にはそれほど問題が無いみたいです。
移動分と分析する時間の長さなんですね。
ありがとうございます、謎が解けました。
STRAIGHT Libraryは重いですが、音声解析の知識が無くても多少のことができて面白いです。これが商用利用以外フリーと言うのが信じられません。