実行前には、SMPCのシステム情報取得処理(PER_LInit関数でイントバック種別 PER_KD_SYSを発行)を行っておく必要があります。PER_Init関数は 使用禁止です。
この情報を取得後、サウンドドライバに対してステレオ/モノラルの設定
をする必要があります。設定は、SND_SET_SND_CTRLマクロを使用します。
(サウンドI/FライブラリのSEGALIB¥MAN¥MANSND.DOCに記載しています)
詳しい内容は、
現在、サウンドメモリ中に複数のシーケンスデータ、音色バンクデータを
置き、曲を切り替えることを試みています。
シーケンスデータの切替は SND_StartSeq の引数指定で
音色バンクの切替は SND_ChgMix にて行っているのですが
実際にはシーケンスのみが切り替わり、音色バンクは変化しません。
音色バンクを切り替えるにはどのようにするのでしょう?
8つのMIDIコマンドを、直接制御できる関数と思っているのですが、
各パラメータの設定値についての詳しいことがわかりません。
サウンドドライバのドキュメントなども見ましたが、MIDIコマンド自体の内容に
ついては見当たりせんでした。(バンクにも変換済み)
鳴らなくなってしまうのです。
68000へ送信するデータはMIDIデータをセガサターン用に変形させたものを使用します。 このフォーマットは以下のようになります。
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
0 | *Priority | CMD | ||||||
1 | KNo | MIDI Ch | ||||||
2 | MIDI Data #1 | |||||||
3 | MIDI Data #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 |
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番目の効果音を発音管理番号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ビットのデータ です。
MIDI PAN | 0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | A | B |
C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00h - 0Fh | 1F | 1F | 1F | 1F | 1E | 1E | 1E | 1E | 1D | 1D | 1D | 1D | 1C | 1C | 1C | 1C |
10h - 1Fh | 1B | 1B | 1B | 1B | 1A | 1A | 1A | 1A | 19 | 19 | 19 | 19 | 18 | 18 | 18 | 18 |
20h - 2Fh | 17 | 17 | 17 | 17 | 16 | 16 | 16 | 16 | 15 | 15 | 15 | 15 | 14 | 14 | 14 | 14 |
30h - 3Fh | 13 | 13 | 13 | 13 | 12 | 12 | 12 | 12 | 11 | 11 | 11 | 11 | 10 | 10 | 10 | 10 |
40h - 4Fh | 00 | 00 | 00 | 00 | 01 | 01 | 01 | 01 | 02 | 02 | 02 | 02 | 03 | 03 | 03 | 03 |
50h - 5Fh | 04 | 04 | 04 | 04 | 05 | 05 | 05 | 05 | 06 | 06 | 06 | 06 | 07 | 07 | 07 | 07 |
60h - 6Fh | 08 | 08 | 08 | 08 | 09 | 09 | 09 | 09 | 0A | 0A | 0A | 0A | 0B | 0B | 0B | 0B |
70h - 7Fh | 0C | 0C | 0C | 0C | 0D | 0D | 0D | 0D | 0E | 0E | 0E | 0E | 0F | 0F | 0F | 0F |
Left Center Right 00h <-----------------> 40h <--------------------> 7Fh
PAN | L(db) | R(db) | 定位 | PAN | L(db) | R(db) | 定位 | |
---|---|---|---|---|---|---|---|---|
00h | -00.0 | -00.0 | C | 10h | -00.0 | -00.0 | C | |
01h | -03.0 | -00.0 | R1 | 11h | -00.0 | -03.0 | L1 | |
02h | -06.0 | -00.0 | R2 | 12h | -00.0 | -06.0 | L2 | |
03h | -09.0 | -00.0 | R3 | 13h | -00.0 | -09.0 | L3 | |
04h | -12.0 | -00.0 | R4 | 14h | -00.0 | -12.0 | L4 | |
05h | -15.0 | -00.0 | R5 | 15h | -00.0 | -15.0 | L5 | |
06h | -18.0 | -00.0 | R6 | 16h | -00.0 | -18.0 | L6 | |
07h | -21.0 | -00.0 | R7 | 17h | -00.0 | -21.0 | L7 | |
08h | -24.0 | -00.0 | R8 | 18h | -00.0 | -24.0 | L8 | |
09h | -27.0 | -00.0 | R9 | 19h | -00.0 | -27.0 | L9 | |
0Ah | -30.0 | -00.0 | R10 | 1Ah | -00.0 | -30.0 | L10 | |
0Bh | -33.0 | -00.0 | R11 | 1Bh | -00.0 | -33.0 | L11 | |
0Ch | -36.0 | -00.0 | R12 | 1Ch | -00.0 | -36.0 | L12 | |
0Dh | -39.0 | -00.0 | R13 | 1Dh | -00.0 | -39.0 | L13 | |
0Eh | -42.0 | -00.0 | R14 | 1Eh | -00.0 | -42.0 | L14 | |
0Fh | -無限 | -00.0 | R15 | 1Fh | -00.0 | -無限 | L15 |