2010年10月26日

UTAU音源の表現力


http://twaud.io/wPB

4人からデータをいただき機械的に切り出したデータで合成いたしました。
結構効果がばらつく印象です。
各人1回目が今までどおりの録音、2回目が歌のBGMで録音。
それらが4人分繰り返して計8個データが入ってます。

http://twaud.io/vnZ
ちなみに僕の場合こんな感じで一番目が歌で録音したデータと一致します。


効果のある人と、無い人がいるみたいです。
あと、結構ざっくりつけないと効果が薄いことが判明。

個人的な感触では男声囁きはあまり個人差が無いみたいね。
個性的にしたければちゃんと声を張って録るべきというのが、
俺個人の簡単な結論。

次はもうちょっと突っ込んだデータを確保中ですです。
posted by HAL at 00:28| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2010年02月15日

VCVしてみた



難しい、というよりなぜかそれっぽく合成出来た、不思議。
何も考えないでコード組んだのに…

まぁ曲に使うようになったらちゃんと考えるです。
posted by HAL at 03:15| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年10月16日

ResamplerとSTRAIGHT

http://nwp8861.blog92.fc2.com/blog-entry-118.html

耳ロボP様がこちらの記事で触れていらっしゃいますが、
ResamplerやWavToolの処理をSTRAIGHTに投げられないかという話です。
結論としてはwavtoolとresamplerを分離しないなら可能です。つまり可能です。
ただ個人的にはやや実装するのは辛いかなと思っています。
実時間解析APIが使用可能になれば容易に実装できるようになるので、UTAUインターフェースに対応させるのならばそれを待つのが楽です。

STRAIGHTの合成を使用する際にネックになる部分が
・メモリ使用量が膨大
・解析に時間が非常にかかる
・合成に時間がかかる
の三点で、二点目がUTAUの動作を真似る際に厳しい点です。

 UTAUでは音程等を変えたWaveファイルを生成→クロスフェードで合成の順で、一度Waveファイルを生成する形になっています。これがSTRAIGHTを導入する際に非常にネックでして、Waveファイルを生成してしまうと再び解析するのにかなりの時間が必要になります。frqファイルを生成する手間と同じ以上の時間がSTRAIGHTの解析にもかかります。毎回それを行うことになるのでちょっと非現実的です。
 なので、wavtoolとresamplerの動作を肩代わりする場合どちらか片方だけ、ということは不可能に近いです。もちろん時間かけるのなら問題はないのですが、実際問題それでは作業にならないと思います。
 ということでもしSTRAIGHTを使ってUTAUインターフェースから合成可能な形を取るとするなら、あらかじめ音源セットに含まれるWaveファイルをSTRAIGHTで解析済みである、かつ、wavtoolとresamplerの動作を見た目だけ肩代わりして実際はその二つの機能は分割しない、ような形では実装可能かと思います。
 ただbatからの実行なのでオーバーラップにモーフィングを使用したいとなると、その部分のデータをキャッシュする必要があります。STRAIGHT音声データのビットレートは80Mbpsです、うわぁ。

 基本的には生成されたbatファイルが言うとおりにあーだこーだやればいいので出来なくはないと思うのですが、いかんせん僕自身がUTAUに慣れていないのでこればっかりは…やっぱり一時的にキャッシュにするのが一番辛いんじゃないかなぁ。読み込んで一気に合成する形がSTRAIGHTでは自然ですし。
 実のところv.Connectの開発を始めた時にUTAUコアの代わりとして実装するか少し悩みましたが、batファイル読んでもあんまりよく分からなかったのでVOCALOID的な動作になっています。僕自身がVOCALOIDユーザーなのが非常に大きいかも。
posted by HAL at 14:25| Comment(2) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年10月08日

感情合成

STRAIGHTによる感情合成に適した音素片歌唱合成方法を考えてみてる。
最近移動中の時間がこればっかりというダメ具合、楽しいからいいか。

・基本的にSTRAIGHTの感情合成は複数音声のモーフィングであること。
・感情合成に重要なのは主に母音である『ように思える』こと。
・演劇等の滑舌練習に子音を省いた母音のみの練習法が有効であること。

この三点を考えると、

・指定されたNote情報から母音のSTRAIGHTmorphingを行う。
・子音は合成済み母音パラメタの子音位置に合成する。
・子音位置は該当Noteの直前とする。
・子音合成時には子音の前後で子音方向へ向かうモーフィングを行う。

とすれば既存のUTAUフォーマットの拡張で済む。
といかめしく書いたものの音素片合成の考えとしては非常にシンプル。

