作りたいもののポエム2
概要
昨日の続きやるよ。
作りたいもの
- UTAU 音源より表現力の高い音源形式
- ↑のファイル読み書き部分
とりあえず一旦ここまで書けたらいいこととする。(大きく作って死ぬことが多い気がする)
その他要件
- 既存リソースを活かすために UTAU 音源からインポートをできるようにする
- 波形情報と演奏情報とキャラクタ情報は厳密に分けて設計すること
- 欲を言えば複数音源を自在に切り替え、あるいは混ぜられるようにすること(キャラクタの枠組みを越えるべき)
ざっくりとした設計
segment (切りだされた波形)
segment は機械的な意味しか有しない。構成としては波形ファイルへの参照と波形の切り出し位置、伸長の位置を指定する以外の機能を持たない。
{ "segments": [ { "id": "segment0001" "path": "akasatana.wav", "begin": 500, "length": 500, "temporal_position" : 100, "front_fixed_range" : 100, "rear_fixed_range" : 100 }, { "id": "segment0002" "path": "akasatana.wav", "begin": 500, "length": 500, "temporal_position" : 100, "front_fixed_range" : 100, "rear_fixed_range" : 100 } ] }
- id: segment ID
- begin: 開始位置
- length: 波形長
- temporal_position: ビートの位置(先行発音相当)
- front_fixed_range: 前半の固定長(固定長相当)
- rear_fixed_range: 後半の固定長
切り出しと伸長はこれだけあればいい。これ以上の情報は別の情報に切り分けるべきだ。 UTAU の oto.ini は音楽的コンテキストを含まないのでこの設定は UTAU で言えば oto.ini に等しい。
切り出し部分についてはこれで良い。このレイヤーには発音や音程など発音のコンテキストを混ぜてはいけない。
phoneme (発音と音符の一断片)
phoneme は音楽的な一断片を表す。切りだされた波形とそれに対するメタ情報からなる。
{ "phonemes": [ { "id": "phoneme0001" "segment_id": "segment0001", "context" : { "pronounce": { "previous" : "-", "this" : "a", "next" : "k a" }, "note" : { "previous" : 60, "this" : 60, "next" : 60 }, "tempo" : 120, "strength" : 0 } } }, { "id": "phoneme0002" "segment_id": "segment0002", "context" : { "pronounce": { "previous" : "a", "this" : "k a", "next" : "s a" }, "note" : { "previous" : 60, "this" : 60, "next" : 60 }, "tempo" : 120, "strength" : 0 } } } ] }
ここまでは妥当な感じがする。