wiki:外部仕様/コアデータ

コアデータ仕様

はじめに

本文書は、 otoco のコアデータを、抽象的なレベルにおいて要求事項としてまとめた設計を記すものである。

コアデータに外部プログラムからアクセスする方法 (API 仕様)、およびコアデータを XML を用いて表現する方法 (XML ファイル仕様) については、それぞれ別の文書に記す。

目的

otoco コアデータは、単一の楽曲を構成する上で必要なすべての情報を保持することを目的とする。

大まかな構成

otoco コアデータは、大まかに以下の要素によって構成される。

  • 属性情報
  • 楽器情報
  • トラック情報
  • 楽譜情報
  • 演奏情報

属性情報とは、楽曲に付随する各種情報である。例としては、曲名、制作者名 (author)、著作権表示 (copyright)、言語 (英語、日本語など)、関連 URI、制作者コメントなどが挙げられる。

楽器情報とは、演奏の際に用いる楽器に関する情報である。それは MIDI におけるポートまたはチャンネルの指示、およびコントロールチェンジやエクスクルーシブの羅列であったり、外部プラグイン音源に渡すパラメータ値の羅列であったり、音声そのものであったりする。

トラック情報とは、トラックの属性情報である。表示名の他、使用する楽譜の種類、演奏の際に用いる楽器に関する情報などを持つ。

楽譜情報とは、楽譜を描画する為の情報である。演奏情報とは、実際に音声または MIDI 等に出力する為の情報である。楽譜情報と演奏情報を分ける理由は、楽譜だけでは表しきれない演奏上の細かいニュアンスを持たせる為であり、そのニュアンスの為に楽譜が必要以上に複雑怪奇になることを防ぐ為である。但し、これらの情報は互いに密接に関係しており、楽譜情報として記録される記号の一つ一つに、対応する演奏情報が ID で関連づけされる (演奏情報を持たない音符や、音符を持たない演奏情報も存在しうる)。

属性情報

属性情報として保持する情報を以下の通りに定義する。

曲名

  • 概要: 楽曲の曲名。
  • 型: 単一の文字列。省略可。

曲名は楽曲に 1つだけ設定される。

楽譜には、表題として表記される。

SMF には、シーケンス名として出力される。

ストリーミングファイル出力時には、タイトルとして出力される。

制作者名

  • 概要: データ制作者の自称名。
  • 型: 単一の文字列。省略可。

制作者名は楽曲に 1つだけ設定される。

楽譜には、あくまで楽譜制作者 (producer) として表記される。作曲者を表示したい場合は、別途作曲者名を設定する必要がある。

SMF には、コピーライト表示として出力される。但し、著作権表示が設定されている場合は、制作者名は無視し、著作権表示を出力する。

ストリーミングファイル出力時には、多くの場合、アーティスト名として出力される。

アルバム名

  • 概要: 楽曲が収録されるアルバムの名称。
  • 型: 単一の文字列。省略可。

楽曲がアルバムに収録されるものであるならば、そのアルバム名を指定する。アルバム名は楽曲に 1つだけ設定される。同一の曲が複数のアルバムに収録されることもあろうが、その場合にはアルバム毎にデータを作り直してもらうものとする。

ストリーミングファイル出力時に、アルバム名として利用する。

アルバム制作者名

  • 概要: アルバム制作者の自称名。
  • 型: 単一の文字列。省略可。

楽曲がアルバムに収録されるものであるならば、そのアルバムの制作者名を指定する。アルバム制作者名は楽曲に 1つだけ設定される。

ストリーミングファイル出力時に、アルバムアーティスト名として利用する。

作曲者名

  • 概要: 作曲者の自称名。
  • 型: 単一の文字列。省略可。

作曲者名は楽曲に 1つだけ設定される。

楽譜には作曲者名として表記される。

ストリーミングファイル出力時に、作曲者名として利用する。

作詞者名

  • 概要: 作詞者の自称名。
  • 型: 単一の文字列。省略可。

歌詞がある楽曲の場合に、歌詞の作詞者を指定する。作詞者名は楽曲に 1つだけ設定される。

楽譜には作詞者名として表記される。

ストリーミングファイル出力時に、作詞者名として利用する。

編曲者名

  • 概要: 編曲者の自称名。
  • 型: 単一の文字列。省略可。

編曲者名は楽曲に 1つだけ設定される。

楽譜には編曲者名として表記される。

著作権表示

  • 概要: 著作権を持つ個人または団体名。
  • 型: 単一の文字列。省略可。

楽曲が帰属する著作権者を指定する。著作権表示は楽曲に 1つだけ設定される。

楽譜にはコピーライト表示として表記される。

SMF にはコピーライト表示として出力される。著作権表示が設定されている場合、制作者名は SMF には出力されなくなる。

利用範囲

  • 概要: 著作権者が主張する利用範囲。
  • 型: 列挙値と単一の文字列の組み合わせ。省略可。列挙値は以下のいずれかより選択する。列挙値で「その他」を選択する場合、ライセンス条項の全文を文字列に指定する。
    • すべて (作曲者が属する国の法律に則り、すべての著作財産権を主張)
    • CC: 表示
    • CC: 表示、継承
    • CC: 表示、改変禁止
    • CC: 表示、非営利
    • CC: 表示、非営利、継承
    • CC: 表示、非営利、改変禁止
    • GFDL (GNU Free Documentation License)
    • PD (著作権を放棄)
    • その他 (添付のライセンス条項に則る)

「すべて」を選択する場合、データ利用者が利用許可を得る為の連絡先を、文字列に設定すべきである。

