フェルマータ

個人用のメモ。ソフトウェアの導入とかが多くなる予定。ライセンスの気になる方はこのブログに載せたコードは修正 BSD に準ずるものと考えてください。

作りたいもののポエム3

概要

shurabap.hatenablog.jp

一昨日からの続きやるよ。

作りたいもの

  1. UTAU 音源より表現力の高い音源形式
  2. ↑のファイル読み書き部分

その他要件

  1. 既存リソースを活かすために UTAU 音源からインポートをできるようにする
  2. 波形情報と演奏情報とキャラクタ情報は厳密に分けて設計すること
  3. 欲を言えば複数音源を自在に切り替え、あるいは混ぜられるようにすること(キャラクタの枠組みを越えるべき)

データの設計

音楽的コンテキストは必要ないという結論に達した。本質的に波形接続型歌声合成器はサンプラーなのだからマッピングさえあれば全て型がつくのである(きっと

segment (切りだされた波形)

segment は波形ファイルへの参照と波形の切り出し位置、伸長の位置を指定する。

{
  "id": "segment0001"
  "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: 後半の固定長

mapping(発音・音程・Velocityと、波形との対応)

ある発音がある音程である Velocity で指定された際にどの波形をどの程度利用するのかというマッピングを表す。

{
  "pronounce" : {
    "before" : "a"
    "this" : "k a"
    "after" : "s a"
  },
  "segments": [
    {
      "segment_id": "segment0001",
      "note": {
        "before": 60,
        "this": 60,
        "after": 60
      },
      "velocity": 64
    },
    {
      "segment_id": "segment0001",
      "note": {
        "before": 60,
        "this": 60,
        "after": 60
      },
      "velocity": 64
    }
  ]
}
  • pronounce: 発音
    • before: 先行音の発音
    • this: 発音
    • after: 後続音の発音
  • segments: マッピングされるセグメント群
    • segment_id: セグメントの識別子
    • note: 音高
      • before: 先行音の音高
      • this: 音高
      • after: 後続音の音高
    • velocity: ベロシティ

根本的には note, velocity の二次元平面上のマッピングなのでもうちょっとマシな書き方がありそう。 結構空間が広いのでデータ量が爆発するのが難点。

pronounce

${consonant} ${vowel} の形式で表す。子音が存在しない場合は前半を省略する。

TBD