サウンドモジュールの操作

サウンドモジュールについて

 Dreamcastでは音の発音方法(以後音源もしくはサウンドモジュール)には4種類の発音法があります.

MIDI音源

 一般的なシンセサイザに近い構成になっています.通常はMIDIプログラムバンク(音色群)とMIDIシーケンスバンク(演奏データ群)を利用して音声の再生を行います.また,SH-4上でMIDIメッセージを発行して音声を再生することも可能です.

ワンショット音源

 簡単に言うとワンショットバンクに登録された音声のデータ番号を指定して音声を再生する方式です.比較的サウンドCPUの負荷も少ない方式です.

PCMストリーム音源

 操作の難しい音源で,サウンドメモリ上にリングバッファを用意し,そこに適切なタイミングで波形をダウンロードすることにより長時間の音声を再生する方式です.サウンドライブラリはGD-FSにアクセスしないことを前提に作られているので,GD-FSから簡単に再生という方法は現在用意されていません.

GD-DA音源

 GD-ROM上のデジタルオーディオトラックの音声を再生する音源です.実際の再生コントロールはGD-FSを利用します.サウンドライブラリは主にGD-DAから出力されるデジタルオーディオのボリューム・元々の左右のパンポットを再設定(例えば真中に寄せたり)するときに使用します.

サウンドモジュールを操作するには

 サウンドモジュールをサウンドライブラリでコントロールする場合のAPIは主に下記のAPIを使用します.

サウンドモジュールコントロールイメージ図


 ????の部分にはそれぞれMidiShotPstmGdda(それぞれMIDI・ワンショット・PCMストリーム・GD-DA)があてはまり,それぞれの音源に対してのコントロールになります.

 音声の実際の流れは

  1. サウンドデータプレイヤが(sd????SetSpeedにて再生スピードの影響を受けつつ)デジタルオーディオを発生します.

  2. sd????SetVolにてボリュームの影響を受けます.

  3. FX出力・ダイレクト出力にデジタルオーディオは分配します.

  4. FXsd????SetFxCh(MIDI・GD-DA音源以外に存在)・sd????SetFxLev(GD-DA音源以外に存在)にてDSPの入力に接続・DSPの入力レベルの設定をします.GD-DA音源はサウンドクリエイタが作成したFXプログラムデータの内容に影響されます.

  5. ダイレクトレベルsd????SetDrctLevにてボリュームの影響を受け,sd????SetDrctPanにてさらにパンポットの影響を受け出力されます.


各APIの説明

 各APIの簡単な説明を下記に記述します.

サウンドモジュールコントロールAPI

 実際の引数などはリファレンスのサウンドモジュールコントロールAPIを参照下さい.

sdMidiPlaysdMidiStopsdShotPlaysdShotStopsdPstmPlaysdPstmStop

 Play・Stopはそれぞれ音源に対応するサウンドデータプレイヤの再生開始・停止を行います.このAPIを使用することによりサウンドクリエイタが作成したサウンドデータを再生・停止することが可能です.

sdMidiPausesdMidiContinue

 sdMidiPausesdMidiContinueはMIDI音源に対応するサウンドデータプレイヤの再生の一時停止・一時停止解除を行います.ワンショット・PCMストリームはハードの制約上出来ません.

sdMidiSetVolsdShotSetVolsdPstmSetVolsdGddaSetVol

 音源のボリュームを設定します.ここで設定する値はsd????SetFxLevおよびsd????SetDrctLevに影響します.例えばここで小さな値(例えば-007FH)を指定するとサウンドデータプレイヤで発生したデジタルオーディオがsd????SetFxLevおよびsd????SetDrctLevに来る以前に無音状態と等価になるので音声が聞こえない可能性があります.

sdMidiSetPansdShotSetPansdPstmSetPansdGddaSetPan

 音源のパンポットを設定します.FXパンポットは変化しません.つまりダイレクト音のみパンポットが移動します.

sdMidiSetPitchsdShotSetPitchsdPstmSetPitch

 音源のピッチを設定します.ワンショット・PCMストリーム音源は再生スピードを設定するAPIであるsd????SetSpeedの影響を受けます(スピードが前後します)

sdMidiSetSpeedsdShotSetSpeedsdPstmSetSpeed

 音源で再生しているサウンドデータの再生スピードを設定します.これはサウンドデータプレイヤにのみ関係あるのでMIDI音源で自分でMIDIメッセージを作成(sdMidiSetMes)・送信(sdMidiSendMes)した場合には影響しません.ワンショット・PCMストリーム音源は再生ピッチを設定するAPIであるsd????SetPitchの影響を受けます(ピッチが上下します)

sdShotSetSetFxChsdPstmSetSetFxCh

 音源からのデジタルオーディオをDSPに入力する時の入力端子番号を指定します.同時にDSPへのセンドレベル(ベースセンドレベル)も指定します.センドレベルはsd????SetFxLevの影響を受けます.sd????SetVolの値によっては(負数指定)DSPの入力に入る以前に音が無くなっている(無音状態)になっている可能性がありますので注意して下さい.

sdMidiSetSetFxLevsdShotSetSetFxLevsdPstmSetSetFxLev

 音源からのデジタルオーディオをDSPに入力する時のセンドレベルを指定します.実際のセンドレベルはsd????SetFxChのベースレベルの影響を受けます.sd????SetVolの値によっては(負数指定の場合元のサウンドデータとの兼ね合いによる)DSPの入力に入る以前に音が無くなっている(無音状態)になっている可能性があり,その場合FX音は鳴らないので注意して下さい.

sdMidiSetSetDrctLevsdShotSetSetDrctLevsdPstmSetSetDrctLev

 音源からのデジタルオーディオをFXをかけずにしゅ通力する音声のレベルを設定します..sd????SetVolの値によっては(負数指定の場合元のサウンドデータとの兼ね合いによる)ここの数値を上げても音が実際に鳴らないので注意してください.

グローバルサウンドコントロールAPI

 実際の引数などはリファレンスのグローバルサウンドモジュールAPIを参照下さい.

sdSndSetFxPrg

 FXの設定をします.実際には必ずFXプログラムデータ番号とFXアウトプットデータ番号を同時に指定しなければなりません.

 MIDI音源に関しては既に発音しているものに対しては効果が変化しませんので注意して下さい.

sdSndSetFxOut

 FXアウトプットのみの設定を行います.FXアウトプットデータ番号を指定します.

 MIDI音源に関しては既に発音しているものに対しては効果が変化しませんので注意して下さい.

sdSndSetFxOutPrm

 FXアウトプットのパラメータの設定を行います.リアルタイムにFXのかかり具合を変化させたいときに利用します.

 MIDI音源に関しては既に発音しているものに対しては効果が変化しませんので注意して下さい.

sdSndSetMasterVol

 全ての音源をミックスした最終的なデジタルオーディオに対して出力レベルを設定します.このAPIの値が0000Hになっているど音はまったく鳴らなくなるので注意して下さい.

パラメータ設定上の注意

 Dreamcast用のサウンドライブラリは基本的にサウンドクリエイタの設定したパラメータを尊重するためにAPIで設定するパラメータのほとんどはサウンドデータからの相対値になっています.つまり,パンポットの設定で0000Hと設定したからパンポットは中央にあるとは限りません.