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の再生を行う波形の設定