「CC:」で始まる 6つのライセンス形態については、クリエイティブ・コモンズ・ライセンスの説明を参照。

「GFDL」を選択する場合、GFDL のライセンス条項全文を文字列に設定する必要がある。 otoco データを生成するプログラムにおいて自動で設定されるのが望ましい。

制作年月日

  • 概要: 楽曲が制作された日付。
  • 型: 単一の日付。省略可。

変更履歴

  • 概要: 楽曲の変更履歴。
  • 型: 以下の 3つのデータを持つオブジェクトの配列。省略可。
    • 変更年月日。単一の日付。
    • 変更者の自称名。単一の文字列。
    • 変更内容。単一の文字列。

関連 URI

  • 概要: 楽曲に関連する URI。
  • 型: 複数の文字列による配列。

コメント

  • 概要: 制作者による任意のコメント。
  • 型: 単一の文字列。省略可。

その他の情報

  • 概要: 楽曲に関するその他の属性情報。
  • 型: 文字列の連想配列。省略可。

楽器情報

楽器情報は、楽曲を演奏する際に実際に用いる楽器に関する情報と、楽譜上の記述に関する情報を、楽譜情報および演奏情報から参照する際に用いる名前をキーとした連想配列である。

以下に、1つの楽器情報が持つ情報内容を定義する。

表示名

  • 概要: 楽譜、および演奏ツール等で実際に表示する名前。
  • 型: 単一の文字列。省略可。

表示名が省略された場合、キー名を代わりに使用する。

楽譜の種類

  • 概要: 使用する楽譜の種類を選択する。
  • 型: 列挙値。省略可。以下のいずれかより選択する。
    • 五線譜。
    • ピアノ譜。
    • リズム譜。
    • タブ譜。

省略した場合、楽譜情報のパートにおける設定が用いられる。

デバイスタイプ

  • 概要: 出力先デバイスの種類を選択する。
  • 型: 列挙値。省略不可。以下のいずれかより選択する。
    • MIDI
    • DSSI プラグイン
    • otoco プラグイン
    • サウンドモジュール

デバイス名

  • 概要: 出力先デバイスの候補の名前を指定する。
  • 型: 単一の文字列。省略可。デバイスタイプに応じて、以下のように認識される。
    • MIDI
      • 音源の種類を表す名前。 ex) "GM", "GS", "XG", "SC-88Pro", etc...
    • DSSI プラグイン
      • モジュール名。但し、拡張子は含めない。 ex) hexter.so なら "hexter" のみ。
      • 省略不可。
    • otoco プラグイン
      • スクリプト名。但し、拡張子は含めない。
      • 省略不可。
    • サウンドモジュール
      • 指定しない。この値は無視される。

楽器属性

  • 概要: 楽器の属性情報。
  • 型: 型を示す列挙値と値を組み合わせたオブジェクトの連想配列。省略可。キー名にはデバイスが要求する名前を指定する。 列挙値は以下より選択する。
    • 数値
    • 文字列
    • バイナリ列

演奏時に用いる楽器の詳細な設定情報をここに格納する。実際にどういったキーの値がどのように作用するかは、出力先、および使用するプラグイン等により異なる。

サウンド定義

  • 概要: デバイスタイプがサウンドモジュールの場合の、サウンドに関する定義情報。
  • 型: サウンドに関する情報を持つオブジェクトの連想配列。省略可。キーはノート番号 (C4 = 60) を表す 0 ~ 127 の整数を指定する。値となるオブジェクトのメンバは以下の通り。
    • サウンドファイル名。単一の文字列。省略可。
    • サウンドデータ。バイナリ列の配列。省略可。
      • サウンドファイル名が指定されている場合は、無視される。
      • サウンドファイル名が指定されていない場合、省略すると、無音となる。これにより、特定の音程範囲を無音に設定することが可能。
      • バイナリ列が 2つある場合はステレオサウンドとして扱う。 3つ以上ある場合、 3つ目以降は無視される。
    • エンコード方式。単一の列挙値。省略可。
      • サウンドファイルの指定が無く、サウンドデータを使用する場合に指定する。
      • 以下より選択する。
        • エンコード無し
        • MP3
        • Vorbis
        • FLAC
      • 省略した場合で、且つサウンドファイルの指定がない場合、エンコード無しとして扱う。
    • サンプリング・レート。単一の整数値。省略可。
      • サウンドファイルの指定が無く、サウンドデータを使用する場合に指定する。
      • 省略した場合で、且つサウンドファイルの指定がない場合、 44100 として扱う。
    • 量子化数。単一の整数値。省略可。
      • サウンドファイルの指定が無く、サウンドデータを使用する場合に指定する。
      • 8, 16, 24, 32 のいずれかより指定する。
      • 省略した場合で、且つサウンドファイルの指定がない場合、 16 として扱う。
    • 発音の基準音程。単一の整数値。省略不可。ノート番号を表す 0 ~ 127 の整数を指定する。オリジナルの音程で音が鳴るノート番号を指定する。
    • 発音の開始位置。単一の整数値。省略可。 0 から始まる波形値の並び順番号を指定する。省略した場合は 0 とする。
    • ループ情報。以下のメンバを持つオブジェクト。省略可。省略した場合はループしない。
      • ループの開始位置。単一の整数値。省略可。 0 から始まる波形値の並び順番号を指定する。省略した場合は 0 とする。
      • ループの終端位置。単一の整数値。省略可。 0 から始まる波形値の並び順番号を指定する。省略した場合は波形の終端位置とする。
    • ADSR (エンベロープ)。以下のメンバを持つオブジェクト。省略可。省略した場合はすべてのメンバがデフォルト値を指定されたものと解釈する。
      • アタックタイム。単一の整数値。省略可。ミリ秒単位での時間を指定する。省略時は 0。
      • ディケイタイム。単一の整数値。省略可。ミリ秒単位での時間を指定する。省略時は 0。
      • サステインレベル。単一の整数値。省略可。音量を、 0 ~ 127 (通常時)、または 0 ~ 16383 (高精度モード) の範囲で指定する。省略時は最大値 (127 または 16383)。
      • リリースタイム。単一の整数値。省略可。ミリ秒単位での時間を指定する。このパラメータのみ負数を指定することが可能で、その場合、ループの終端位置 (ループ情報がなければ波形の終端位置) までサスティンレベルのまま鳴りっぱなしになる。省略時は -1。
    • モノフォニックフラグ。単一の真偽値。省略可。真の場合はモノフォニック、偽の場合はポリフォニックとして動作する。省略時は偽として扱う。
    • ステレオフラグ。単一の真偽値。省略可。省略した場合は偽とする。
      • 元となるサウンドがモノラルの場合は、無視される。
      • 元となるサウンドがステレオの場合、真偽に応じて以下のように動作する。
        • 真 ... ステレオのまま使用する。デフォルトパン、およびパンポット操作は無効となり、バランス操作が有効になる。
        • 偽 ... 左右の平均値をモノラルサウンドとして使用する。パンが有効になる。
    • デフォルトパン。単一の整数値。省略可。省略した場合は 0 とする。 -64 ~ 63 (通常時)、または -8192 ~ 8191 (高精度モード) の範囲で指定する。値が低いほど左側にパンが移動する。 0 が中央値。
    • コントロールの高精度モードフラグ。単一の真偽値。省略可。省略した場合は偽とする。
      • 以下のコントロールについて、偽の場合は 7bits、真の場合は 14bits 精度で調整可能となる。
        • モジュレーション
        • ブレスコントロール
        • ポルタメントタイム
        • ボリューム
        • バランス
        • パンポット
        • エクスプレッション

