* もくじ [#r69caf81]
ただしリンクは使用できません。単にURLに"#"が付くだけです。
----
#contents


* 汎用BEEPサウンドライブラリBGM.LIBの使い方と仕様 [#f01d6ef8]
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>lib/msgbox]]とは違い、引数と戻り値は無い。
--タイマは自動的に再スタートされます(アプリ側は何もする必要はありません)。
-アプリ側はBGMトラックと効果音トラックなど、別々に制御できます。
--効果音再生中はBGMトラックをミュートすると同時再生=進行のみ、しなければ同時演奏が実現できます。
--一時停止再開または演奏位置を変更した直後の状態は、一時停止しなかった場合と異なる場合があります。
-管理用のデータバッファをアプリ側で確保する必要があります。
--ただし、サウンドトラックオープンの時に使用する音楽データバッファはアプリ側が用意する必要があります。
--現在の実装予定では音楽データバッファは無く、bgm_loadで指定したバッファから直接演奏します(=編集できない)。

''(書きかけ)''
~
* ライブラリの仕様 [#p34726e6]
** 機能の整理 [#dcb5b27f]
~
|機能              |値      |備考                   |
|ピッチベンド      |+0~+255|256段階                |
|音色数            |       1|BEEPのみ(リズム未対応) |
|最大同時分散和音数|     119|ただしうまく聞こえない |

~
''(実装途中のメモです。最終的にこうなるとは限りません)''
** 関数のリスト [#udff4d5b]
''(この仕様は製作段階のものです。製作段階なので実装が進む度に毎回変更される可能性があります)''
-ライブラリ初期化 bgm_init
|レジスタ|意味|備考|
|EAX|最大サウンドトラック数|通常は"2"|
|DS:EBX|管理データバッファへのポインタ|アプリ側で適当に用意する|
|ECX|管理データバッファのサイズ|10KB以上推奨|
|EDX|サウンドトラック(BEEP)のスロット|アプリ側でオープンしたスロット|
|ESI|タイマスロット|アプリ側でオープンしたスロット|
|EDI|タイマ周波数|単位:μHz|
~
-タイマ再設定 bgm_timer
|レジスタ|意味|備考|
|ESI|タイマスロット|以前と同じものを指定する|
|EDI|タイマ周波数|単位:μHz|
~
-サウンドトラックオープン bgm_open
|レジスタ|意味|備考|
|EAX|IDコード|最大値はライブラリ初期化時のEAX-1|
|EBX|デバイスコード|0:単音, 1:和音, その他:未定義|
|EDX|予約|常に"0"|

-サウンドトラッククローズ bgm_close
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

-音楽データバッファの初期化 bgm_clear
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

-BGM/MIDI形式データのロード bgm_load
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|ES:EBX|音楽データへのポインタ|普通はマッピングした位置を指定する|
|ECX|音楽データのサイズ|範囲外アクセス対策用|

-未定 bgm_unload
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

-音楽データの追加 bgm_add
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|ES:EBX|データへのポインタ||
|ECX|データのサイズ||

-演奏開始 bgm_play
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

-一時停止 bgm_stop
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

-未定 bgm_mml
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|ES:EBX|データへのポインタ||
|ECX|データのサイズ||

-ミュートの設定 bgm_volume
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|未定|音量値|上位1ビットのみ有効|

-演奏位置変更 bgm_setptr
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|未定|演奏位置|先頭からのデルタタイムで指定|

-演奏位置取得 bgm_getptr
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|未定|演奏位置|先頭からのデルタタイム|
|未定|小節位置|または分|
|未定|拍位置|または秒|
|未定|拍未満の位置|デルタタイムまたは1/1000秒|

-演奏情報の取得 bgm_getstat
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|未定|未定||

-演奏情報の設定 bgm_setmode
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|
|未定|未定||

-演奏位置の進行 bgm_interval
|レジスタ|意味|備考|
|EAX|IDコード|オープン時に指定したもの|

** 管理データバッファについて [#i2f84eb3]
以下のデータを存在させるバッファです。
|用途|サイズ|
|総合管理用データ|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必要になります。


* こめんとらん [#re840496]
-メモ: [[downloads/dev:http://wiki.osask.jp/?downloads/dev]], [[intro_idx:http://wiki.osask.jp/?intro_idx]] -- ''nika'' SIZE(10){2006/09/08 (金) 00:26:53}
-メモ: http://fweb.midi.co.jp/~tenten/mid_doc/ -- ''nika'' SIZE(10){2006/09/08 (金) 03:22:35}
-メモ: http://www.pluto.dti.ne.jp/~daiki/Midi/Midi.html -- ''nika'' SIZE(10){2006/09/08 (金) 03:52:21}
-cteIsDqoatGkW -- ''PRClUJLChgovRQQSkEy'' SIZE(10){2008/09/13 (土) 19:01:06}
//-cteIsDqoatGkW -- ''PRClUJLChgovRQQSkEy'' SIZE(10){2008/09/13 (土) 19:01:06}

#comment
//#comment

[リロード]   [新規] [編集] [差分] [添付]   [トップ] [一覧] [単語検索] [最終更新] [バックアップ]   [最終更新のRSS]