Fangjun Kuang
Committed by GitHub

Support reading waves from NAudio. (#914)

@@ -118,6 +118,30 @@ std::vector<float> ReadWaveImpl(std::istream &is, int32_t *sampling_rate, @@ -118,6 +118,30 @@ std::vector<float> ReadWaveImpl(std::istream &is, int32_t *sampling_rate,
118 return {}; 118 return {};
119 } 119 }
120 120
  121 + if (header.subchunk1_size == 18) {
  122 + // this is for NAudio. It puts extra bytes after bits_per_sample
  123 + // See
  124 + // https://github.com/naudio/NAudio/blob/master/NAudio.Core/Wave/WaveFormats/WaveFormat.cs#L223
  125 +
  126 + is.seekg(36, std::istream::beg);
  127 +
  128 + int16_t extra_size = -1;
  129 + is.read(reinterpret_cast<char *>(&extra_size), sizeof(int16_t));
  130 + if (extra_size != 0) {
  131 + SHERPA_ONNX_LOGE(
  132 + "Extra size should be 0 for wave from NAudio. Current extra size "
  133 + "%d\n",
  134 + extra_size);
  135 + *is_ok = false;
  136 + return {};
  137 + }
  138 +
  139 + is.read(reinterpret_cast<char *>(&header.subchunk2_id),
  140 + sizeof(header.subchunk2_id));
  141 + is.read(reinterpret_cast<char *>(&header.subchunk2_size),
  142 + sizeof(header.subchunk2_size));
  143 + }
  144 +
121 header.SeekToDataChunk(is); 145 header.SeekToDataChunk(is);
122 if (!is) { 146 if (!is) {
123 *is_ok = false; 147 *is_ok = false;