連想配列のキーに指定するノート番号を、そのサウンドを配置する範囲の開始音程とし、次のサウンドの開始音程に突き当たる手前 (無ければ終端 127) までがそのサウンドの配置される範囲となる。

サウンドファイル名が指定された場合、コアデータにおいてはサウンド情報そのものを持たないものとする (実際のサウンド情報はサウンドモジュール内でのみ生成される)。

ループ情報、ADSR、およびモノフォニックフラグのデフォルトは、サウンドモジュールがパーカッション音源として利用されることを想定したものとなっている。

トラック情報

トラック情報は、トラックの属性情報をまとめたオブジェクトの連想配列である。トラック名をキー名として持つ。トラック名は楽譜情報、および演奏情報においても関連づけられる。また、トラック情報では各トラックの並び順も持っており、反復子を用いてアクセスすることも可能である。

以下に、1つのトラック情報が持つ情報内容を定義する。

表示名

  • 概要: 楽譜、および演奏ツール等で実際に表示する名前。
  • 型: 単一の文字列。省略可。

表示名が省略された場合、キー名を代わりに使用する。

演奏出力先

  • 概要: 演奏時に用いる出力先を選択する。
  • 型: 以下のメンバを持つオブジェクト。
    • 楽器デバイスを示す列挙値。省略不可。以下のいずれかより選択する。
      • MIDI
      • DSSI プラグイン
      • otoco プラグイン
      • サウンドモジュール
    • 型を示す列挙値と値を組み合わせたオブジェクトの連想配列。省略可。出力先ポートやチャンネルなどが格納される。 キー名にはデバイスが要求する名前を指定する。列挙値は以下より選択する。
      • 数値
      • 文字列
      • バイナリ列

演奏情報において選択される楽器情報は、ここで指定された楽器デバイスと一致していなければならない。

楽譜情報

楽譜情報は、以下の情報によって構成されるオブジェクトである。

  • パート情報
  • 全パート共通情報
  • 楽譜要素の連想配列

パート情報は、複数のパートによって構成される連想配列である。パートには名前が付き、それが連想配列のキー名となる。この名前は、トラック情報のトラック名と連動する。

パートは複数の小節によって構成される配列である。小節には名前は付かず、代わりに 1 から始まる番号によって特定される。

小節は子要素として、各種記号や属性などを表す楽譜要素を持つ。楽譜要素には全て ID 名がつき、演奏情報とリンクする。楽譜要素は、時系列上の同じ位置にあるもの同士で配列を作り、その配列が位置情報をキーとした連想配列にまとめられる。

パートとは別に全パート共通情報が存在する。こちらには、その名の通り、全パートで共通となる楽譜要素が含まれ、データとしてはこれ自体が一つのパートのように構成される。

また、楽譜要素の ID 名をキーとした連想配列も存在する。これにより、楽譜要素を ID のみで直接参照することもできる。

パート

  • 概要: 楽譜上のパートを構成する。
  • 型: 以下の情報からなるオブジェクト。
    • パート名 (トラック情報のトラック名と連動)。単一の文字列。省略不可。
    • 楽譜の種類。列挙値。省略不可。以下のいずれかより選択する。
      • 五線譜。(デフォルト)
      • ピアノ譜。
      • リズム譜。
      • タブ譜。
    • 小節オブジェクトの配列。省略不可。

