English
FAQSBLプログラミング関連
戻る進む
FAQ/SBLプログラミング関連

SOUND



マルチプレイヤーで設定しているステレオ/モノラル情報の取得方法について。

Q)
マルチプレイヤで設定しているステレオ/モノラル情報をどのように取得 すればいいですか。

A)
マルチプレイヤで設定した音声出力(ステレオ、モノラル)情報はSMPC内に バックアップされています。この情報を取得する方法としてSMPC I/Fライブラリ にアクセスマクロがありますので、以下のようにして取得してください。

 ret = PER_GS_SM(data) & PER_MSK_STEREO;

実行前には、SMPCのシステム情報取得処理(PER_LInit関数でイントバック種別 PER_KD_SYSを発行)を行っておく必要があります。PER_Init関数は 使用禁止です。

この情報を取得後、サウンドドライバに対してステレオ/モノラルの設定 をする必要があります。設定は、SND_SET_SND_CTRLマクロを使用します。 (サウンドI/FライブラリのSEGALIB¥MAN¥MANSND.DOCに記載しています)
詳しい内容は、

参照
『ハードウェアマニュアル SMPCユーザーズマニュアル』
第2章SMPCコマンド NO.4 SNDONNO.5 SNDOFF及び
2.4非リセット系システムマネージメントコマンド を御覧ください。


STEREO/MONOの設定はどうやるの?

Q)
ゲームスタート時にSTEREO/MONOの切り換えをするのに MAIN側でどこのフラグを操作したら良いか教えてください。

A)
サウンドドライバのステレオ/モノラルビットを操作することで 切り替えることができます。(SystemInterfacework 483H) 切り替え方法としては、

書 式
void SND_SET_SND_CTRL(Uint8 snd_ctrl)

入力
サウンドコントロール値
SND_CTRL_OUTPUT_STEREO :ステレオ
SND_CTRL_OUTPUT_MONO :モノラル

出 力
なし

関数値
なし

機 能
サウンドコントロール値を設定します。現在はステレオ/モノラルの モードを選択し設定できます。
というマクロが用意されているので、こちらをご使用ください。


"SND_SetSeqVl"の"fade"の設定方法

Q)
SND_SetSeqVl を使用して音量の変更を行いたいのですが、fade の数値が 今一つわかりません。マニュアルには1で最長、255で最短と書いて ありますが、具体的にどのくらいの長さなのでしょうか?(長短が逆) フレーム単位なのか、それ以外のものが基準なのか教えてください。

A)
数値の1がサウンドCPUである68000の状態にもよりますが最速で 2m秒にあたり、指定した時間が過ぎるとボリュームが1つずつ変化して いきます。正確な同期をとるのは難しいので、フェード中にストップの コマンドを発行したりして調節するのが普通です。


PCMストリーム再生時に終端でループする

Q)
セガサターン上でPCMストリーム再生をしているのだが、ストップさせよう としても最後でループしたままになってしまう。

A)
SBLのPCMライブラリのバグでデータが4バイト境界になっていないと 上記症状が発生します。バグ修正した Ver1.16 以降を使用してください。


シーケンス再生時の音色バンク切替方法

Q)
シーケンスサウンドのシーケンスデータ、音色バンクデータを両方同時に 切り替えるにはどのようにすればよいでしょうか?

現在、サウンドメモリ中に複数のシーケンスデータ、音色バンクデータを 置き、曲を切り替えることを試みています。
シーケンスデータの切替は SND_StartSeq の引数指定で 音色バンクの切替は SND_ChgMix にて行っているのですが 実際にはシーケンスのみが切り替わり、音色バンクは変化しません。
音色バンクを切り替えるにはどのようにするのでしょう?

A)
"SND_ChgMix"は音色バンク内のミキサ(音量と定位を持つDSPからの出力先) の選択を切り替えるものでメモリ中の音色バンクデータを切り替えるもの ではありません。
音色バンクデータの指定はシーケンスデータ内にある コントロールコマンドで行うものでプログラム的に変更はできません。


SND_CtrlDirMidi()の使い方を教えて。

Q)
PROGRAMMER'S GUIDE VOL.1
『サウンドI/Fライブラリ』のMIDIダイレクトコントロール SND_CtrlDirMidi()
の詳細について御教え願えますでしょうか。

8つのMIDIコマンドを、直接制御できる関数と思っているのですが、 各パラメータの設定値についての詳しいことがわかりません。
サウンドドライバのドキュメントなども見ましたが、MIDIコマンド自体の内容に ついては見当たりせんでした。(バンクにも変換済み)
鳴らなくなってしまうのです。

A)
ダイレクトMIDIは68000上にシーケンスデータを持たせず、発音のon/offを SH2からコントロール可能にしようというものです。
SH2でシーケンサを作成 し、68000サウンドドライバはSCSPを発音させるためのみに使用するなどと いうことも可能です。また、波形だけをサウンドRAMへロードして、発音の on/offをSH2で行うということもできます。

