Browse Source

Fix reading waves (#18)

Fangjun Kuang 2 năm trước cách đây
mục cha
commit
8c2b44e298
1 tập tin đã thay đổi với 3 bổ sung2 xóa
  1. 3 2
      sherpa-ncnn/csrc/wave-reader.cc

+ 3 - 2
sherpa-ncnn/csrc/wave-reader.cc

@@ -34,7 +34,6 @@ struct WaveHeader {
   void Validate() const {
     //                    F F I R
     assert(chunk_id == 0x46464952);
-    assert(chunk_size == 36 + subchunk2_size);
     //                  E V A W
     assert(format == 0x45564157);
     assert(subchunk1_id == 0x20746d66);
@@ -52,7 +51,7 @@ struct WaveHeader {
   // https://www.robotplanet.dk/audio/wav_meta_data/riff_mci.pdf
   void SeekToDataChunk(std::istream &is) {
     //                        a t a d
-    while (subchunk2_id != 0x61746164) {
+    while (is && subchunk2_id != 0x61746164) {
       // const char *p = reinterpret_cast<const char *>(&subchunk2_id);
       // printf("Skip chunk (%x): %c%c%c%c of size: %d\n", subchunk2_id, p[0],
       //        p[1], p[2], p[3], subchunk2_size);
@@ -88,6 +87,8 @@ std::vector<float> ReadWaveImpl(std::istream &is, float *sample_rate) {
 
   header.SeekToDataChunk(is);
 
+  assert(static_cast<bool>(is));
+
   *sample_rate = header.sample_rate;
 
   // header.subchunk2_size contains the number of bytes in the data.