小節

  • 概要: 楽譜上の小節を構成する。
  • 型: 以下の情報からなるオブジェクト。
    • 小節が属するパートオブジェクトの参照。省略不可。
    • 小節番号。 1から始まる番号。省略不可。
    • 楽譜要素の配列の、位置情報をキーとした連想配列。

小節は単独では生成されず、必ずパートに属する形で生成されるものとする。

楽譜要素配列の連想配列において、キーとして用いられる位置情報には、分数を表すオブジェクトを用いる。 4分音符の長さを 1/4 とした、小節上での位置として算出する。分数オブジェクトは大小比較が可能である必要がある。

全パート共通情報

  • 概要: 全パート共通の楽譜要素、および属性を構成する。
  • 型: 以下の情報からなるオブジェクト。
    • 小節オブジェクトの配列。省略不可。

楽譜要素

  • 概要: 楽譜上に表示する記号そのもの、および間接的に記号等に表示される属性情報を構成する。
  • 型: 以下の共通情報と、要素の種類に応じた任意のデータを持つオブジェクト。
    • ID 名。単一の文字列。省略不可。
    • 楽譜要素が属するパートオブジェクトの参照。省略可。省略した場合、全パート共通情報に属するものとして扱う。
    • 小節番号。 1から始まる番号。省略不可。
    • 位置情報。分数オブジェクト。省略不可。小節の項を参照。
    • サブフォント番号。単一の整数値。省略可。デフォルトは 0。 同じ意味の記号が複数種存在する場合、この値を設定することで別の記号フォントを選択することができる。