課題点は子音の切り張りをどう行えばよい結果がでるか。
つまるところ子音とは何かを考えなければいけない。
ただ、v.Connectが子音に特別な処理を行っていないことから、
手作業の切り出し作業を失敗しなければそこここの結果になりそう。

ちなみにこの方法による利点は以下。

・感情モーフィングの手法に適している。
・細かいリズムの際に生じる『綺麗すぎる』フォルマント変化の軽減。
・1セットの容量の削減にも貢献する。

試す価値がありそうなんですが、今一暇が足りないので誰か試しませんか?←


ちなみにv.Connect自体は既存資源の活用をメインに行くつもりです。
こっちの利点はUTAU資源との互換性と、VSQ編集技術との互換性だし。
BRIとCLEの実装もできそう。OPEは『ん』と合成すればいんじゃね?
ただたまにノイズ乗るのが…騒々しい音なら紛れるんだけど…

この手のツールは適度な自動化が必要だけどどこまでやるべきなんでしょうね。
posted by HAL at 12:19| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年10月05日

STRAIGHT周りの論文を読んできた。

情報処理学会の音楽と音声の会誌で和歌山大の河原教授が書いた論文と、ここ2〜3年の音楽分野(ぼかりすとかのやつ)をざっくり斜め読みしてきた。既に書いていらっしゃる人もいるし、ぐぐれば出てくるんですが一応個人的なメモとして。
何で今まで読んでなかったのかといわれると、不勉強だから…
じゃなくてよもや自分でやるとは思わなかったからです。
テト声にたぶらかされました。

数時間もかけずに斜め読みしたのでかいつまんで面白そうなところを。
勘違いしてたらごめんなさい。

1.STRAIGHTの根幹について

 これは全く載っていない(あれ〜)。日本音響学会誌にある模様、もしくはIEEE EUROSPEECH'99に載っているみたいです。STRAIGHTについてはこちらでのんびりスペクトルとにらめっこすることになりました、あぅ。とりあえずそれは視覚化するとして、詳細な論文は近場の図書館で置いてあるのが東大だけらしいので、いざとなれば…外部者でも入れたっけ?
 とりあえずSTRAIGHTでもやっぱり低音は苦手みたいです。TANDEM-STRAIGHTと進化したバージョンではさほどでもないと書いてあったので、TANDEMも試してみようかと思います。

2.VOCALOIDの合成手法

 一時期話題になっていましたが、UTAUの先行発音がYAMAHAの特許に触れる?→大丈夫、な話のところで出てきた、母音より前に子音置いてパラメータがどうのこうのの部分の解説がYAMAHAの名義であった。
 どうも母音開始時点をリズムの頭にするだけでなく、子音部分からのピッチ変動等もパラメータで指定しているようです。C→V,V→Cの全ての音節を網羅し、それに対してピッチなどをパラメータで操作しているんだとか。子音等立ち上がりの部分の音程なんかも全てパラメータで保管しているらしい。
 基本的には網羅してしまえば問題無いだろう、的な書き方がされてた。

3.話し声→歌声変換ツール

 なんかそんな研究あったね、と言いつつこれが今一番欲しかった情報かもしれない。

 a.)歌声フォルマント
   4kHz周辺にオペラ歌手から発見された云々かんぬん。
   このあたりにF4があって、そこが話し声と比べて12dbほど強調
  されているのが歌声らしい。ポップスでもそうらしい。
   論文だとこの周辺のスペクトルを増幅して、いい感じの響きを
  得たとかなってた。式は覚えてないけど、複雑なものじゃない。

 b.)F0(音程)の動的変化
  i.)シュート
   アタック部分は目的の音程よりいったんちょっと上に飛び出る。
  ii.)ビブラート
   その後3〜4Hz(?)程度の揺れが乗る。
   ビブラートをする時にはフォルマントがつられて変化する。
   音量が同期して独特な揺れを持つ、が正解みたい。(10/07追記)
  iii.)微細振動
   声の揺れ。
  iv.)プリパレーション
   リリース部分は一度落ち込んでからポルタメントする。

  このあたりは確かに自動で生成した方が楽そうな気がする。
  僕より詳しい解説をvocasimの和泉様が書いていらっしゃるので割愛。
  http://akira-izumi.cocolog-nifty.com/patent/2008/07/vocasim004.html

  ちなみにF0のラインについては画像を用意しました。
  上がリンちゃん、下が友人にみなそこの冒頭を歌ってもらった波形を
  何かのフリーソフトで解析しました。vocasimシミュ挑戦の名残です。
  1239197925.jpg
 c.)母音等による発音の変化

  どのサンプルデータをとっても母音間の変化は100msくらいらしい。
  さらっと流されてたし、この数字をどうみるかだなぁ…

 d.)総括
  シュートは大事。シュートとビブラートを合わせたらいい感じ。
  歌声フォルマントでもっといい感じっていう論文だった。

