fprintf(stderr, "%s: read %zu bytes from stdin\n", __func__, audio_data.size());
}
- else if (is_wav_buffer(fname)) {
- if ((result = ma_decoder_init_memory(audio_data.data(), audio_data.size(), &decoder_config, &decoder)) != MA_SUCCESS) {
- fprintf(stderr, "Error: failed to open audio data from fname buffer (%s)\n", ma_result_description(result));
-
- return false;
- }
- }
- else if ((result = ma_decoder_init_file(fname.c_str(), &decoder_config, &decoder)) != MA_SUCCESS) {
+ else if (((result = ma_decoder_init_file(fname.c_str(), &decoder_config, &decoder)) != MA_SUCCESS)) {
#if defined(WHISPER_FFMPEG)
- if (ffmpeg_decode_audio(fname, audio_data) != 0) {
- fprintf(stderr, "error: failed to ffmpeg decode '%s'\n", fname.c_str());
+ if (ffmpeg_decode_audio(fname, audio_data) != 0) {
+ fprintf(stderr, "error: failed to ffmpeg decode '%s'\n", fname.c_str());
- return false;
- }
+ return false;
+ }
- if ((result = ma_decoder_init_memory(audio_data.data(), audio_data.size(), &decoder_config, &decoder)) != MA_SUCCESS) {
- fprintf(stderr, "error: failed to read audio data as wav (%s)\n", ma_result_description(result));
+ if ((result = ma_decoder_init_memory(audio_data.data(), audio_data.size(), &decoder_config, &decoder)) != MA_SUCCESS) {
+ fprintf(stderr, "error: failed to read audio data as wav (%s)\n", ma_result_description(result));
- return false;
- }
+ return false;
+ }
#else
- fprintf(stderr, "error: failed to open '%s' file (%s)\n", fname.c_str(), ma_result_description(result));
+ if ((result = ma_decoder_init_memory(fname.c_str(), fname.size(), &decoder_config, &decoder)) != MA_SUCCESS) {
+ fprintf(stderr, "error: failed to read audio data as wav (%s)\n", ma_result_description(result));
- return false;
+ return false;
+ }
#endif
}
}
-bool is_wav_buffer(const std::string buf) {
- // RIFF ref: https://en.wikipedia.org/wiki/Resource_Interchange_File_Format
- // WAV ref: https://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
- if (buf.size() < 12 || buf.substr(0, 4) != "RIFF" || buf.substr(8, 4) != "WAVE") {
- return false;
- }
-
- uint32_t chunk_size = *reinterpret_cast<const uint32_t*>(buf.data() + 4);
- if (chunk_size + 8 != buf.size()) {
- return false;
- }
-
- return true;
-}
-
void high_pass_filter(std::vector<float> & data, float cutoff, float sample_rate) {
const float rc = 1.0f / (2.0f * M_PI * cutoff);
const float dt = 1.0f / sample_rate;