楽譜要素の種類を以下に列記する。

  • 音符
    • 概要: 音符記号。
    • 追加データ:
      • 音符の長さ。単一の分数オブジェクト。省略不可。単一の音符で表現できる長さを指定する。
      • 表示音名。単一の列挙値。省略不可。以下の値より選択する。
        • C/ハ/ド。
        • D/ニ/レ。
        • E/ホ/ミ。
        • F/へ/ファ。
        • G/ト/ソ。
        • A/イ/ラ。
        • B/ロ/シ。
      • オクターブ。単一の整数値。省略不可。オクターブ 4 のドは、ト音記号の楽譜より下、且つ、ヘ音記号の楽譜より上に表示され、 ハ音記号の楽譜における基準の位置となる。
      • 左手フラグ。単一の真偽値。省略可。ピアノ譜の場合、下の五線に音符を表示したい場合に真を指定する。
    • 制限:
      • 長さとの兼ね合いで小節からはみ出る位置に音符が存在することはできない。
      • 同一パートの同一小節内に同一の位置で同一の音名・オクターブの音符が複数存在することはできない。
  • 休符
    • 概要: 休符記号。
    • 追加データ:
      • 休符の長さ。分数オブジェクト。省略不可。単一の休符で表現できる長さを指定する。
      • 左手フラグ。単一の真偽値。省略可。ピアノ譜の場合、下の五線に休符を表示したい場合に真を指定する。
    • 制限:
      • 長さとの兼ね合いで小節からはみ出る位置に音符が存在することはできない。
    • 捕捉:
      • 音符や休符が小節内の拍を満たさない場合、楽譜出力の際に、システムが必要に応じて休符を生成するものとする。
  • 装飾音符
    • 概要: 前打音または後打音
    • 追加データ:
      • 音符の長さ。単一の分数オブジェクト。省略可。長前打音の長さとして指定する。 省略した場合、音名が 1つのみで、且つ前打音であるならば、短前打音として扱う。 音名が複数存在するか、または後打音の場合には、無視される。
      • 表示音名。複数の列挙値の配列。省略不可。値の種類は音符の場合と同じ。 値が複数存在する場合は複前打音または複後打音として扱う。
      • オクターブ。複数の整数値の配列。省略不可。オクターブの指定方法は音符の場合と同じ。 音名を複数指定する場合、それに対応するようにオクターブも複数指定する。
      • 後打音フラグ。単一の真偽値。省略不可。真なら後打音、偽なら前打音となる。
    • 制限:
      • 指定された位置に音符が存在する必要がある。
    • 捕捉:
      • 後打音の場合、その後に続く音の音符が存在する位置を指定する。
  • 強弱記号
    • 概要: 音の強弱を表す記号。クレッシェンド/デクレッシェンドやアクセントは除く。
    • 追加データ:
      • 種類。単一の列挙値。省略不可。以下の値より選択する。
        • ピアニシシモ ("ppp") 以下。
        • ピアニシモ ("pp")。
        • ピアノ ("p")。
        • メゾピアノ ("mp")。
        • メゾフォルテ ("mf")。
        • フォルテ ("f")。
        • フォルテシモ ("ff")。
        • フォルテシシモ ("fff") 以上。
      • 記号を追加する数。単一の整数値。省略可。ピアニシシモ以下、またはフォルテシシモ以上を選択した場合、 p または f をさらにいくつ追加して表記するかを指定する。省略した場合は 0 となる。実際に表示される数は、3 にこの値を足した数となる。
    • 制限
      • 全パート共通情報に含めることはできない。
  • 強弱変化記号
    • 概要: 音の強弱の変化を表す記号。
    • 追加データ:
      • 種類。単一の列挙値。省略不可。以下の値より選択する。
        • クレッシェンド (Font No. 0: "<", 1: "cresc.", 2: "crescendo")。
        • デクレッシェンド (ディミニエンド) (Font No. 0: ">", 1: "decresc.", 2: "dim.", 3: "decrescendo", 4: "diminuendo")。
      • 範囲の長さ。単一の分数オブジェクト。省略不可。
    • 制限
      • 全パート共通情報に含めることはできない。
  • アーティキュレーション記号
    • 概要: 音を鳴らす長さ、なめらかさを指定する記号。
    • 追加データ:
      • アーティキュレーションの種類。単一の列挙値。省略不可。以下の値より選択する。
        • スラー ("⌒")。
        • テヌート (単音の場合、" ̄" / それ以外の場合、 Font No. 0: "ten.", 1: "tenuto")。
        • メゾスタッカート (単音の場合、" ̄" の上に点がついたもの / 範囲指定有りの場合、"⌒" の中で音符毎に点)。
        • スタッカート (単音の場合、音符の頭上に点をつける / それ以外の場合、 Font No. 0: "stacc.", 1: "staccato")。
        • スタッカーティッシモ ("V")。
      • 範囲。単一の列挙値。省略不可。以下の値より選択する。
        • 音符に付属する。
        • 音符に付属しない。範囲指定あり。
        • 音符に付属しない。範囲指定なし。
      • 範囲の長さ。単一の分数オブジェクト。省略可。 範囲において範囲指定ありを選んだ場合、必ず指定する。それ以外の場合は無視される。
    • 制限
      • スラーの場合、範囲指定あり以外選択できない。
      • メゾスタッカートの場合、範囲指定無しは選択できない。
      • スタッカーティッシモの場合、音符に付属する以外選択できない。
      • 音符に付属する場合、指定した位置に音符が存在する必要がある。
      • 範囲指定無しの場合のみ、全パート共通情報に存在することができる。
    • 捕捉
      • 音符に付属する場合としない場合とで、表示方法が異なる。
  • アクセント記号
    • 概要: 個々の音符に対して用いられる強弱記号。
    • 追加データ:
      • 種類。単一の列挙値。省略不可。以下の値より選択する。
        • マルカート (Font No. 0: ">", 1: "∧")。
        • 滑らかなマルカート ("<>")。
        • フォルテピアノ ("fp")。
        • スフォルツァンド1 ("sf")。
        • スフォルツァンド2 ("sfz")。
        • フォルツァンド ("fz")。
        • リンフォルツァンド ("rf")。
    • 制限
      • 指定した位置に音符が存在する必要がある。
  • タイ
    • 概要: タイ。音を繋ぐ記号。
    • 追加データ:
      • 表示音名。単一の列挙値。省略不可。値の種類は音符の場合と同じ。
      • オクターブ。単一の整数値。省略不可。オクターブの指定方法は音符の場合と同じ。
      • 範囲の長さ。単一の分数オブジェクト。省略可。省略した場合、同じ音程の次の音符を検索し、その音符までの長さとして扱われる。
    • 制限:
      • 指定した位置に指定した音名・オクターブの音符が存在する必要がある。
      • 長さを指定した場合、指定した位置から指定した長さを足した位置に指定した音名・オクターブの音符が存在し、且つ、その途中に 指定した音名・オクターブの音符が存在しない必要がある。
      • 長さを指定しなかった場合、指定した位置より後に指定した音名・オクターブの音符が出現する必要がある。
    • 捕捉:
      • 長さ指定は楽譜出力時の処理の効率化の為、指定を推奨するものである。
  • 速度指示記号
    • 概要: 速度指示記号。
    • 追加データ:
      • 表示方法。単一の列挙値。省略不可。以下の値より選択する。
        • 速度を表す名前を表示する。
        • 音符と拍数を表示する。 ("♪ = n")
        • 速度を表す名前と音符と拍数を表示する。 (ex: "Moderato (♪ = 120)")
        • M.M. 表記。 ("M.M. = n")
        • 速度を表す名前と M.M. 表記で表示する。 (ex: "Moderato (M.M. = 120)")
      • 速度を表す名前。単一の列挙値。省略可。以下の値より選択する。
        • Grave
        • Largo
        • Larghetto
        • Adagio
        • Lento
        • Adagietto
        • Andante
        • Andantino
        • Moderato
        • Allegro moderato
        • Animato
        • Allegretto
        • Allegro
        • Vivace
        • Vivo
        • Presto
        • Prestissimo
        • Tempo giusto
        • Tempo di Valse
      • 表示文字列 (速度を表す名前として実際に表示する文字列)。単一の文字列。省略可。
      • BPM (1分間の拍数)。単一の整数値。省略可。
      • 表示に用いる音符の長さ。単一の分数オブジェクト。省略可。デフォルトは 1/4 (4分音符)。
    • 制限:
      • 全パート共通情報にのみ含めることができる。
    • 捕捉:
      • 速度を表す名前を表示する場合、表示文字列が指定されていればそれを優先して表示する。表示文字列が指定されていない場合は、速度を表す名前の列挙値を指定する必要がある。
      • BPM は音符と拍数の表示であっても M.M. 表記であっても、指定された数値をそのまま表示する。
  • 音部記号
    • 概要: 音部記号。
    • 追加データ:
      • 種類。単一の列挙値。省略不可。以下の値より選択する。
        • 小バイオリン記号 (第1線ト音記号)。
        • バイオリン記号 (第2線ト音記号)。
        • ソプラノ記号 (第1線ハ音記号)。
        • メゾソプラノ記号 (第2線ハ音記号)。
        • アルト記号 (第3線ハ音記号)。
        • テノール記号 (第4線ハ音記号)。
        • バリトン記号 (Font No. 1: 第5線ハ音記号, 2: 第3線ヘ音記号)。
        • バス記号 (第4線ヘ音記号)。
        • 低バス記号 (第5線ヘ音記号)。
    • 制限:
      • 全パート共通情報に含めることはできない。
  • 拍子記号
    • 概要: 拍子記号。
    • 追加データ:
      • 分子。単一の整数値。省略不可。2以上の整数を指定する。
      • 分母の指数。単一の整数値。省略不可。1以上の整数を指定する。実際の分母はこの値による 2のべき乗となる。
      • コモン・アラブレーベ表示フラグ。単一の真偽値。省略不可。真の場合、4/4拍子はコモン ("C")、2/2拍子はアラブレーベ ("¢") で表示する。
    • 制限:
      • 全パート共通情報にのみ含めることができる。
  • 反復記号
    • 概要: 繰り返しなどの演奏の流れを指示する記号。
    • 追加データ:
      • 種類。単一の列挙値。省略不可。以下の値より選択する。
        • 繰り返し開始記号 ("┃│:")。
        • 繰り返し終端記号 (":│┃")。
        • セーニョ ("S" と "%" が重なったような記号)。
        • ダル・セーニョ ("D.S.")。
        • ダ・カーポ ("D.C.")。
        • ヴィーデ (Font No. 0: "O" と "+" が重なったような記号、いわゆるコーダマーク, 1: "to" の下にコーダマーク)。
        • コーダ (Font No. 0: "Coda", No. 1: コーダマーク, No. 2: コーダマークの下に "Coda")。
        • フィーネ (Font No. 0: "Fine", 1: フェルマータ記号)。
        • フェードアウト ("F.O.")。
      • 制限:
        • 全パート共通情報にのみ含めることができる。
        • 小節中の位置の指定は無視される。つまり、この楽譜要素が存在する小節の、先頭または末尾が、これらの記号が表示される位置として評価される。但し、弱起は考慮される。
      • 捕捉:
        • 繰り返し開始記号、セーニョ、コーダは小節の先頭、それ以外は小節の末尾に表示する。
        • 弱起が有効な場合、小節の先頭に表示されるべき記号は、前の小節における弱起の位置に表示する。
  • 弱起
    • 概要: 弱拍 (1拍目以外の拍) で開始する場合に、その拍数を強拍に対するオフセットで指定する。
    • 制限:
      • 全パート共通情報にのみ含めることができる。
    • 備考:
      • この情報が存在する小節上の位置が、弱起の起点となる。例えば、4拍子の曲で、ある小節の 4拍目の位置にこの情報が出現した場合、その小節以降では 4拍目がフレーズの起点となる。
      • 1小節目に出現した場合、弱起より前の部分は音符があっても楽譜に出力されなくなる。
      • 拍子記号が出現すると、その前の小節から弱起の設定はリセットされる。ただし、拍子記号が存在する一つ前の小節に弱起要素が存在する場合、その弱起は以降の小節でも有効となる。
      • 弱起は演奏開始のみならず、改行、演奏終了、繰り返し記号の位置にも影響を与える。
  • 表情指示記号
  • フリーコメント
  • 歌詞

