B級科学者もどきの憂鬱

とある理系になりきれない奴のつれづれなる活動記

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

前の更新が遅れた理由など

TIPSエンジンの、これからの実装項目の優先順位を、
今後のことを考えながら決めました。
次のリリースまでにいくつ実装できるかなー。

前のアップデートまでで、
周波数領域の処理を行う枠組みが出来たので、
やっと高品質合成の検討に入れます。

これでようやく取り掛かれる実験などもあります。
機能としては大して変わっていないんですが、
内部処理的には一つ壁を超えた感じ。

他にも色々と、周波数領域でないと
実装が難しいフラグ類があったので、
そちらの方も作成していきます。

また、gフラグの実装に時間がかかったのは、
この枠組みを作りたかったからです。
あと、体調不良のせいもあります。
といってもたった三日間の頭痛と吐き気ですけど。

それと昨日、小さいことなのですが、
ReadMeに一か所ミスがあったので修正しました。
英語版も一緒に修正してあります。

本体も微妙に変わってますが、
(LPFの動作速度を若干改善など)
機能は全く一緒ですのでバージョンは変えていません。

差し替えなくても全く問題ありませんので、
ダウンロードしたい人だけどうぞ。

今回の目玉はgです

TIPSエンジンのバージョンアップです。
予定よりだいぶ遅れてすみません。
やっと何とか仕上がりました。
ダウンロードは左のリンクからどうぞ。

前回からの変更点は以下の通りです。

1.検出可能な基本周波数の上限を880Hzに変更

裏声が生成できないという声がありましたので、
上限を630Hzから880Hzに上げました。
人の声ならまず大丈夫でしょう。
低音対応はかなり手間がかかるので、次回以降。


2.DLLを動的リンクしないようにした

DLLをリンクさせないようにしたので、
もしかしたら、今までTIPSが動かなかった環境でも
動くようになるかもしれません。
もちろん、絶対動くとは言い切れません。

これの弊害でファイルサイズがかなり増えましたが、
動作速度は前とほぼ変わりません。


3.g,Hフラグを実装

念願(?)のフラグ実装です。
Hフラグを掛けても合成速度はほとんど変わりませんが、
gフラグは打って変わって結構重いです。
それでもresamplerより速いですけど。

今度、FFTルーチンをこの処理専用に設計しなおして、
高速化を図るつもりではありますが、
しばらくはこれで勘弁して下さい。


4.英語版readmeを同梱

yuubokuさんという方に校正をしていただきました。
心より感謝申し上げます。
ついでに日本語版の方にもかなり手を入れましたが、
内容自体に大きな変更はありません。


あと、内部的に色々と細かい変化はあるのですが、
ユーザーの方は特に気にしなくて大丈夫です。

今回もパラメータ推定のアルゴリズムに
ほとんど変更はありませんので、
pmkファイルが自動生成されることはありません。

プライベートの山場がもう少しで来るので、
次のリリースがいつになるか、
現段階では予想が付きません。
気長にお待ちください。

ちょっとデキるデブになります

とりあえず、プライベートの山場は越えました。
しばらくしたらもう一つ山が来るんですが、
差し当たって時間が取れない訳じゃないので、
プログラムの作成などはちびちび再開します。

TIPSエンジンがいくつかの環境で動かないという
ご報告が何件か寄せられています。

で、その原因に関してある方が、
DLLを動的リンクしているからでは、と言っていたので、
そうしないよう変更してみました。

プログラムサイズが、約六倍にまで膨らみました。
ライブラリってこんなに重いんですね。
でも、実行速度はほとんど変わりませんでした。
当たり前っちゃあ当たり前ですね。

次のバージョンは、ひとまずこれで行きます。

ただ、特定の環境で特定の音源のみ
動かないというご報告もあったので、
これは多分違う原因なんでしょう。

それと関連して、コンパイラオプションを調べていたら、
浮動小数点モデルという項目を見つけました。
なんでも、多少有効桁数が落ちたりしてもかまわなければ、
高速化出来たりするらしい。

で、早速やってみたのですが……超微妙。
一応、数パーセントは速くなっているっぽいんですが、
ほとんど変わりませんでした。

