Sound Library - PCM Streamモジュールコントロール関数

sdPstmOnMemPlay

オンメモリPCM Streamの再生

書式

SDE_ERR sdPstmOnMemPlay( handle, pcm_type, pcm_freq, transfer_sz, loop_flg )
SDPSTM handle
const SDE_PCM_TYPE pcm_type
const Uint16 pcm_freq
const Sint32 transfer_sz
const Bool loop_flg

引数

handle   PCM Streamポートのハンドル
pcm_type   PCM Streamのタイプ
pcm_freq   サンプリング周波数
transfer_sz   リングバッファに転送するサイズ
loop_flg   繰り返し再生フラグ

戻り値

SDE_ERR_NOTHING   エラーなし
SDE_ERR_NO_INIT   Sound Library が初期化されていない
SDE_ERR_HANDLE_NULL   ハンドルがNULL
SDE_ERR_PRM_OVER_RANGE   引数が正常な値の範囲外

解説

オンメモリのPCM Stream再生を行う設定をします。

PCM Streamのタイプを指定する引数 pcm_typeに指定する値は次のように定義されています。

 定義   意味 
 SDE_PCM_TYPE_4BIT_ADPCM   4ビットADPCM圧縮形式 
 SDE_PCM_TYPE_8BIT_LINEAR   8ビットPCM非圧縮形式 
 SDE_PCM_TYPE_16BIT_LINEAR   16ビットPCM非圧縮形式 

サンプリング周波数を指定する引数 smp_frequency には、再生時に使用する周波数を指定します。

リングバッファに転送するサイズを指定する引数 transfer_sz には実際に使用するリングバッファを等分割した数値である必要があります。 例えば使用するリングバッファのサイズが4000Hの場合、4000Hをnで割り切れる数字(1000H、2000H等)です。 また、32バイトバウンダリなサイズでなければいけません。

繰り返し再生フラグ loop_flgには、繰り返し再生を行う場合はtrueを、行わない場合はfalseを指定します。 繰り返し再生を指定すると指定のメモリブロックを無限ループ再生します。


用例

/*
 * Monaural on-memory PCM stream sample
 */
/* Base parameters */
#define BASE_VOL	(0x7F)
#define BASE_PAN	(0x40)
#define BASE_FX_CH	(0x00)
#define BASE_FX_LEV	(0x00)
#define BASE_DRCT_LEV	(0x7F)
#define BASE_FILTER_LEV	(SDD_PSTM_PORT_SLOT_FILTER_THROUGH)
#define BASE_FILER_Q	(0x00)
/* Playback waveform size */
#define WAVE_SZ		(0x10000)
/* Size to transfer to ring buffer */
#define TRANSFER_SZ	(0x1000)
/* Loop or not */
#define LOOP_FLG		(true)
SDPSTM  pstm_handle;
SDMEMBLK        memblk;
Void    *src_wave;      /* Source waveform value must be divisible by transfer_sz */
src_wave = syMalloc( WAVE_SZ);  /* Address of wavefore for actual playback */
sdMemBlkCreate( &memblk);
sdMemBlkSetPrm( memblk, src_wave, WAVE_SZ, SDD_MEMBLK_NO_FUNC, NULL);
/* Get PCM stream port access permission, using PCM stream ring buffer index 0 */
sdPstmOpen( &pstm_handle, 1, 0);
/* Set base parameters */
sdPstmSetBasePrm( pstm_handle, SDD_PSTM_PORT_SLOT_ALL,
		BASE_VOL, BASE_PAN, BASE_FX_CH, BASE_FX_LEV,
		BASE_DRCT_LEV, BASE_FILTER_LEV, BASE_FILTER_Q);
/* Set source memory block for on-memory playback */
sdPstmOnMemSetWaveData( pstm_handle, 0, memblk);
/* On-memory playback */
sdPstmOnMemPlay( pstm_handle, SDE_PCM_TYPE_16BIT_LINEAR,
		44100, TRANSFER_SZ, LOOP_FLG);
/* Game processing */
main_loop();
/* Stop playback */
sdPstmStop( pstm_handle);
/* Termination processing */
sdMemBlkDestroy( memblk);
sdPstmClose( pstm_handle);
syMalloc( src_wave);

備考

演奏する波形のメモリブロックサイズはtransfer_szの倍数になるようにしてください。

参照

sdPstmOnMemSetWaveData()
 オンメモリPCM Streamの再生を行う波形の設定

sdPstmOnMemPlay
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000