本章では、サウンドコントロールライブラリを使って、セガサターンでサウンドを出力する際の手順と注意点について説明します。
┏━━━━━━┓ ┏━━━━━━┓ ┏━━━━━━┓ ┃サウンド ┃ ┃ ┃ ┃ ┃ ┃ライブラリ ┃←→┃ マスター ┃←→┃ スレーブ ┃ ┠──────┨ ┃ CPU ┃ ┃ CPU ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━┛ ┗━━━━━━┛ ┃ ┃ ↑ ┃ ┃ ↓ ┃ ┃ ┏━━━━━━┓ ┃ ┃ ┃ サウンド ┃ ┃ ┃ ┃ ドライバ ┃ ┏━━━━━━━━┓ ┃ ┃ ┠──────┨ ┃サウンドCPU ┃ ┗━━━━━━┛ ┃ コマンド ┃←→┃MC68000 ┃ ┃ バッファ ┃ ┃ ┃ ┃ ┃ ┗━━━━━━━━┛ ┠──────┨ ↓ ┃ ┃ ┏━━━━━┓ ┃ サウンド ┃ ┃PCM音源┃→スピーカ ┃ データ ┃ ┗━━━━━┛ ┗━━━━━━┛ 共有RAM
┏━━━━━━━━━━━━━━┓ ┃ サウンドドライバのセット ┃ ┃ とMC68000の起動 ┃ ┗━━━━━━━━━━━━━━┛ ↓ ┏━━━━━━━━━━━━━━┓ ┃ サウンドデータのセット ┃ ┗━━━━━━━━━━━━━━┛ ↓ ┏━━━━━━━━━━━━━━┓ ┃ BGM演奏/効果音、 ┃ ┃ PCM音源の制御 ┃ ┗━━━━━━━━━━━━━━┛
┌ ┐ │slDMACopy(sounddat , (void *)0x25a0b000 , sizeof(sounddat)) ;│ │slDMAWait() ; │ └ ┘
Song : 曲(効果音)番号 Prio : 音源を使用する際の優先順位 Volume: 音量 Rate : Volumeに達するまでの時間
slBGMTempo(Sint16 Tempo) ; /* テンポの変更 */ slBGMFade(Uint8 Volume , Uint8 Rate) ; /* 音量の変更 */ slBGMOff() ; /* 演奏の停止 */ slBGMPause() ; /* 演奏の一時停止 */ slBGMCont() ; /* 演奏の再開 */ slBGMStat() ; /* 演奏中であるか調べる */
Song : 曲(効果音)番号 Prio : 音源を使用する際の優先順位 Volume: 音量 Pan : 左右の音量の振り分け
slSequenceTempo(Uint8 Seqnm , Sint16 Tempo) ; /* テンポを変更 */ slSequenceFade(Uint8 Seqnm , Uint8 Volume , Uint8 Rate) ; /* 音量を変更 */ slSequencePan(Uint8 Seqnm , Uint8 Pan) ; /* 発生方向を変更 */ slSequenceOff(Uint8 Seqnm) ; /* シーケンスを停止する */ slSequencePause(Uint8 Seqnm) ; /* シーケンスを一時停止する */ slSequenceCont(Uint8 Seqnm) ; /* 一時停止中のシーケンスを再開する */ slSequenceStat(Uint8 Seqnm) ; /* シーケンスが演奏中であるかを調べる */
pdat : PCMストリームの再生モード等のPCM型構造体データ data : PCMストリームの音源データ size : PCMストリームデータのサイズ
PCM型構造体データは以下のような構成で、PCMストリームの再生パラメータを指定するために使用されます。
図14-4 PCM型構造体データ
	
typedef struct{
	Uint8	mode;		/* Mode */
	Uint8	channel;	/* PCM Channel Number */
	Uint8	level;		/* 0 ‾ 127 */
	Sint8	pan;		/* -128 ‾ +127 */
	Uint16	pitch;
	Uint8	eflevelR;	/* Effect level for Right(nomo) 0 ‾ 7 */
	Uint8	efselectR;	/* Effect select for Right(mono) 0 ‾ 15 */
	Uint8	eflevelL;	/* Effect level for Left(mono) 0 ‾ 7 */
	Uint8	efselectL;	/* Effect select for Left(mono) 0 ‾ 15 */
	}PCM;
	mode		:_Stereo or _Mono、_PCM16Bit or _PCM8Bitを指定します
	channel		:PCM再生チャンネル(この関数がセットします)
	level		:音量
	pan		:音量の左右の振り分け
	pitch		:再生レート(音程が変化します)
	eflevelR	:エフェクトをかける度合(右チャンネル用)
	efselectR	:エフェクトナンバー(右チャンネル用)
	eflevelL	:エフェクトをかける度合(左チャンネル用)
	efselectL	:エフェクトナンバー(左チャンネル用)
	