あと、double型よりfloat型の方が
速いと聞いたので、実験してみました。
結果、floatの方が1.5倍ほど遅かったです。
これはCPUにもよるとは思うのですけどね。
(私のCPUはAthlon64 X2)

色々変えたい個所があるのに、
そのためにはまずこれを変えないと、
その前にこっちを変えないと、という感じで、
改造個所が芋づる式に増えていきます。
最初から色々考えてプログラム作れってことですねわかります。

最近、UTAUのresamplerの引数解釈部の動作が
かなり詳細にわかったので、
それを見ながら、今からgフラグなども実装していきます。

とりあえず目指すこと

UTAU用歌声合成エンジン、TIPSのカテゴリタグを作りました。
単に「TIPS」だけだと単なる英単語の方の意味と誤解しそうなので、
一応「エンジン」も付けておきました。
まだこの名前が定まっていない頃の記事のカテゴリはそのままですw

TIPSの高音質モードはいずれ作る予定ですが、
実験と実装の手間がかなりかかるので、
多分次のリリースでは無理です。
その前に、まずはそれ以外の部分を改良しようかと思います。

今考えている事を書いてみます。

まず、パラメータ推定を別exeにしようと思います。
今、これのせいでかなりコードが面倒くさいことになっているので、
いっそのこと別にしてしまえばいいんじゃないかという。
それぞれに特化した設計に出来るので、若干の高速化も期待できます。

パラメータを格納したファイルが存在しない場合、TIPS.exeが
このプログラムを呼び出して作らせるという形式になります。

ただ、合成とは直接関係ないexeが
増えることを嫌う人もいるでしょうから、
それは今後の意見次第かなぁと思います。

もし作ることになった場合、
resampler用周波数表の作成も出来たほうがいいでしょうね。
もちろん今のピッチの推定精度ではダメダメなんですけど、
高音質モードの実装の時に改良はすると思いますし。

それから高速化のために、内部の演算を
出来る限り固定小数点演算に置き換えます。
実際にはC言語に固定小数点型は存在しないので、int型を代用します。
これだけでかなり高速になるはずです。

桁落ち・桁あふれが起こってしまわないかどうか、
かなり念入りに検討しないといけませんが。

それと、メモリ使用量の削減です。
必要最小限の音声データしか読み込まないようにします。
今の処理では、まず最初に全部読み込んで、
合成の際に切り捨てています。

それと、まだほとんど実装していないフラグ類も、
需要の高そうなものからいくつかやっていきます。
また、パラメータ格納ファイルの形式も若干変わると思います。
動作報告なども少しずつ上がってきたので、readmeもかなり書き換えます。

とまぁ何やかやと書きましたが、
一回のバージョンアップでこれだけ全部やるのは
ちょっときついので、数回に分けたいと思います。
その間に、また別の実装も増えるんじゃないかな。

次のリリースは、1月末ぐらいになりそうです。

利点を伸ばすか、欠点を潰すか……

忙しいですが、ブログだけは更新します。
自分で決めたことなので。
というか、もはや意地になってるかも。

UTAU用歌声合成エンジンTIPSの、
合成アルゴリズム部分の改良について色々考えています。
今までずっとやってきたのはパラメータ推定に関してで、
合成部分はあまり触ってこなかったんですよ。

多分、これ以上の音質の改善には、
どうやっても計算量の増加が避けられません。
合成が速いというのが、このエンジンの
唯一の利点と言っても過言ではないというのに……。

本当は、次のバージョンでは、
さらに高速化しようと思っていたんですがね。
今の段階でもかなり速いとは思ってますが、
個人的にはまだ満足のいく速度ではないんです。

ちなみに、速度の目標としては、VST化した時、
ほとんどリアルタイムで合成できるぐらいです。

現在の処理では、プログラム自体の読み込みを除いた
処理時間の合計が、一秒の音声につき数十msecかかってるので、
(私のPCでかかる時間なので、環境によってばらつきがあります)
これを何とか10msecぐらいにまでしたいなと思っていました。

まぁ、高音質verと普通音質verをオプションで
切り替えられるようにするというのが、
一番無難な解決策ですかね。

高音質verで許される計算時間ってどのくらいだろう。
生成音声と同じくらいの長さはかけていいだろうか。
それぐらいなら何とかなるかもしれません。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。