セカンダリバッファがLockできません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぱるさ

セカンダリバッファがLockできません

#1

投稿記事 by ぱるさ » 8年前

宜しくお願いします。
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);


ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: セカンダリバッファがLockできません

#2

投稿記事 by ISLe » 8年前

49行目は
LPDIRECTSOUNDBUFFER pDSBuffer;
と宣言した変数に
hr = pDS->CreateSoundBuffer( &DSBufferDesc,&pDSBuffer,NULL );
というふうに取得するのが正しいのではないでしょうか。

ぱるさ

Re: セカンダリバッファがLockできません

#3

投稿記事 by ぱるさ » 8年前

ISLe 様

返信が遅くなり申し訳ありませんでした。
おかげさまで解決しました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る