4.その他雑感

 感情合成については論文があったのですが、結局、喜・怒・哀で歌ってもらったデータをパラメータで合成するらしい。レイヤー増やして合成したのもあるらしいけど、この方向だと辛いよねってことみたい。
 んじゃあ何が感情なんだってところはさぱーり分からないから、みんなでサンプル持ち寄って解析したいね、って論文があった気がします。
 とにもかくにも人がいないんだろうというのが何よりの感想。
 日本音響学会誌を読んでいないのですが、情報処理学会ではVOCALOID熱にあてられた若い研究者達がこぞって実験しているようなイメージ。このあいだMMDであったハープの演奏動画と同じように、ショパンの楽譜から手の動きを再現しようなんていうのもあった。
 正直な話お金にならないってところなのかな。河原教授のスキャットの生成の論文に、21世紀は豊かさを求めて夢のある研究を、的なことが書いてあったんですが、こういう方面は面白いと思うんだけどなぁ。
 とりあえず、やったもん勝ち、的な感じに見えた。みんな楽しそうすぐる。

 あ、後ミックスは残響音と直接音を一定の比率になるようにやっているっぽい、って論文があったのですが読み飛ばしちゃった。興味のある方はぜひ読んでみるといいかも。
 音声合成に限らず、結構面白いものも多いと思います。
posted by HAL at 21:43| Comment(2) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年10月03日

STRAIGHT覚書

自分でプログラム組みたい人向け。
サンプルソース読めばモーフィングくらいは誰でも書けるので、
その他大したことの無い発見をつらつら、要するに検証した部分。


1.フォルマント変化

 straightSynthComputeでフォルマント変化率を指定できるが、それだと全体のフォルマントが変わってしまう。フレームごとにフォルマントの変化をさせたい時には、非周期性バッファとスペクトルバッファの長さを伸長させるとよい。


double dChangeRate;
long nSpLength,nApLength; //GetFrequencyLengthで得た値を格納
double *pSpBuffer=new double[nSpLength]; //SpectrumBuffer
double *pApBuffer=new double[nApLength];
.
.
double* pTempApBuffer=new double[nApLength];
double* pTempSpBuffer=new double[nSpLength];
memcpy(pTempApBuffer,pApBuffer,sizeof(double)*nApLength);
memcpy(pTempSpBuffer,pSpBuffer,sizeof(double)*nSpLength);

for(long n=0;n<nApLength;n++){
double dPos=(double)n*dChangeRate;
if(dPos<nApLength-1){
pApBuffer[n]=pTempApBuffer[(long)dPos]*((long)dPos+1.0-dPos)
+ pTempApBuffer[(long)dPos+1]*(dPos-(long)dPos);
}else if(dPos==nApLength-1){
pApBuffer[n]=pTempApBuffer[nApLength-1];
}else{
pApBuffer[n]=0.0;
}
}

for(long n=0;n<nSpLength;n++){
double dPos=(double)n*dChangeRate;
if(dPos<nSpLength-1){
pSpBuffer[n]=pow(pTempSpBuffer[(long)dPos],((long)dPos+1.0-dPos))
* pow(pTempSpBuffer[(long)dPos+1],(dPos-(long)dPos));
}else if(dPos==nSpLength-1){
pSpBuffer[n]=pTempSpBuffer[nSpLength-1];
}else{
pSpBuffer[n]=0.0;
}
}
delete[] pTempApBuffer;
delete[] pTempSpBuffer;


 配列位置の指定にdouble型使うなよ俺、ってちょっと思った。

2.ブレスノイズの増幅

 これは比較的簡単で、増幅したいフレームの非周期性指標をスペクトルに対して大きくしてやればいい。

3.ノーマライズ処理

 straightWriteSynthAudioFileでは単純に内部保持されているdouble型配列を16bit整数型の配列に直してWaveヘッダとかもろもろをつけているだけの模様。振幅の絶対値は1.0未満でなくてはならず、超えるとオーバーフローして負の最大値とかその近辺に行ってしまうため、激しいノイズが発生する。
 straightSynthGetOutputWave関数を使用して得られる配列を、配列の最大値で除算してしまってもちゃんとノーマライズされる。Waveヘッダとか書くの面倒ならこれでもいいみたい。

