- 締切済み
今DirectSoundの初期化でわからないことがあります。カレントデ
今DirectSoundの初期化でわからないことがあります。カレントディレクトリにもsoundファイルにもwavファイルがあるのにうまく読み込まれません。また、mmioRead関数でなぜか失敗時の処理が出てしまいます。下に一部省略したソースを書きます。 if(FAILED(hr = OpenWaveFile(aWaveFileName, aSound))) { TCHAR strWavFile[MAX_PATH]; TCHAR kSoundsPath[6]={'s','o','u','n','d','/'}; int kSoundsPathLength=6; lstrcpyn(strWavFile, kSoundsPath, MAX_PATH); lstrcpyn(strWavFile + kSoundsPathLength, aWaveFileName, MAX_PATH - kSoundsPathLength); if(FAILED(hr = OpenWaveFile((LPSTR)strWavFile, aSound))) { sprintf(tmpString, "wavファイル『%s』が見つかりませんでした", strWavFile); goto FAIL_RETURN; } HRESULT Sound::OpenWaveFile(LPSTR aWaveFileName, theSounds *aSound) { mmioOpen→mmioDescend →aChunkInfo.ckid = mmioFOURCC('f', 'm', 't', ' '); if(MMSYSERR_NOERROR != mmioDescend(aSound->sndHmmio, &aChunkInfo, &(aSound->sndChunkRiff), MMIO_FINDCHUNK)) { MessageBox(NULL, "FAIL:mmioDescend2","エラー", MB_OK | MB_ICONHAND); CloseWaveFile(aSound); return(E_FAIL); } →if(mmioRead(aSound->sndHmmio, (HPSTR) &aPCMWaveFormat, sizeof(aPCMWaveFormat)) != sizeof(aPCMWaveFormat)) { MessageBox(NULL, "FAIL:mmioRead","エラー", MB_OK | MB_ICONHAND); CloseWaveFile(aSound); return (E_FAIL); } } ソースは以上です。誰か原因に心当たりがある方がいましたら回答お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
mmioRead関数の仕様をよく読みましょう。 mmioReadは、関数が成功すると、実際に読み取られたバイト数が返ります。 ファイルの終わりに到達し、それ以上バイトが読み取られない場合は、0 が返ります。 ファイルの読み取りエラーが発生した場合は?1 が返ります。 とあります。 つまり、読み込み途中の場合は読み込んだバイト数が、 読み込みが終了した場合は0が、読み込みに失敗した場合は-1が それぞれ返却されるということです。 以下の条件式では何バイト読み込んでも、 aPCMWaveFormat型のサイズと同じに成らない限り、 読み込みが失敗したことになります。 if(mmioRead(aSound->sndHmmio, (HPSTR) &aPCMWaveFormat, sizeof(aPCMWaveFormat)) != sizeof(aPCMWaveFormat))