SDE_ERR sdBankDownloadSetDivSz( div_sz)
const Sint32 div_sz
div_sz 分割サイズ
SDE_ERR_NOTHING エラーなし SDE_ERR_NO_INIT Sound Library が初期化されていない SDE_ERR_PRM_OVER_RANGE div_szの値が範囲外
Bankをメインメモリからサウンドメモリへ転送するときの1度に転送するサイズを指定します。サイズは20H〜200000H Bytesまで20H単位で指定できます。
#define SMPD_2MEGA_BYTES ( 2 * 1024 * 1024) SDMEMBLK BankMemBlk; Uint8 BankBuffer[ SMPD_2MEGA_BYTES]; Sint32 BankSz = 0x100000; /* Bankのサイズは1MB程度あるとする */ UserInit() { /* 各種ライブラリ・変数の初期化 */ /* GD-ROMからBankの読み込み */ /* * Bankの分割ダウンロード */ /* Bankは800H毎に転送する */ sdBankDownloadSetDivSz( 0x800); sdMemBlkSetPrm( BankMemBlk, BankBuffer, BankSz, SDD_MEMBLK_NO_FUNC, NULL); sdBankDownload( BankMemBlk, SDE_DATA_TYPE_MIDI_PRG_BANK, 0); /* 即時復帰なので抜けていきます */ } UserMain() { /* * 同時にPCM Stream再生をする * 実際にはもしsdBankDownloadSetDivSz()関数を使用していない場合は * BankのダウンロードにDMAが占有されて正常なPCM Stream再生ができない */ }
通常sdBankDownload()関数は1つのBankをそのまま1度にサウンドメモリに転送しようとしますが、DMA転送の場合その間DMAを占有してします。 これによる弊害でADXをはじめMiddlewareやPCM Stream音源での音声の再生に支障が出る(逐次波形が転送できなくなる)場合があるということです。 そういう場合にこの関数でBankの分割転送をします。 この関数の設定はsdMultiUnitDownload()関数にも影響します。逆にこの関数での分割はsdBankDownloadEx()関数には影響しません。
sdBankDownload() Bankの転送 sdBankDownloadEx() Bankの分割転送 sdMltDownload() Multi Unitの転送 sdMltDownloadEx() Multi Unitの分割転送