##### 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