今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);
}
}
ソースは以上です。誰か原因に心当たりがある方がいましたら回答お願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
mmioRead関数の仕様をよく読みましょう。
mmioReadは、関数が成功すると、実際に読み取られたバイト数が返ります。
ファイルの終わりに到達し、それ以上バイトが読み取られない場合は、0 が返ります。
ファイルの読み取りエラーが発生した場合は?1 が返ります。
とあります。
つまり、読み込み途中の場合は読み込んだバイト数が、
読み込みが終了した場合は0が、読み込みに失敗した場合は-1が
それぞれ返却されるということです。
以下の条件式では何バイト読み込んでも、
aPCMWaveFormat型のサイズと同じに成らない限り、
読み込みが失敗したことになります。
if(mmioRead(aSound->sndHmmio, (HPSTR) &aPCMWaveFormat,
sizeof(aPCMWaveFormat)) != sizeof(aPCMWaveFormat))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
Adobeのプレミアプロの書き出し...
-
「パス名が無効です」の発生原因
-
ファイルをクローズしたい
-
エクセル「これ以上新しいフォ...
-
NAS上のファイルの使用中が解除...
-
VBから参照できないCのDLLを使...
-
ファイルクローズ(fclose)でエ...
-
VB6 Dir関数で52エラー発生
-
EXCELのVBAでWORDが開いてある...
-
fgets関数のEOFの扱い方について
-
VBでファイルが開かれているか...
-
アクセスのクエリでコンパイル...
-
ISOファイルとMDSファイル
-
差し込み印刷の元データファイ...
-
UTF-8とUTF-16とUTF-32ってどれ...
-
UTF-8ってBOMなしとBOM付きどち...
-
UTF-16ってBOMなしとBOM付きど...
-
イーファンビューでwebpファイ...
-
ダブルクォーテーション囲いカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
FTPの送信結果を検知したい
-
NAS上のファイルの使用中が解除...
-
VBA ExecuteExcel4Macro 型が一...
-
access テキストボックスの値取得
-
EXCELのVBAでWORDが開いてある...
-
すでにファイルが開かれている...
-
EXCELVBAでONEDRIVE上への保管...
-
Excelファイルのマクロによる排...
-
OUTLOOK VBA 指定フォルダ内の...
-
RAR圧縮ファイル(分割)の順番が...
-
エクセルマクロでエラーの原因...
おすすめ情報