resamplerをトラップしてみるとか

適当。
mingw-gcc で、ascii(sjis) コンパイル。
コンパイル後の exe は resampler.exe と同じディレクトリに。
で、ツール2を変更。
dllを使う、のチェックはなし。


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int delegate(LPCSTR target){
char path[MAX_PATH], *p;
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
GetModuleFileName(NULL, path, MAX_PATH);
if(p = strrchr(path, '\\')) *(p + 1) = '\0';
sprintf(p = malloc(strlen(path) + strlen(target) + 1), "%s%s", path, target);
if(!CreateProcess(p, GetCommandLine(), NULL, NULL, TRUE,
NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) return 1;
return WaitForSingleObject(pi.hProcess, INFINITE);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE _hInstance,
LPSTR lpCmdLine, int nCmdShow){
char *inwav = __argv[1], *outwav = __argv[2];

//処理前に何かする。

if(delegate("resampler.exe")) return 1;

//処理後に何かする。

return 0;
}


なんかエフェクトでもかけようかと思ったけれども、結局案もなく。
独自のフラグとか作るのも面白そうだけど、後から被ったら微妙だし。
うーん。

また遅刻だよ。


【ニコニコ動画】オリジナル 桃音モモ@UTAU 「わがまま」


寝ずに24時間ぶっ通しで作ってた。
休み中に終わってよかった…。
相変わらず借り物PCなので、明日使えるかは微妙なので。
もう少しだけ自前PCなし生活が続きそうです。

で、いつものようにごちゃごちゃと。
続きを読む

中に誰も。

中の人のいない音源

楽しいですよねぇ。

関連して幾つか、

デフォ子さん、ゆっくりには中の人が…
http://av.watch.impress.co.jp/docs/20080908/dal341.htm

複数人からのサンプリングデータを使用している、と言うお話。
だけど音声に関わるデータは実質100KB程度、だそうな。
100KBとかまじパネェ。
[追]声そのものではない、と。なるほろ。
utapiano一人分強で、あれだけしゃべる、と。
やっぱ本職はすげーな、と思う次第。


PLG100-SG
http://www.yamaha.co.jp/product/syndtm/read/sg/

仕組みが気になる人は、第1回[4]あたりが楽しいと思われます。


いろいろ書きたいけれど、今日は時間がないので、あとは↓とか。
前からちょっとずつ集めてるマイリスト、偏り多し。
http://www.nicovideo.jp/mylist/5933468

UTAU連続音お試し

ひとまず雨の日の歌の冒頭で試してみる。



まず元々。
初期音源だしエフェクトかかってるしでいまいち比較になりそうにないですが、とりあえずここがスタート地点。


で、それを新モモLite+UTAU-Mode2にしただけのもの。
ブレスとか細かいピッチとか入ってないですが、こんな感じ。


で、連続音。
飴屋Pのところに書いてあったのほぼそのままやってみました。
(i つ、だけどうにもうまくいかなかったので、普通に「つ」)
あとリップノイズ入ってますが、取ってません。

…。
……。
………。
なんか知らんがかわいいぞ。

いや、桃音さんは元からかわいいですけどもね。
幼い?やや舌足らず気味に聞こえるのは、原音設定殆どいじってないせいでしょうか。
タイミングがずれてる…だけではないと思う。
なんだろう。
音の立ち上がりが全体的に遅いのかな。

最後に申し訳程度にエフェクトかけたもの。


とりあえず、細かいところ、すげーなめらかですね。
今までちょこちょこstpとオーバーラップで合わせてたのは、いらなくなりそう。
操作はそれほど難しくありませんでした。
オーバーラップかませたり、母音結合したり、今までやってたのと感覚的にあまり変わらない感じ。
a,i,u,e,oの付加とかは、それこそプラグインで一気にいけそうだし。
あと件のクロスフェードは、ほんと便利ですね。

心配事があるとすれば、立ち上がりの調整と、フラグガンガン使ったときにどんな感じになるのかな、ってところでしょうか。
たぶんどうにかなるんだろうと、期待しつつ一旦終了。

しかし、このまま雨の日の歌で、全部やってみようかと思ったのだけれど、絵がない。
写真使わせてもらってた人がコモンズ撤退しちゃったので、規約的には、既に使ったものは残してOKだけれど、新しく使うのはNG。
どーしたもんかな。

シャウト音源?

動画でコメントいただいて思い出したのですが。
そういえば、桃音さんには大声・シャウト音源がありましたね。
すっかり忘れて(ry

いや、冗談です。わけあって使ってないだけです。
まあ、今回は試してもおらず、前回の「きらきら。」の時に試して、外してそのままというのが実際なのですが。
件のシャウト音源ですが、UTAU通すと結構声細くなります。
あとは、多分マイクから離れている(予想)せいか、高域に寄ってます。
前処理後処理で、多少直せそうな気もしたんですが、そこだけ声質変わってしまったので、やめました。
使える場面もありそうな気もしますけど、とりあえず目的のものとは違う感じなので。

ついでに言うとブレスもブレスではなくて「は」です。
こっちは単純に好みの問題で。

連続音使いたいが

ver245beta 出るまで待とうかと思ったけど、見直したら今作ってる奴に音連続する部分が殆ど出てこない件。

おとなしく次にまわして終わらせよう。
今なら動画出してもこっそり埋もれそうで好都合だし。
うちの桃音さんはどんどん(桃音さん的な、あるいはUTAU的な意味で)メジャー路線を外れていく気がする。
次はシャウトを頑張ってますよ。無駄に。

[追記]
動画エンコ中にUTAU 0.2.45beta2キタ。
流石に今のを作り直す気力はなし、作り直しても連続音の出番が殆どなさそうなので、次か。

それはそうと今つんでれんこ使ってみてるんですが、なんか癒されますね。
いちいち進捗に「〜♪」が付くとことか。
最後に「ま、また使ってくれると・・・う、うれしいな・・・」とか。
比較的デレデレな気がするのですが、もしやエンコ結果がツンツンだったりしないだろうな…。
さて結果は如何に。続きを読む

きましたね。



まあ、ここで書くまでもないか。

連続した音、の話

「Diphone使おうか」って読んだ。
いや、たぶんそのものなんだと思うのだけれど。
何故か界隈で単語を見ないので、とりあえず書くだけ書いてみようか

と思ったけど、あまりにもネガティブになりすぎたので消しました。
いや、ネガティブって言ってもUTAUに対してではなく。
やっぱ色々と、そっち方面に行かざるを得ないのか、というようなお話で。うーん。
続きを読む

ピネさん


考えるな、感じるんだ。

周波数表の作成メモ

UTAU経由でなくresamplerで周波数表を作成するときは

resampler <wav> <一時ファイル> 100 100 GN 0 100

原音設定推定機能を使うときに「周波数表をつくりますか?」のダイアログで連続で「はい」をクリックするのが面倒だったら、一度一括で先に周波数表作成してしまうといいのかも。

JScriptで 一括作成:

var resampler = "..\\..\\resampler7.exe"; //resamplerのパス

var fsys = WScript.CreateObject("Scripting.FileSystemObject");
var shell = WScript.CreateObject("WScript.Shell");

try{
for(var iter = new Enumerator(fsys.GetFolder(".").Files);
!iter.atEnd(); iter.moveNext()){
var fileName = iter.item();
if(/\.wav$/.test(fileName)){
var ret = shell.Run(resampler + ' "' + fileName +
'" .\\temp.wav 100 100 GN 0 100', 1, true);
if(ret) throw "error";
}
}
WScript.Echo("finish");
}catch(ex){
WScript.Echo(ex);
}

var temp = fsys.GetFile("temp.wav");
if(temp) temp.Delete();

UTAUプラグインメモ2

プラグインあまり関係ないけれど resampler の呼び方
プラグインで preview とかするのに使えるかもしれないのでチェック

飴屋Pの説明は→http://utau2008.blog47.fc2.com/blog-entry-7.html

引数一部変わった部分もあるので自分用にまとめなおし
引数名は適当に省略してます

inp out ppc tpc flg ofs len fix blk vol mod pits...

inp: 入力 wav ファイル、フルパス。
out: 出力 wav ファイル、フルパス。
ppc: pitch percent / 出力音階名。
 ノートナンバーとの対応はローランド系(C4 = 60)。
 他の指定の仕方はわからず。
 たぶん周波数表で推定した元音階との変化分で指定出来るのでしょう。
tpc: time stretch。
 元音長からの変化分、のはず
 len で指定できるのでここは 100 固定でいい感じ
flg: フラグ文字列。
 ブレスは B, No Formant Filter は N に変換。
 後はフラグ指定から空白を除いたものと一緒。
 何故か最後に'L'が付く(終端文字?それとも何かのオプション?)。
 補足: G で周波数表の再作成っぽい?
ofs: 原音開始ブランク。ミリ秒単位。
len: 出力長。ミリ秒単位。
 音符長、先行発声などから計算。
 stp オプションを指定している場合、その分増える。
 utau.exe 50ミリ秒単位で切り揃え(たぶん)。
 後で wavtool で余計な部分をカット。
fix: 原音固定部分長さ。ミリ秒単位。
blk: 原音終端ブランク。ミリ秒単位。
vol: 音量。パーセント単位。
 プラグインから見れば Intensity。
 -6dB付近が基準、P フラグと関連。
mod: モジュレーション。そのまま。

pits: ピッチ数列。以前の詳細は本家説明で。
 で、何時からかは忘れましたが、渡し方が新しく。
 utau.exe 側で以前の渡し方をする設定になっていなければ、

 !<tempo> <Base64エンコードピッチ数列>

 という形式で受け渡し。
 tempo はそのまま tempo。
 エンコードピッチ数列は、ピッチ数列の文字列を
 Base64エンコードしたものでは当然なくて、
 12bitの符号付整数値(cent単位)を2文字としてbase64エンコードしたもの。
 例えば 3 => 000000 000011 => AD
 加えて同じ数値('文字'ではない)が連続するときには#数値#という形で圧縮する。
 例えば 3,3,3,4 => ADADADAE => AD#2#AE
 終端まで値が 0 の時は省略可能。
 但し省略すると4文字区切りに満たないときはAA(=0)を付ける。
 省略が無く、かつ4文字区切りに満たないときには何も付かない。つまり pad 無し。
 76文字制限は無い。引数だし。


UTAUフラグオプション

自分用メモ
?は範囲に自信なし。

B[0-100?] : BRE相当, 省略時50
N[] : No Formant Filter ON
g[正負整数値] : ジェンダファクタ(曰く、もどき), 省略時0
t[正負整数値] : ピッチ基底調整, cent単位, 省略時0
F[0-10] : フォルマントフィルタ特性(基底周波数依存), 省略時3, L優先
L[0-10] : フォルマントフィルタ特性(固定周波数依存,約170Hzの倍数), 省略時無効
H[0-99] : ローパスフィルタ
h[0-99] : 子音成分(固定部ではなく周波数帯?)以外を抑えるフィルタ
Y[0-100?] : 0に近いほど固定範囲外のノイズを抑制(0ほど効果up),省略時100
b[0-100] : フォルマントフィルタ後のブレスノイズ, 省略時0
C[0-100?] : 22kHz(11kHz half)ローパスフィルタ, 省略時0
D[0-100?] : 11kHz(0-22kHz)ノッチフィルタ, 省略時0
E[0-100?] : 何フィルタって言えばいいんだろう…, 11kHz付近中心の偶関数, Cの調整に
c[0-100?] : 22kHz(11kHz half)ローパスフィルタ, フォルマントフィルタ前
P[0-100?] : (おそらく波形での)ピーク揃え, 目標-6dB, 省略時は86

CDEはローパスフィルタとしてはHで代用可能。
ただ微調整が効くので、使いどころはあるような気も。
さてプラグインでどこまで想定しておこうか。

UTAUプラグインメモ

utau0230時の話、自分用まとめメモ

ファイル構成は
  utau/plugins/<plugin-dir>/<plugin-exe>

で、呼び出され方は、
  <plugin-exe> <temporary-ust-path>

temporary-ust-path のファイルを読んで、
処理結果を上書き。詳細は後述。

plugin-exe は, windows exe/pe のみっぽい。
カレントディレクトリは試した限りでは plugin-dir と一致。
但し保証されてないはずなので自前取得が吉。

データ形式は windows-ini like なセクション-エントリ形式
参考: http://en.wikipedia.org/wiki/INI_file
ex:
[セクション名]
エントリキー=エントリ値
...

但し、出力結果についてはセクション名の重複を許す。
#INSERT, #DELETE については複数可であることを確認。
出力結果ではセクションを省いてもいい感じに動作してくれるが、ノートは順序に依存して識別されるので、#INSERT/#DELETEを使う場合には省くと間違いの元。
なのでセクションヘッダ([セクション名])は基本的に必須。
エントリは適宜省いても良い。
また preamble(無名セクション), escape(\nとか)は無い(はず)。

入力形式:

* #SETTING セクション
エントリは Tempo,VoiceDir,CacheDir
常に付いてくると期待していいはず。
Tempo は下2桁までの小数点表記。
VoiceDir,CacheDirはそれぞれ音源,キャッシュディレクトリの絶対パス。

* #PREV セクション
選択範囲前に音符(以下、note)があるときに付加。
中身は note セクションの項目と同じ

* #NEXT セクション
選択範囲後に note があるときに付加。
中身は note セクションの項目と同じ。

* note セクション
セクション名は #<4桁番号> (note 数が5桁を超えることは普通ない、はず)
エントリは
  Length, Lyric, NoteNum, Intencity, Moduration,
PreUtterance, VoiceOverlap, PBType, Envelope, Piches, Flags, StartPoint, Tempo
このうち付いてくると期待していいのは Length, Lyric, NoteNum くらい。
また、Lyric は空文字の可能性もあり。
その他は、未設定状態だと省かれるので適宜デフォルト値で置き換えると良いかも。
各要素の詳細は後で。

出力形式:

入力形式とほぼ一緒。
エントリは省いても良いが、セクションは省いてはならない。
#SETTING セクションのエントリは変えても反映されない。
また本来選択範囲外の #PREV, #NEXT も実は変更できる。
挿入は #INSERT セクションを挿入部分に追加。中身は note と同形式。
削除は #DELETE セクションで指示、#INSERT を除いてその位置に来るはずの note が破棄される。

つづく

しかし書きにくい、さくらのブログ…