もくじ  

ただしリンクは使用できません。単にURLに"#"が付くだけです。


汎用BEEPサウンドライブラリBGM.LIBの使い方と仕様  

by nika (2006/09/07)

このライブラリはBGM PLAYERで使っていたものでしたが、ライブラリのソースを紛失してしまったので作成しなおして公開しよう、というものです。

  • ファイル形式はMIDI(SMF0~1)フォーマットと独自形式(拡張子:".BGM")に対応。
  • BEEP音源専用。FM音源やMIDI音源とPCM音源は全く鳴りません。
  • 音楽機能のみを担当し、タイマシグナルが来たら指定の関数を呼ぶだけ。1回の呼び出しで進める時間は最初に指定する。
  • タイマの指定は1/1000000秒単位(μ秒単位)の周波数値で指定する。例えば60Hzなら60000000、42.195Hzなら42195000を指定する。
  • あまり大きくしすぎると、処理の遅いCPU(エミュを含む)で、アプリ側のメインルーチンが実行されなくなる場合があります。
    • 最大周波数は4294.967295Hzを指定できそうだが、OSASK側の制限で1000Hz(将来は100Hzまでに制限されるらしい)までになる。
  • 256段階のピッチベンド対応。-255~-1は、音程番号-1の+1~+255と指定しなければならない。
  • タイマは周波数を指定した後、常にその周波数でタイマシグナルが来る。このシグナルを受信したら、速やかにbgm_interval関数をコールする。msgboxとは違い、引数と戻り値は無い。
    • タイマは自動的に再スタートされます(アプリ側は何もする必要はありません)。
  • アプリ側はBGMトラックと効果音トラックなど、別々に制御できます。
    • 効果音再生中はBGMトラックをミュートすると同時再生=進行のみ、しなければ同時演奏が実現できます。
    • 一時停止再開または演奏位置を変更した直後の状態は、一時停止しなかった場合と異なる場合があります。
  • 管理用のデータバッファをアプリ側で確保する必要があります。
    • ただし、サウンドトラックオープンの時に使用する音楽データバッファはアプリ側が用意する必要があります。
    • 現在の実装予定では音楽データバッファは無く、bgm_loadで指定したバッファから直接演奏します(=編集できない)。

(書きかけ)

ライブラリの仕様  

機能の整理  


機能備考
ピッチベンド+0~+255256段階
音色数1BEEPのみ(リズム未対応)
最大同時分散和音数119ただしうまく聞こえない


(実装途中のメモです。最終的にこうなるとは限りません)

関数のリスト  

(この仕様は製作段階のものです。製作段階なので実装が進む度に毎回変更される可能性があります)

  • ライブラリ初期化 bgm_init
    レジスタ意味備考
    EAX最大サウンドトラック数通常は"2"
    DS:EBX管理データバッファへのポインタアプリ側で適当に用意する
    ECX管理データバッファのサイズ10KB以上推奨
    EDXサウンドトラック(BEEP)のスロットアプリ側でオープンしたスロット
    ESIタイマスロットアプリ側でオープンしたスロット
    EDIタイマ周波数単位:μHz

  • タイマ再設定 bgm_timer
    レジスタ意味備考
    ESIタイマスロット以前と同じものを指定する
    EDIタイマ周波数単位:μHz

  • サウンドトラックオープン bgm_open
    レジスタ意味備考
    EAXIDコード最大値はライブラリ初期化時のEAX-1
    EBXデバイスコード0:単音, 1:和音, その他:未定義
    EDX予約常に"0"
  • サウンドトラッククローズ bgm_close
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
  • 音楽データバッファの初期化 bgm_clear
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
  • BGM/MIDI形式データのロード bgm_load
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    ES:EBX音楽データへのポインタ普通はマッピングした位置を指定する
    ECX音楽データのサイズ範囲外アクセス対策用
  • 未定 bgm_unload
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
  • 音楽データの追加 bgm_add
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    ES:EBXデータへのポインタ
    ECXデータのサイズ
  • 演奏開始 bgm_play
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
  • 一時停止 bgm_stop
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
  • 未定 bgm_mml
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    ES:EBXデータへのポインタ
    ECXデータのサイズ
  • ミュートの設定 bgm_volume
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    未定音量値上位1ビットのみ有効
  • 演奏位置変更 bgm_setptr
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    未定演奏位置先頭からのデルタタイムで指定
  • 演奏位置取得 bgm_getptr
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    未定演奏位置先頭からのデルタタイム
    未定小節位置または分
    未定拍位置または秒
    未定拍未満の位置デルタタイムまたは1/1000秒
  • 演奏情報の取得 bgm_getstat
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    未定未定
  • 演奏情報の設定 bgm_setmode
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの
    未定未定
  • 演奏位置の進行 bgm_interval
    レジスタ意味備考
    EAXIDコードオープン時に指定したもの

管理データバッファについて  

以下のデータを存在させるバッファです。

用途サイズ
総合管理用データ16バイト+16バイト/サウンドトラック
サウンドトラック管理用データ80バイト/サウンドトラック
トラック毎に必要なデータ32バイト/トラック
チャネル毎に必要なデータ256バイト/チャネル

例えば、20トラック,16チャネル(推奨設定)で計算すると、
80 + 32×20 + 256×16 = 4816
となり、約5KBがサウンドトラック毎に必要なことが分かります。

通常はBGM用/効果音用にサウンドトラックを2チャンネル確保すると思いますが、その場合は
16 + 16×2 + 4816×2 = 9680
となり、約10KBが必要になります。 同様に8チャンネル確保する場合は
16 + 16×8 + 4816×8 = 38672
で約38KB必要になります。

こめんとらん  


[リロード]   [新規] [編集] [凍結] [差分] [添付]   [トップ] [一覧] [単語検索] [最終更新] [バックアップ]   [最終更新のRSS]
Last-modified: 2008/10/01 (水) 13:44:36 (3099d)