演奏情報

演奏情報は、以下の情報によって構成されるオブジェクトである。

  • 演奏属性情報
  • トラック情報
  • 全トラック共通情報 (メタ情報)
  • 演奏要素の連想配列

演奏属性情報は、演奏情報全体に対する設定情報を持つオブジェクトである。これは、例えば特定の演奏要素が持つ値の範囲や意味を切り替えたりするのに用いられる。

トラック情報は、複数のトラックによって構成される連想配列である。トラックには名前が付き、それが連想配列のキー名となる。この名前は、トラック情報のトラック名と連動する。

トラックは、時系列をキーとした、演奏要素の連想配列である。但し、同一時系列に複数の演奏要素が含まれることがあるので、実際には演奏要素の配列を要素として持つ連想配列となる。

演奏要素は時系列を必ず持ち、関連する楽譜情報の ID を複数持つ (必須ではない)。時系列はタイムベースを基準にカウントされるクロック値によって表現される。例えば、タイムベースを 1拍辺り 480 と定義し、 4/4 拍子のみで作成された楽曲において、デバイス初期化マージンを 1小節分確保する場合、72小節目の 3拍目に発せられる音のノート・オン命令が存在する時系列は、(楽譜通りであるならば)

(1 + (72 - 1)) * (480 * 4) + (3 - 1) * 480 = 139200

となる。

演奏要素の連想配列は、楽譜要素の ID をキーとし、演奏要素の配列を要素とするものである。演奏要素はこの ID を複数持つ場合も、ひとつも持たない場合もあるので、この連想配列がすべての演奏要素をユニークに保持する保証はない。

演奏属性情報

  • 概要: 演奏情報全体の設定情報を構成する。
  • 型: 以下の情報からなるオブジェクト。
    • MIDI フォーマット。単一の数値。省略可能。 0 か 1 を指定する (それぞれフォーマット0 またはフォーマット1)。省略した場合は 0 と見なす。
    • MIDI コントロール高精度フラグ。単一のブール値。省略可能。 true を指定すると、 MIDI 出力の際、コントロール #1~#31 に相当するコントロールの値を 14bits 精度で指定されているものとして動作する (コントロール #33~#63 から対応するものを LSB として利用する)。省略した場合は false と見なす。

トラック

  • 概要: 演奏情報のトラックを構成する。
  • 型: 以下の情報からなるオブジェクト。
    • トラック名 (トラック情報のトラック名と連動)。単一の文字列。省略不可。
    • シーケンス情報。演奏要素の配列の、時系列をキーとする連想配列。省略不可。

