English
SOUND Manualサウンドドライバプログラマーズガイド
戻る進む
サウンドドライバプログラマーズガイド

6.デバッグテクニック


 サウンドコントロールコマンドが実行されると、実行中の状態や必要な情報がリターンステータスとしてメインシステムに返されます。リターンステータスはシステム領域のステータスエリアに格納されますので必要に応じて参照してください。

ステータスエリア


シーケンス再生モードとステータス

+0シーケンス再生モード(0-4)
+1シーケンス再生ステータス(0-FFh)

 シーケンスの再生中は、現在の状態がモード・ステータスエリアに随時書き込まれています。シーケンス再生が現在どういう状態であるかを知る場合には、モード・ステータスエリアを参照してください。
 モード・ステータスエリアは発音管理番号0から7に対応して、2バイト×8シーケンス分の計16バイトあります。エリアアドレスの詳細は、システム領域のホストインターフェースワークの項にありますのでそちらを参照してください。

[ シーケンス再生モード ]
0x00初期状態
0x01再生中
0x03再生中一時停止
0x05フェード中

[ シーケンス再生ステータス ]
0x00正常
0x80分解能がSEGASATURNの能力を超えている。
0x81テンポデータがない。
0x82イベントデータがない。
0x83テンポデータが範囲外に設定されている。
0x84シーケンスデータの中にコントロールがひとつもない
0x85存在しないバンクを指定した。
0x86存在しないプログラムを指定した。
0x87バンクが設定されていない状態でプログラムチェンジを行った。0X85のエラーが発生した場合、続けてこのエラーが起こるケースが多いようです。
0x88Total levelに対してVolume biasの値が大きすぎる。
0x89存在しないバンクに対してミキサチェンジを行った。
0x8AMONO MODEを使用した
0x8BToneエディタ上でLayerが設定されていない。
0x8C同時発音が32ヶを超過したためもっとも古いキーオンが強制的に潰された.
0x8D存在しないレイヤを指定した。
0x8EDSPでトラブル発生
0x8F未対応のMIDIイベントを発行した。
0x92FM音源チャネルが多すぎて発音できないノートが発生した.
0x93slotの二重アサイン(プログラムのエラー)
0x941〜16以外のMIDIチャネルで演奏しようとした.
0x99すべてのスロットがFMで埋まっているためNOTE ONがキャンセルされた.


CD-DA入力レベル

 デジタルオーディオの入力信号レベルが格納されます。コントロールコマンドの「Digital Audio In の入力レベル解析開始 (0Ah) 」が発行されると入力信号の検出が開始して、本エリアがセットされます。値は0から7FFFhで、0で入力信号なし、7FFFhで入力信号は最大レベルです。また、この入力信号レベルは瞬間値ですので、入力信号のレベル変化に従って常に変化します。
 通常はトータルレベルのLch/Rchのみが格納されますが、専用のDSPプログラム(DSP - 3 Band Ana.EXB)を使って高温域・中音域・低温域に分けたレベルの検出もできます。但しここで検出できるのは入力信号のレベルですので、コントロールコマンドの「CD-DA レベル (80h)」で出力音量を変えても、本エリアにセットされる信号レベルは変わりません。

注意:本処理はサウンドドライバの負荷になりますので、レベル検出が不要になった場合には「Digital Audio In の入力レベル解析終了 (0Bh)」コマンドを発行してレベル検出を終了させてください。

+0PCMストリーム再生位置 (0-15)
+1未使用

 現在再生中のデータ位置です。PCMストリーム再生バッファの先頭からの相対サンプル数で、値は0から15が格納されます。モニタできるのは4Kサンプル単位(8bit再生なら4KB、16bit再生なら8KB単位)ですので、値が1だけ進んだと言うことは再生位置が4Kサンプル進んだということを意味します。また、ステレオ再生の場合でも、RchとLchは同じ再生アドレスとなります。
 PCMストリーム再生位置エリアはストリーム再生番号0から7に対応して、2バイト×8ストリーム分の計16バイトあります。エリアアドレスの詳細は、システム領域のホストインターフェースワークの項にありますのでそちらを参照してください。

+0シーケンス再生位置 (H)
+1シーケンス再生位置 (L)

シーケンスの再生中は、シーケンスの再生位置が本エリアに格納されます。値は0からFFFFhまでがシーケンシャルに格納されます。これは再生開始からの時間を示すもので、だいたいどの位置を再生中かを知る目安となります。100msecごとに値が1だけ進みます。
 シーケンス再生位置エリアは発音管理番号0から7に対応して、2バイト×8シーケンス分の計16バイトあります。エリアアドレスの詳細は、システム領域のホストインターフェースワークの項にありますのでそちらを参照してください。

注意:シーケンス再生位置は絶対時間ですので、テンポが変わると同じ値でも示す位置は変わってきます。再生中のシーケンスと正確に同期を取るためには、シーケンスデータ中に同期メッセージを格納する方法等で対応してください。

□ それではデバッグおよびチェック方法をご紹介します。

サウンド関連のトラブルが発生した場合に、原因調査の参考となるようなデータが保存されている場合がありますので下記のエリアをチェックしてください。

○ エラーステータスのビットマップ

サウンドドライバの動作中に異常が発生すると、システムインターフェーステーブル(420hからの4バイト)に異常の内容に対応したエラービットがセットされます。内容の詳細は「5 エラーステータスビットマップ」の項に記述してありますのでそちらを参照してください。

○ サウンドコントロールコマンドの履歴

システム領域の予約領域(800hからFFFhまでの2048バイト)にはサウンドコントロールコマンドの履歴が格納されています。本領域にはサウンドドライバがメインシステムから受け取って実行したコントロールコマンド(16バイト)が、実行した順番通りに随時書き込まれています。
 書き込みはリングバッファ形式で行われ、エリアがいっぱいになったら一番古いものから順に書き換えられて、常に最新の128コマンドが記録に残っています。(コマンドの処理が128を超えた場合には、またエリアの先頭から順に上書きされていきます)またそのような場合でも、次のデータの書き込み位置はFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF となっていますから、一番最後に書き込まれたデータの位置がわかります。
 コマンド履歴(16バイト)中の15および16バイト目(ワード)には前回のコマンド処理からの経過時間が格納されていますので、コマンド発行の時間的なタイミングを検証することもできます。1カウントは約2msecです。

本領域を参照することで、下記の例のような項目がチェックできます。


戻る進む
SOUND Manualサウンドドライバプログラマーズガイド
Copyright SEGA ENTERPRISES, LTD., 1997