X-Git-Url: https://git.sesse.net/?p=c64tapwav;a=blobdiff_plain;f=audioreader.cpp;h=68243ca29da28f484f9c3671231914c997fbbfb6;hp=f0d07d8c08741acde3d13197f50503128a5bcdc9;hb=881b5d26f20e2e6e4f54144a8d1ea1f473f4c5b8;hpb=16e71fe97173f6d8c7c1c4836eea04d460174912 diff --git a/audioreader.cpp b/audioreader.cpp index f0d07d8..68243ca 100644 --- a/audioreader.cpp +++ b/audioreader.cpp @@ -5,6 +5,8 @@ extern "C" { #include #include #include +#include +#include } @@ -50,25 +52,25 @@ struct AVSampleDeleter { } }; -void convert_samples(SwrContext *swr, int sample_rate, const uint8_t **data, int nb_samples, std::vector *samples) +void convert_samples(SwrContext *swr, int sample_rate, const uint8_t **data, int nb_samples, std::vector *samples) { int max_out_samples = nb_samples + swr_get_delay(swr, sample_rate); if (max_out_samples == 0) { return; } uint8_t *output; - av_samples_alloc(&output, nullptr, 1, max_out_samples, AV_SAMPLE_FMT_S16, 0); + av_samples_alloc(&output, nullptr, 1, max_out_samples, AV_SAMPLE_FMT_FLT, 0); std::unique_ptr output_deleter(output); int out_samples = swr_convert(swr, &output, max_out_samples, data, nb_samples); if (out_samples > 0) { - const int16_t* start = reinterpret_cast(output); - const int16_t* end = start + out_samples; + const float* start = reinterpret_cast(output); + const float* end = start + out_samples; samples->insert(samples->end(), start, end); } } -int decode_packet(const char *filename, AVCodecContext *codec_ctx, SwrContext *swr, AVFrame *audio_frame, AVPacket *packet, int *got_frame, std::vector *samples) +int decode_packet(const char *filename, AVCodecContext *codec_ctx, SwrContext *swr, AVFrame *audio_frame, AVPacket *packet, int *got_frame, std::vector *samples) { *got_frame = 0; int len1 = avcodec_decode_audio4(codec_ctx, audio_frame, got_frame, packet); @@ -88,7 +90,7 @@ int decode_packet(const char *filename, AVCodecContext *codec_ctx, SwrContext *s } // namespace -bool read_audio_file(const char *filename, std::vector *samples, int *sample_rate) +bool read_audio_file(const char *filename, std::vector *samples, int *sample_rate) { av_register_all(); @@ -141,7 +143,7 @@ bool read_audio_file(const char *filename, std::vector *samples, int *s } SwrContext *swr = swr_alloc_set_opts( nullptr, - AV_CH_LAYOUT_MONO, AV_SAMPLE_FMT_S16, codec_ctx->sample_rate, + AV_CH_LAYOUT_MONO, AV_SAMPLE_FMT_FLT, codec_ctx->sample_rate, codec_ctx->channel_layout, codec_ctx->sample_fmt, codec_ctx->sample_rate, 0, nullptr); std::unique_ptr swr_deleter(swr);