4.音定差による音量の変化

 STRAIGHT技術では、空気の運動エネルギーっぽい何かを使っている節がある。高い音はエネルギーが高く、低い音は低く、また大きな音は高く小さな音は低い。エネルギーを考えると、音程を低くすれば音量が大きくなり、逆もまたしかり。高音部で音の芯が抜けてしまうのは、元々のデータと同じエネルギーで高音域を出そうとしても、低い音程の低いエネルギーではしっかり響かない、なんてことがありそう。
 というわけでちょりっと調べたところ、周波数が4倍になると音量が約半分、周波数が1/4倍になると音量が約2倍になる。
 多分、上の仮説であってると思う。のでより低い音程を扱う時はクリップしないようにノーマライズするなり何らかの処理が必要です。
posted by HAL at 19:59| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年09月27日

Cadenciiにv.Connectが搭載されます。

http://www9.atwiki.jp/boare/pages/18.html


デモ動画

現在開発中のVer.3系統ではSTRAIGHT合成ツールが使用可能になります。
それに伴い注意事項となる仕様を挙げておきます。

まず、連続音は現状『非対応』です。対応するかは検討中です。

次に、

・音源解析に時間がかかる。
・音源解析に容量がかかる。
・音声合成に時間がかかる。
・合成時にメモリを馬鹿食いする。
 →STRAIGHTが扱うデータは80Mpbs=10MB/秒程度。

この四点についてはSTRAIGHT Library側での仕様のため、
チューンアップは難しいと考えています。
RealTimeSTRAIGHTを導入出来ればメモリ使用量は何とかなるかも。


・入力音声はステレオに非対応

こちらもSTRAIGHT Library側からかかる制約です。
WAVEファイルの仕様から解析結果が1/2倍速音声と同じ結果になります。

また、現在対応しているパラメータは以下の通りです。
厳密にはVOCALOID・UTAUに存在する同名のパラメータとは動きが違うのでご了承下さい。

○VOCALOID由来

・コントロールトラック:DYN
・コントロールトラック:GEN
・コントロールトラック:PIT
・コントロールトラック:PBS
・音符のプロパティ:Accent
・音符のプロパティ:Decay
・音符のプロパティ:歌詞(発音データは不可)
・音符のプロパティ:Vibrato(Rate,Depthとも反映されます)


○UTAU由来

・先行発音
・オーバーラップ


また、その他には

・クリップするようなデータの場合はWAVE化前にノーマライズ処理
・その際、最大振幅が正の値だとクリックノイズが乗る
・もしかしたらあまりに短い音符があると合成に失敗する

などがあると思います。

と言うわけでv.Connectに関する仕様はこんなものです。
何か気づき次第付け加えていきます。
posted by HAL at 18:27| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2009年09月20日

STRAIGHTシンセ

ソースとか:stSynth_v0.1.2a.zip

一応一段楽したので現在のソースとバイナリをアップしておきます。
STRAIGHT Libraryの詳細なライセンスが未定であることをうけて、
再配布は特別な場合を除き禁止にしておりますので何卒お願いします。
個人使用・研究目的使用のみフリーです。また私とSTRAIGHT Libraryの配布元とは一切関係がありませんので、そちらでこのツールについて質問なさるのはご遠慮ください。詳しくはReadMe.txtをお読みください。
今回のアップロードの目的もよりよい歌声合成に関して
何かご意見を頂戴できたらという方向で行っています。
まだα版なので使用に関しましては完全に自己責任でお願いします。
また、VSQメタテキストをテキストファイルとして出力できない環境では使用できません。

http://www.crestmuse.jp/cmstraight/
また、開発に使用したSTRAIGHT Libraryの詳細についてはこちらのリンク先を参照してください。

さて、お約束を書いたところで変更点、というかコードは書き直した。

VSQSequencerでVSQメタテキストファイル周りの処理をすることにした。
情報を得たい時には、何フレーム目なのかをVSQSequencerに投げると、
ノート情報やコントロールトラックの情報を返してくれます。

straightNoteManagerクラスでSTFファイルの管理をすることにした。
これに歌詞とフレーム数・straightFrameクラスへのポインタを投げると
合成に必要な情報がポインタの実体に書き込まれます。
引数に使うstraightFrameクラスは予め初期化しておいてください。

straightSynthesizerクラスは上記二つを使って音を繋げる。

取り急ぎ仕様はここまで。今回はソースコードに注釈が無いです;;
とりあえず、今のところはこんな感じになっています。

また、コントロールプロパティは、
VEL,DYN,GEN,PIT,PBS,Vibratoにのみ対応しています。
AccentとDecayをどうするか目下悩み中なのです。

基本的にVOCALOIDとUTAUとSTRAIGHTを繋げるだけなので、
思いつきで作りたいものを作っていくつもりです。
posted by HAL at 12:26| Comment(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

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

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