FM音源プログラム (26) -- SMAF シーケンサ

FM音源プログラムでは、内蔵デモ曲データの表現形式として、SMAF (Synthetic music Mobile Application Format) を採用しています。
以前はYAMAHA SMAF GLOBAL サイトSMAF 仕様書の pdf ファイルをダウンロードできたのですが、現在では、サイト上に概略の説明があるだけで、仕様書のダウンロードはできないようです。
仕様書のファイル自体は、「SMAF仕様書」で検索すれば見つけることができます。
SMAF のシーケンス・データは「Score Track Chunk」というブロックに収められており、

  • Handy Phone Standard (主に PHS 向け)
  • Mobile Standard (主に携帯電話向け、圧縮あり/なしの2種)

という2つのタイプのフォーマットがあります。
FM音源プログラムで使っているのは、シンプルだが記述能力の低い「Handy Phone Standard」の方です。
「Handy Phone Standard」の特長/制約は、

  • 使用できるチャンネル数は 4
  • タイムベースは ms 単位の基準時間となっており、オーサリング・ツールでは 4/5/10/20 ms の中から選ぶ
  • ノートオン・イベントにはベロシティの指定がない*1
  • Volume/Pan/Expresson/Modulation/Bank select/Pitch bend などのイベント
  • エクスクルーシブ・メッセージ

などです。
4 チャンネル以上を使いたい場合には、「Score Track Chunk」自体を複数設けて対応します。
OPL3/MA-2 では、ベロシティ値をモジュレータに作用させて音色を変化させるメカニズムがありません。
それに対応してのことだと思いますが、ノートオン・イベントにはベロシティの概念がありません。
オーサリング・ツールでは、元の SMF (Standard MIDI File) のノートオン・ベロシティはエクスプレッション (CC#11) に変換されて挿入されます。
つまり、元のベロシティは、音量変化だけに作用します。
時間情報は、オーサリング・ツールによって、基準時間の何個分という形に変換され、テンポ、小節、音符といった情報は無くなります。
シーケンサを作る側から見ると、この形式は処理が簡単で、ほとんど何も考えず、次のイベントまでの Duration を取り出して、タイムベース・クロックをカウントダウンするだけで実現できます。
SMAF の問題と言うよりも、オーサリング・ツールの問題かも知れませんが、

  • SMF のプログラム・チェンジで指定した音色番号と違う番号が出力される
  • ピッチベンドが SMAF のイベントではなく、エクスクルーシブとして出力される

という問題があります。
音色番号の問題は、どうやら、使う音色を「Setup Data Chunk」内にエクスクルーシブ・データとして持ち、それを使うために番号が変更されるようです。
しかし、そのマッピングの規則が不明のため、シーケンサでは、SMAF での音色指定は一切無視して、あらかじめ決めておいた音色で1曲全体を演奏しています。
ピッチベンドの問題については、詳しく調べていないので対応できていません。
当初の ADuC7026 版のFM音源プログラムでは、同時発音数 3 だったので、チャンネル数 4 という制約は問題になりませんでした。
最近の V850 版では、サンプリング周波数が低い場合には、同時発音数 8 を実現できていますから、その能力をフルに使うには、チャンネル数 4 という制約が問題になります。
チャンネル数を増やすには複数の「Score Track Chunk」を扱えるように拡張する必要がありますが、それならば、いっそのこと SMF シーケンサにした方が有用だと考えています。

*1:「Mobile Standard」ではベロシティ値が存在します