2009年09月07日

STRAIGHTでの合成詳細

ソースコード:straightSynthesizer.zip

 VisualStudio2008Expressにてコンパイルを確認。
 UTAU音声セットの解析用プログラムとテキストVSQとUTAU原音設定を読み込んで合成音を作るプログラムに分かれています。
 ちなみに今回楽曲内で使用した原音設定は母音とn音、母音様子音から始まる音に関してオーバーラップを40msに設定しなおしています。こうしないと繋ぎ目が不自然になると思います。

http://www.crestmuse.jp/cmstraight/index.php?STRAIGHT%20Wiki
STRAIGHT Libraryに関してはこちらをご参照ください。
また、僕とリンク先とは一切関係がございません。この記事及びツールなど関連事項をリンク先で質問なさるのはご遠慮ください。STRAIGHT Libraryの使用に関しましてはリンク先に従ってください。


・straightNote::CreateNote(,,,)

 音符の設定に基づいてstraightNote内部に一音分のキャッシュを作ります。基本的に音符の長さをTick長と原音設定から計算し直して時間伸縮させています。
 音符長は、後続音が連続でなければ

 ・(Velocity伸縮比)=pow(2.0,(64-Velocity)/64)
 ・(実際の音符長)=(ノートの音符長)+(先行発音)*(Velocity伸縮比)

後続に連続する音符がある場合、

 ・(実際の音符長)=(ノートの音符長)+(先行発音)*(Velocity伸縮比)
         -(次音符の先行発音)*(次音符のVelocity伸縮比)
         +(次音符のオーバーラップ)

で決定されます。

 実際に音符を伸縮させる時には

 ・[左ブランク〜固定長分]*(Velocity伸縮比)
 ・[固定長終了〜右ブランク]

の二つの部分に分けて計算しています。Velocityによって子音の長さを変えています。VEL=64で伸縮比1、VEL=0で2倍、VEL=128で半分の長さになるはずです。
 またこの部分でAccentとDecayを反映させています。単純に直線的に影響を与えてるので説明は割愛。Accent=50,Decay=0で何も影響されません。

・straightSynthesizer::Synthesize()

 現在のノートと次のノートを読み込んでひたすら合成していきます。後続に連続するノートがある時は、オーバラップ分を線形にモーフィングしています。個人的にはオーバーラップ分をのりしろの様に重ねるよりも、次の音符の最初の音に向かってモーフィングさせた方が効果的な気もしますが、そうした場合波形の見直しを迫られるので少し面倒くさいです。今回は単純にのりしろ的に合成しています。

 音程は後続音が連続している場合、オーバーラップより指定時間(今回は50ms)前から音程を対数的(と言うのか?)に変化させています。この部分の50msというのは、勘です、時々ケロケロします。

 Vibratoは音量・音程ともにかけています。最後にDYNとPIT/PBSを反映させておしまい。

 基本的にやることは読み込み部分がしんどいだけなので割とさっくりやみーに作っています。アップしたソースは適当そのものなのでどんなバグが起こっても責任を負いかねますので悪しからず。
 もう少しいいもの作る方向に頑張ればよかったかと思った。今後に役立てられるご意見があれば是非聞かせてください、という意味合いでソースアップしておきます。


 ついでに開発中に作ったデータをアップしておきます。
 合成結果はいわゆるスッピンデータではなくボリュームに関してはいじっています。ADSR処理はついていないのでぶつってきれるんですよ…
posted by HAL at 16:40| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

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) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年09月04日

STRAIGHTライブラリを使ったUTAU音声セットベースの歌声合成のまとめ。

とりあえず俺のメモ代わりに。

・何をしているのか
 UTAUコアの処理をSTRAIGHTに投げているだけです。他に難しいことは一切していません。STRAIGHTはモーフィングできるので、連続音をモーフィングから作れないだろうかと思ったんです。
 実際の作業ははちゅねのないしょを入れたボカロエディタからテキストVSQを吐き出して、そのトラックデータとUTAUの音声セットを使って音を繋げています。STRAIGHTライブラリでは音声モーフィングが非常に手軽に扱えるので、各ノート間はモーフィングによりできるだけ滑らかに繋げています。苦手な子音はあるみたいです。
 ただ、聞かせるにはどうも周波数の微妙な震えに対してフォルマントがそれほど変化しないという要素が必要らしく、基本周波数が真っ直ぐなので機械っぽいです。要するにもう少し頑張れたろうと言う話。
 何がしたかったかといえば、既存資源を簡単に利用できる形が欲しかった。VSQ突っ込めば歌声のWavが出てくるのが理想。

-UTAUの原音設定ファイルから各波形の解析、STF(StraightFile)形式に。
-テキストVSQの読み込み。
-ノート情報と原音設定から音符の位置と長さを決定。
 --Location=NoteTick-Prepronounce
 --Length=NoteLength+Prepronounce+NextNote'sOverlap
-ノートの長さに合わせて時間伸縮。計算結果を元に切り張りしていく。
-オーバーラップ時にはSpectrumと非周期成分を線形に合成。
-オーバーラップ前(約50ms)から次のノートへのピッチベンド
 --超!適当!!