68000へ送信するデータはMIDIデータをセガサターン用に変形させたものを使用します。 このフォーマットは以下のようになります。


表1
bit76543210
0*PriorityCMD
1KNoMIDI Ch
2MIDI Data #1
3MIDI Data #2
*Priority (level) は使用しません。常に0です。

表2
 Priority level
 0-31  
Sequence Start 時の発音優先順位
 CMD
 0-7   
MIDI command
 Kno
 0-7   
発音管理番号
 MIDI Ch
 0-31  
MIDI channel
 MIDI data #1
 0-127 
MIDI data byte #1
 MIDI data #2
 0-127 
MIDI data byte #2


実際の MIDI Event との対応

表3
CMDの値対応する MIDI Event
0(80-8Fh) Note Off Event
1(90-9Fh) Note On Event
2(A0-AFh) After Touch
3(B0-BFh) Control Change
4(C0-CFh) Program Change
5(D0-DFh) Channel Pressure
6(E0-EFh) Pitch Wheel
7(F0-FFh) System Message


具体的な例をあげた方が理解しやすいでしょうから、以下に簡単な手順を 説明します。
では、バンク0の0番目の効果音をダイレクトMIDIコマンドを 使用して発音させてみます。

まず、サウンドの初期化、マップチェンジ、エフェクトチェンジ、ミキサ チェンジなどの演奏を開始する以前に必要となる基本的な処理は通常の リクエストによって完了させておきます。これらのことはプログラマーズ ガイドを参照して行ってください。

では、バンク0、0番目の効果音を発音管理番号1、MIDIチャネル0で 発音させてみます。「表1」に対する1stバイトとして Note on をセット します。Note on は発音開始の意味ですので「表3」から CMD の値として 1を選択すればよいことになります。プライオリティは使用しませんので 1stバイトは 0x01 となります。

同様に2ndバイトは発音管理番号=1、MIDIチャネル=0ですから 0x20 となります。

3rdバイトはノートナンバをセットします。ノートナンバとは音階データ を7ビットで表すデータです。詳しくはMIDIの専門書を参照してください。 ここでは 0x40 としておきます。

4thバイトは velocity です。velocity とは強弱を表す7ビットのデータ です。


SBLでシーケンスへのPAN設定をするにはどうすればよいのでしょう?

Q)
SBLでシーケンスへのPAN設定をするにはどうすればよいのでしょう?

A)
以下のサウンドI/Fライブラリ関数を使用してください。

SndRet SND_SetSeqPan(SndSeqNum P1, Uint8 P2, Uint8 P3);
P1:
発音管理番号(0-7)
P2:
00h→PAN Control ON
80h→PAN Control OFF
P3:
MIDI PANデータ(00h-7Fh)

パラメータ3(P3)については以下の表を参考に設定してください。

表1 MIDI PANデータの詳細(SCSPのPANとの対応)
MIDI PAN
 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
 A
 B
 C
 D
 E
 F
00h - 0Fh1F1F1F1F1E1E1E1E1D1D1D1D1C1C1C1C
10h - 1Fh1B1B1B1B1A1A1A1A1919191918181818
20h - 2Fh17171717161616161515151514141414
30h - 3Fh13131313121212121111111110101010
40h - 4Fh00000000010101010202020203030303
50h - 5Fh04040404050505050606060607070707
60h - 6Fh08080808090909090A0A0A0A0B0B0B0B
70h - 7Fh0C0C0C0C0D0D0D0D0E0E0E0E0F0F0F0F

MIDI PANデータのイメージ図
Left                    Center                     Right
00h  <-----------------> 40h <--------------------> 7Fh

表2 SCSP PANとMIDI PANの対応
PANL(db)R(db)定位 PANL(db)R(db)定位
00h-00.0-00.0C 10h-00.0-00.0C
01h-03.0-00.0R1 11h-00.0-03.0L1
02h-06.0-00.0R2 12h-00.0-06.0L2
03h-09.0-00.0R3 13h-00.0-09.0L3
04h-12.0-00.0R4 14h-00.0-12.0L4
05h-15.0-00.0R5 15h-00.0-15.0L5
06h-18.0-00.0R6 16h-00.0-18.0L6
07h-21.0-00.0R7 17h-00.0-21.0L7
08h-24.0-00.0R8 18h-00.0-24.0L8
09h-27.0-00.0R9 19h-00.0-27.0L9
0Ah-30.0-00.0R10 1Ah-00.0-30.0L10
0Bh-33.0-00.0R11 1Bh-00.0-33.0L11
0Ch-36.0-00.0R12 1Ch-00.0-36.0L12
0Dh-39.0-00.0R13 1Dh-00.0-39.0L13
0Eh-42.0-00.0R14 1Eh-00.0-42.0L14
0Fh-無限-00.0R15 1Fh-00.0-無限L15

戻る進む
FAQSBLプログラミング関連
Copyright SEGA ENTERPRISES, LTD,. 1997