slPCMOff(PCM *pdat) ; /*演奏を停止する*/ slPCMParmChange(PCM *pdat) ; /*パラメータを変更する*/ slPCMStat(PCM *pdat) ;/*指定したPCMチャンネルが演奏中であるかを調べる*/
slSndVolume(Uint8 Volume) ; /* 全体音量 */ slSoundAllOff() ; /* 全サウンドシーケンスの停止 */ slDSPOff() ; /* 効果用DSPの停止 */ slSndMixChange(Uint8 Tbank , Uint8 Mixno) ; /* ミキサーの切替え */ slSndMixParmChange(Uint8 Effect , Uint8 Level , Uint8 Pan) ; /* ミキサーのパラメータ変更 */
25A00000┏━━━━━━━━━━━━┓
        ┃            ┃
        ┃     例外ベクタ等   ┃
        ┃            ┃
25A00500┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃ カレントマップデータ ┃
        ┃            ┃
25A00700┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃  コマンドバッファ  ┃
        ┃            ┃
25A00800┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃ サウンドドライバー  ┃
        ┃            ┃
25A0A000┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃   マップデータ   ┃
        ┃            ┃
25A0B000┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃  音色、シーケンス  ┃
        ┃            ┃
25A78000┣━━━━━━━━━━━━┫
        ┃            ┃
        ┃ PCM再生バッファ  ┃
        ┃            ┃
25A7FFFF┗━━━━━━━━━━━━┛
バンク ソング 内 容 ------ ------ ------- 0 0 曲(ループ無し) 1 曲(ループあり) 1 0 パシッ(C3) 1 パシッ(D3) 2 パシッ(E3) 3 パシッ(F3) 4 パシッ(G3) 5 パシッ(A3) 6 パシッ(B3) 7 パシッ(C4) 2 0 イェー 3 0 長いバイオリンの音 1 短いバイオリンの音(ループ)
フロー14-1 sampsnd1:BGMと効果音の再生テスト
	
フロー14-2 sampsnd2:PCM音源再生テスト
関数型  | 関 数 名  | パ ラ メ ー タ  | 機 能  | 
|---|---|---|---|
| void | slInitSound | void *drv,Uint32 drvsz,void *map,Uint32 mapsz | サウンドドライバーのセットとサウンドコントロールCPUの初期化 | 
| Bool | slBGMOn | Uint16 Song,Uint8 Prio,Uint8 Volume,Uint8 Rate | BGM演奏の開始 | 
| Bool | slBGMTempo | Sint16 Tempo | BGM演奏速度の変更 | 
| Bool | slBGMFade | Uint8 Volume,Uint8 Rate | BGM演奏音量の変更 | 
| Bool | slBGMOff | void | BGM演奏の停止 | 
| Bool | slBGMPause | void | BGM演奏の一時停止 | 
| Bool | slBGMCont | void | 一時停止中BGMの演奏再開 | 
| Bool | slBGMStat | void | BGM再生中チェック | 
| Uint8 | slSequenceOn | Uint16 Song,Uint8 Prio,Uint8 Volume,Uint8 Rate | 指定した効果音の発生開始 | 
| Bool | slSequenceTempo | Uint8 Seqnm,Uint16 Tempo | 指定した効果音の速度変更 | 
| Bool | slSequenceFade | Uint8 Seqnm,Uint8 Volume,Uint8 Rate | 指定した効果音の音量変更 | 
| Bool | slSequencePan | Uint8 Seqnm,Uint8 Pan | 指定した効果音の発生方向変更 | 
| Bool | slSequenceOff | Uint8 Seqnm | 指定した効果音の発生停止 | 
| Bool | slSequencePause | Uint8 Seqnm | 指定した効果音の発生一時停止 | 
| Bool | slSequenceCont | Uint8 Seqnm | 一時停止中効果音の発生再開 | 
| Bool | slSequenceStat | Uint8 Seqnm | 指定した効果音の再生中チェック | 
| Sint8 | slPCMOn | PCM *pdat,void *data,Uint32 size | PCM音源による演奏開始 | 
| Bool | slPCMOff | PCM *pdat | PCM音源による演奏停止 | 
| Bool | slPCMParmChange | PCM *pdat | PCM再生用パラメータの変更 | 
| Bool | slPCMStat | PCM *pdat | 指定したPCMチャンネルの再生中チェック | 
| Bool | slSndVolume | Uint8 Volume | 全体の音量セット | 
| Bool | slSoundAllOff | void | 全てのサウンドシーケンスの演奏停止 | 
| Bool | slDSPOff | void | DSP演奏の停止 | 
| Bool | slSndMixChange | Uint8 Tbank,Uint8 Mixno | 音色バンクに対応するミキサの切替え | 
| Bool | slSndMixParmChange | UInt Effect,Uint8 Level,Uint8 Pan | ミキサのパラメータ変更 | 
★SGL User's Manual
★PROGRAMMER'S TUTORIAL