-PitchBendとPitchBendSensitivityとVibratoの反映
 --Vibratoの式は適当だがVSQにVibratoが入ってれば反映される。
-Dynamicsの反映。ただなんか、変。DYN下げでBREが同時に上がる感じ。
-地味にAccentとDecayに対応してる。ボカロほど効果的ではないが。

結局個別ノートの波形データを作っては繋げてるだけです。

 STRAIGHTに最適化するなら、母音+子音の個別波形を合成する方が多分より滑らかに繋がると思うんだけど、僕は研究的な意味合いより楽器が欲しかったのでUTAU原音設定とVSQでさっくり合成するほうを選びました。
 この方法での利点は、UTAUの音声セットなど既存のデータをSTRAIGHT技術が持つ高品質な合成エンジンを使用して合成できることで、吐き出されたWAVEは若干音が細くなるもののほぼ元のファイルと同じ音質です。その代わり時間とHDD食います。テトが2GBにふとr…じゃない増えました。
 もう少し合成の質的な部分は詰められたかなーとか思いつつ、お預けを食らった犬だったのでちゃっちゃき妥協しました。ラ行ナ行は敵です。

 しかしVocaloidの設定もUTAUの設定もよくできてるなぁと痛感しました。素晴らしいソフトがあったから試せることであって、非常に感謝しております。
posted by HAL at 22:57| Comment(4) | 音声合成 | このブログの読者になる | 更新情報をチェックする

【鏡音リン】Harvest【オリジナル】



そんなわけで動画もアップしました、よろしくですよ!
posted by HAL at 03:20| Comment(4) | 作曲 | このブログの読者になる | 更新情報をチェックする

Harvest

鏡音リンVer.

カラオケVer.

NoChorusVer.

mp3はDLボタンかこちらから→■鏡音リンVer.■カラオケVer.■NoChorusVer.

実に9ヶ月以上に渡るスランプの果てにやっと書けた…
その分かなり良い感じにまとまったんじゃないかなぁとか。作った感想とか
posted by HAL at 02:58| Comment(62) | 完成した曲 | このブログの読者になる | 更新情報をチェックする

2009年05月05日

baku版ゲット

俺とbakuタンで胡散臭い同盟でございます\(^o^)/
許可もらったから晒し上げてさしあげるー!



ふふふ、bakuタン可愛いなぁ('-'*)
とりあえず高音が出て羨ましい←
posted by HAL at 21:51| Comment(4) | 音楽全般 | このブログの読者になる | 更新情報をチェックする

2009年04月07日

花吹雪

吹かれて夏の毛虫を思う、です。

初夏の桜並木の毛虫の多さと言ったら無いですよ!←
やつらのたちの悪さは落ちてくるんだよ!!!主張する俺のがたち悪いですね、分かります^^^^
posted by HAL at 00:55| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2009年04月01日

体力なさ杉フイタ

歌ってみた。



音程?気にしたら負けだと俺は思ってるよ?

ところで引越しの余波でライブのDVDが出てきたんだけどどうしよう?←
久々に見たら恥ずかしいことこの上ないよねorz


しっかし3時間くらい真面目に録音したんだけどどれがいいデータなのか分からなくなってきたぞ、まぁいいか。とりあえず疲れて眠いorz


−追記
ちなみに起きたら微妙に腹筋が筋肉痛ですhhhh
全部混ぜてみたよ、俺えらい楽しそうだな!
ていうか頭HiAはでねーよ。後で音程補正ちゃんとかけようorz

音程の前に、ハナカメ
posted by HAL at 03:03| Comment(2) | 音楽全般 | このブログの読者になる | 更新情報をチェックする

2009年03月30日

おとなはくしょん!

『大人白書』 作詞作曲:DAIZ リミックス:HAL


ふと思い立ってDAIZの大人白書をリミックスしてみた。
俺この曲好きなんだよね。

ボカロだとちょっと悲しかったから明日録音、暇だし。
ギターが上手くなってる気がしないw;;;

てか勝手に公開しちゃまずい?(ぉぃ)

http://www.geocities.jp/ziadara18/
元の曲はこっちで聴けるよ!
posted by HAL at 20:07| Comment(2) | 打ち込み | このブログの読者になる | 更新情報をチェックする

2009年03月13日

今更

対位法の本を買った、多分正確にはやっと。

あれだ、一種のパズルですねこれは。
パズルの苦手な僕をなめないでくれ!←

実例の部分が綺麗すぎて泣けるんですが、なぜに僕の解答は汚いですか。
ちゃんと勉強せにゃあかんね、いやしかし意味が分からない。
禁則事項多すぎ\(^o^)/どこの朝比奈さんだよ!

旋律作法が今一わかってないんですが、日本語でおk?
譜例見て弾いたり、作ったりして弾いたりするといいのかな。
全く独学は指標が無くて厄介。
posted by HAL at 23:36| Comment(2) | 作曲 | このブログの読者になる | 更新情報をチェックする
×

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