• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エラー:ストリームの終わりを超えて読み取ることはできません)

エラー:ストリームの終わりを超えて読み取ることはできません

このQ&Aのポイント
  • VB2008を使い始めたばかりの初心者です。以下のようなプログラムで、ちょうど下から5行目くらいの「右CHを最大個数まで読む」の行がエラーがでてしまいます。
  • WAVEファイルを読み込むプログラムで、最大数を3000として考えています。WAVEファイルは音声ファイルで、構成はRIFF、サイズ、WAVE、fmt、dataという順番になっています。
  • また、WAVEファイルはステレオで、2チャンネルあり、実際の音データは左、右と交互に入っています。プログラムの中の「右CHを最大個数まで読む」の部分でエラーが発生しています。原因が分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Do ... Loop の設置方法がおかしいのでは ・・・ wavFmtまで読み込んだ後にDOループになるのでは ・・・ If hID.Value = "fmt " Then   TextBox1.Text = hID.Value   if hdsize< 16 then     MsgBox "no PCM DATA"     Exit Sub   end if   FileGet(1, wavfmt) End If dim ChSize as integer dim dummy as byte FileGet( 1, hID.Value ) FileGet( 1, ChSize ) Try   do while hID.value <> "data"     for n as integer = 1 to ChSize       FileGet(1,dummy)     next     FileGet( 1, hID.Value )     FileGet( 1, ChSize )   Loop   for i = 1 to ChSize step 2     FileGet( 1, l_wave(i))     FileGet( 1, r_wave(i))   next Catch ex Exception End Try FileClose(1) といった具合なのでは ・・・

sakyyy
質問者

お礼

本当です!Do Loopを変えたらできました!!ありがとうございます! あとお聞きしたいのですが、FileGet(1,dummy)とは、一度退避させるようなものですか?必ず必要なのでしょうか? あまり分からず、使わせていただきましたので・・・ ぜひご回答おねがいします!! ちなみに下から7行目が「For i = 0 To 10」じゃなくて、「For i = 0 To dmax-1」でしたね、すみません。テスト用に変更していました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

  do while hID.value <> "data"     for n as integer = 1 to ChSize       FileGet(1,dummy)     next     FileGet( 1, hID.Value )     FileGet( 1, ChSize )   Loop の部分の FileGet(1,dummy)ということでしょうか? これは退避というより読み捨てです 今回取得したチャンクのシグネッチャーが『data』以外だったのでその長さ分読み捨てて次のチャンクを読み込むといった処理をしています

sakyyy
質問者

お礼

なるほど! そういう意味だったんですね!! わかりやすい説明ありがとうございます!!