WAVEファイルからデータを取り出し、セカンダリバッファに格納するまでのコードなのですが
52行目のLockの段階でアクセス違反が出てしまいます。
ビルドは通るのでデータの取り出し方かポインタのメモリ容量をうまく設定できていないかだと思うのですが
お手上げです。
宜しくお願い致します。
HRESULT hr;
//各データの情報を格納するポインタ
MMCKINFO riffChunk;
MMCKINFO formatChunk;
MMCKINFO dataChunk;
//①Waveファイルのオープン(ロード)
hMmio = mmioOpen( "FormatFactorytest.wav",NULL,MMIO_READ );
//②Waveファイルのriffチャンクサーチ
//riffチャンク内へ入る
ZeroMemory(&riffChunk,sizeof(riffChunk));
riffChunk.fccType = mmioFOURCC('W', 'A', 'V', 'E');
mmRes = mmioDescend(hMmio,&riffChunk,NULL,MMIO_FINDRIFF);
//③フォーマットチャンクサーチ
//fmtチャンク内へ入る
ZeroMemory(&formatChunk,sizeof(formatChunk));
formatChunk.ckid = mmioFOURCC('f','m','t',' ');
mmRes = mmioDescend(hMmio,&formatChunk,&riffChunk,MMIO_FINDCHUNK);
int iSrcHeaderSize = formatChunk.cksize;//ヘッダサイズの計算
wf = (LPWAVEFORMATEX)malloc(iSrcHeaderSize);//ヘッダメモリの確保
//④格納されたチャンク情報の読み込み
//fmtチャンク内のFORMAT構造体を読み込み、riffチャンクに戻る
fmsize = formatChunk.cksize;
size = mmioRead(hMmio,(HPSTR)&waveFormatEx,fmsize);
mmioAscend(hMmio,&formatChunk,0);
//⑤データチャンク検索//dataチャンク内へ入る
dataChunk.ckid = mmioFOURCC('d','a','t','a');
mmRes = mmioDescend(hMmio,&dataChunk,&riffChunk,0); //MMIO_FINDCHUNK
//⑥音データ格納
char *pData = new char[ dataChunk.cksize];
size = mmioRead(hMmio,(HPSTR)pData,dataChunk.cksize);
//⑦セカンダリバッファの作成(サウンドバッファ)
ZeroMemory(&DSBufferDesc,sizeof(DSBUFFERDESC));//メモリのリセット
DSBufferDesc.dwSize = sizeof(DSBUFFERDESC);
DSBufferDesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_STATIC|DSBCAPS_LOCDEFER;
DSBufferDesc.dwBufferBytes = riffChunk.cksize;
DSBufferDesc.lpwfxFormat = wf;
DSBufferDesc.guid3DAlgorithm = DS3DALG_DEFAULT;
hr = pDS->CreateSoundBuffer( &DSBufferDesc,pDSBuffer,NULL );
//⑧ロック開始
hr = (*pDSBuffer)->Lock(0,riffChunk.cksize,&lpvWrite,&dwLength,NULL,NULL,0 );
//データの書き込み
mmioRead( hMmio,(char*)lpvWrite,dwLength );
//⑨アンロック開始
(*pDSBuffer)->Unlock(lpvWrite,dwLength,NULL,0);
//⑩ファイルクローズ
mmioClose(hMmio,0);