演奏要素

  • 概要: 演奏上の動作を指示する命令を構成する。
  • 型: 以下の共通情報と、要素の種類に応じた任意のデータを持つオブジェクト。
    • 演奏要素が属するトラックオブジェクトの参照。省略不可。
    • 時系列。単一の整数値。省略不可。
    • 関連する楽譜要素 ID の配列。省略可。

演奏要素の種類を以下に列記する。

  • ノート・オン
    • 概要: 発音の始点。
    • 追加データ:
      • 音階番号。単一の整数値。省略不可。 MIDI に則り、 C4 (ハ音記号の基準ハ音) = 60 とする。
      • ベロシティ。単一の整数値。省略不可。
      • ニュアンス・バリエーション。単一の整数値。省略可。 デバイスが対応している場合、音色のバリエーション (奏法による音色の変化、等) を指定できる。
      • アタック・オフセット。単一の整数値。省略可。 デバイスが対応している場合、エンベローブのアタックタイムに対するオフセットを指定できる。
      • ディケイ・オフセット。単一の整数値。省略可。 デバイスが対応している場合、エンベローブのディケイタイムに対するオフセットを指定できる。
      • リリース・オフセット。単一の整数値。省略可。 デバイスが対応している場合、エンベローブのリリースタイムに対するオフセットを指定できる。
      • サスティン・オフセット。単一の整数値。省略可。 デバイスが対応している場合、エンベローブのサスティンタイムに対するオフセットを指定できる。
    • 備考:
      • ノート・オフされていない音階においてノート・オンが出現した場合の動作は、デバイス依存とする (システムが勝手にノート・オフを挿入するようなことはない)。
      • ベロシティが 0 の場合の動作も、デバイス依存とする (システムが論理的にノート・オフであると解釈するようなことはない)。
  • ノート・オフ
    • 概要: 発音の終点。
    • 追加データ:
      • 音階番号。単一の整数値。省略不可。 MIDI に則り、 C4 (ハ音記号の基準ハ音) = 60 とする。
      • ベロシティ。単一の整数値。省略可。 デバイスが対応している場合、ノート・オフ・ベロシティを指定できる。
  • ポリフォニック・アフタータッチ
    • 概要: 発音単位でのアフタータッチ。
    • 追加データ:
      • 音階番号。単一の整数値。省略不可。 MIDI に則り、 C4 (ハ音記号の基準ハ音) = 60 とする。
      • ベロシティ。単一の整数値。省略不可。
  • チャンネル・アフタータッチ
    • 概要: チャンネル単位でのアフタータッチ。
    • 追加データ:
      • ベロシティ。単一の整数値。省略不可。
  • ピッチ・ベンド
    • 概要: 音程をずらす。
    • 追加データ:
      • ピッチ・ベンド値。単一の整数値。省略不可。 値の範囲と動作についてはデバイス依存だが、通常、値の範囲は -8192 ~ 8191 であり、 0 が基準値となる。
  • プログラム・チェンジ
    • 概要: プリセット音色を指定する。
    • 追加データ:
      • 楽器名。単一の文字列。省略可。 存在する楽器情報のキーとなる楽器名を指定する。省略した場合はプログラム・ナンバーを使用する。
      • プログラム・ナンバー。単一の整数値。省略可。 楽器名を指定しない場合に、デバイス依存のプログラム・ナンバーを指定する。参考として、 MIDI の場合は 0 ~ 127 で指定する。
      • バンク・セレクト。単一の整数値。省略可。 プログラム・ナンバーを使用する場合に、デバイスが対応していれば、バンク・ナンバーを指定できる。 MIDI の場合、14bits 値を格納し、上位 7bits を MSB、下位 7bits を LSB として用いる1
    • 制限:
      • 楽器名かプログラム・ナンバーかのどちらかを必ず指定する必要がある。
        • C++ プログラムにおいては、専用のクラスを設け、ポリモーフィズムで解決する。
        • XML データにおいては、 DTD ではなくランタイムでチェックを行うようにする。
      • 楽器名を指定する場合、楽器情報として存在しない楽器名を指定することはできない。 また、指定された楽器の出力先デバイスが、トラック情報にて指示されるデバイスと一致していなければならない。
  • コントロール・チェンジ
    • 概要: MIDI のコントロール・チェンジ全般を扱う。
    • 追加データ:
      • コントロール番号。単一の整数値。省略不可。値の範囲は 0 ~ 127 (モードメッセージ含む)。
      • コントロールデータ値。単一の整数値。省略不可。値の範囲は 0 ~ 127。
    • 備考
      • 演奏属性の MIDI コントロール高精度フラグを true に設定した場合でも (コントロール番号が 1 ~ 31 の範囲内であったとしても)、本演奏要素による動作には影響しない。
      • MIDI 非互換の機器においては、コントロール・チェンジを実行した場合の動作は、デバイス依存である。 ボリューム、パンポット、モジュレーションなどの、専用の演奏要素が用意されているものについては、それらを用いるべきである。
  • モジュレーション
    • 概要: モジュレーション・デプスを設定する。
    • 追加データ:
      • モジュレーション・デプス値。単一の整数値。省略不可。
        • MIDI の場合、通常は 0 ~ 127。演奏属性の MIDI コントロール高精度フラグが true の場合は 0 ~ 16383。
        • 非 MIDI の場合はデバイス依存。
  • ブレスコントロール
    • 概要: ブレスコントロールを設定する。
    • 追加データ:
      • ブレスコントロール値。単一の整数値。省略不可。
        • MIDI の場合、通常は 0 ~ 127。演奏属性の MIDI コントロール高精度フラグが true の場合は 0 ~ 16383。
        • 非 MIDI の場合はデバイス依存。
  • ボリューム
    • 概要: チャンネルマスターボリュームを設定する。
    • 追加データ:
      • ボリューム値。単一の整数値。省略不可。
        • MIDI の場合、通常は 0 ~ 127。演奏属性の MIDI コントロール高精度フラグが true の場合は 0 ~ 16383。
        • 非 MIDI の場合はデバイス依存。
  • パンポット
    • 概要: パンポットを設定する。
    • 追加データ:
      • パンポット値。単一の整数値。省略不可。
        • 0 は常に中央となる。
        • MIDI の場合、通常は -64 ~ 63。演奏属性の MIDI コントロール高精度フラグが true の場合は -8192 ~ 8191。
        • 非 MIDI の場合はデバイス依存。
  • エクスプレッション
    • 概要: エクスプレッションを設定する。
    • 追加データ:
      • エクスプレッション値。単一の整数値。省略不可。
        • MIDI の場合、通常は 0 ~ 127。演奏属性の MIDI コントロール高精度フラグが true の場合は 0 ~ 16383。
        • 非 MIDI の場合はデバイス依存。
  • スイッチ系コントロール
    • 概要: スイッチ系コントロールの on/off を切り替える。
    • 追加データ:
      • コントロールの種類。単一の文字列。省略不可。
        • MIDI の場合、少なくとも以下の値が利用可能である。
          • hold1 ... ホールド1 (#40h)
          • damper ... ダンパー (#40h)
          • portamento ... ポルタメント (#41h)
          • sostenuto, sastain ... ソステヌート (サスティンペダル) (#42h)
          • soft ... ソフトペダル (#43h)
          • legato ... レガートスイッチ (#44h)
          • hold2 ... ホールド2 (#45h)
        • 非 MIDI の場合、デバイスが要求する値を指定する。
      • スイッチ系コントロール値。単一の整数値。省略不可。
        • MIDI の場合、 0 ~ 127。多くの機器では、 63 未満で off、 64 以上で on とされる (ハーフダンパーなど、中間値を表現する機器もあるかもしれない)。
        • 非 MIDI の場合はデバイス依存。
    • 追加メソッド:
      • ダンパーペダル値を on/off のみで設定できるコンストラクタおよびメソッドを設ける。 ブール値を引数に取り、 false の場合は 0、 true の場合は (機器の種類に応じて) 最大値を設定する。
  • サウンドバリエーション
    • 概要: サウンドバリエーションを切り替える。
    • 追加データ:
      • サウンドバリエーション値。単一の整数値。省略不可。
        • MIDI の場合、 0 ~ 127。
        • 非 MIDI の場合はデバイス依存。
  • サウンドフィルター
    • 概要: ティンバー、ブライトネスなどのフィルターを設定する。
    • 追加データ:
      • フィルターの種類。単一の文字列。省略不可。
        • MIDI の場合、少なくとも以下の値が利用可能である。
          • timber, harmonic, resonance ... ティンバー (レゾナンス) (#47h)
            • 非 MIDI の場合、これらはそれぞれ違う動作になるかもしれない。
          • brightness, cutoff ... ブライトネス (カット・オフ・フリクエンシー) (#4Ah)
            • 非 MIDI の場合、これらはそれぞれ違う動作になるかもしれない。
        • 非 MIDI の場合、デバイスが要求する値を指定する。
      • フィルター値。単一の整数値。省略不可。
        • MIDI の場合、 0 ~ 127。
        • 非 MIDI の場合はデバイス依存。
  • エンベロープ
    • 概要: リリースタイム、アタックタイムなどのエンベロープを設定する。
    • 追加データ:
      • エンベロープの種類。単一の文字列。省略不可。
        • MIDI の場合、少なくとも以下の値が利用可能である。
          • release ... リリースタイム
          • attack ... アタック
        • 非 MIDI の場合、デバイスが要求する値を指定する。
      • エンベロープ値。単一の整数値。省略不可。
        • MIDI の場合、 0 ~ 127。
        • 非 MIDI の場合はデバイス依存。
  • エフェクトゲイン
    • 概要: リバーブ、コーラスなどのエフェクトの音量を設定する。
    • 追加データ:
      • エフェクトの種類。単一の文字列。省略不可。
        • MIDI の場合、少なくとも以下の値が利用可能である。
          • external ... 外部エフェクト (リバーブ) (#5Bh)
          • reverb ... リバーブ (#5Bh)
            • 非 MIDI の場合、 reverb は external とは別物として扱われるかもしれない。
          • tremolo ... トレモロ (#5Ch)
          • chorus ... コーラス (#5Dh)
          • celeste ... セレステ (#5Eh)
          • delay ... ディレイ (#5Eh)
            • 非 MIDI の場合、 delay は celeste とは別物として扱われるかもしれない。
          • variation ... バリエーションエフェクト (#5Eh)
            • 非 MIDI の場合、 variation は (XG 音源と同じ意味のものとしては) 存在しないだろう。
          • phaser ... フェイザー (#5Fh)
        • 非 MIDI の場合、デバイスが要求する値を指定する。
      • ゲイン値。単一の整数値。省略不可。
        • MIDI の場合、 0 ~ 127。
        • 非 MIDI の場合はデバイス依存。
Last modified 6 years ago Last modified on Dec 18, 2011 2:16:24 PM