Hi,

I'm by no means an expert, but just a remark - 8kHz is somewhat low
quality, so maybe that's why the audio sounds awful?

Does it sound better when you try resampling it manually via something
like `ffmpeg -i input.wav -ar 8000 output.wav`?

Best,
Paul

 Le 26/08/2021 à 20:55, Baumgarten, Julien a écrit :
Hi guys,

I made a previous post in order to get some help in converting +
resampling 16bit PCM (16k HZ) samples to A-law PCM (8k HZ) samples.
I succeeded in converting with another library than ffmpeg but it works.
I am focusing now on the resampling.

I tried the following source code:

int64_t src_ch_layout =AV_CH_LAYOUT_MONO, dst_ch_layout =AV_CH_LAYOUT_MONO; int src_rate =16000, 
dst_rate =8000; uint8_t **src_data =NULL, **dst_data =NULL; int src_nb_channels =0, dst_nb_channels 
=0; int src_linesize =0, dst_linesize =0; int src_nb_samples =this->_nbSamplesReceived, 
dst_nb_samples; enum AVSampleFormat src_sample_fmt =AV_SAMPLE_FMT_U8, dst_sample_fmt 
=AV_SAMPLE_FMT_U8; const char *dst_filename ="/tmp/resample.raw"; FILE *dst_file; int 
dst_bufsize; const char *fmt; struct SwrContext *swr_ctx; int ret; dst_file = fopen(dst_filename, 
"wb"); if (!dst_file) {
                   fprintf(stderr, "Could not open destination file %s\n", 
dst_filename); exit(1); }

                swr_ctx = swr_alloc(); if (!swr_ctx) {
                   fprintf(stderr, "Could not allocate resampler context\n"); 
ret =AVERROR(ENOMEM); // goto end; }

                /* set in options */ av_opt_set_int(swr_ctx, "in_channel_layout", src_ch_layout, 0); av_opt_set_int(swr_ctx, 
"in_sample_rate", src_rate, 0); av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", src_sample_fmt, 0); /* set out options */ 
av_opt_set_int(swr_ctx, "out_channel_layout", dst_ch_layout, 0); av_opt_set_int(swr_ctx, "out_sample_rate", dst_rate, 0); 
av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", dst_sample_fmt, 0); /* initialize the resampling context */ if ((ret = 
swr_init(swr_ctx)) <0) {
                   fprintf(stderr, "Failed to initialize the resampling 
context\n"); // goto end; }

                /* Define nb channels */ src_nb_channels = 
av_get_channel_layout_nb_channels(src_ch_layout); dst_nb_channels = 
av_get_channel_layout_nb_channels(dst_ch_layout); // Define ouput nb samples 
dst_nb_samples = av_rescale_rnd(src_nb_samples, dst_rate, src_rate, AV_ROUND_UP); ret = 
av_samples_alloc_array_and_samples(&src_data, &src_linesize, src_nb_channels, 
src_nb_samples, src_sample_fmt, 0); if (ret <0) {
                   fprintf(stderr, "Could not allocate source samples\n"); // 
goto end; }
                ret = av_samples_alloc_array_and_samples(&dst_data, &dst_linesize, 
dst_nb_channels, dst_nb_samples, dst_sample_fmt, 0); if (ret <0) {
                   fprintf(stderr, "Could not allocate destination samples\n"); 
// goto end; }

                // Fill source samples buffer with A-law samples unsigned int i =0; 
std::for_each(this->_test1.begin(), this->_test1.end(), [this, &src_data, &i](const 
uint8_t &data) {
                   src_data[0][i++] = data; }); /* convert to destination format 
*/ ret = swr_convert(swr_ctx, dst_data, dst_nb_samples, (const uint8_t 
**)src_data, src_nb_samples); if (ret <0) {
                   fprintf(stderr, "Error while converting\n"); // TODO: handle 
error }
                dst_bufsize = av_samples_get_buffer_size(&dst_linesize, 
dst_nb_channels, ret, dst_sample_fmt, 1); if (dst_bufsize <0) {
                   fprintf(stderr, "Could not get sample buffer size\n"); // 
TODO: handle error }
                // Write resampled data into file fwrite(dst_data[0], 1, dst_bufsize, 
dst_file); if ((ret = get_format_from_sample_fmt(&fmt, dst_sample_fmt)) <0) {
                   fprintf(stderr, "Resampling failed.\n"); // TODO: handle 
error }
                // Close out file fclose(dst_file); // Release memory if (src_data) 
av_freep(&src_data[0]); av_freep(&src_data); if (dst_data) av_freep(&dst_data[0]); 
av_freep(&dst_data); swr_free(&swr_ctx);
When dst_rate is equal to src_rate, the output is OK without any noise.
However, when dst_rate is lower than src_rate, the audio is awful with
too much noise.

Did I miss something or am I doing something wrong?

Yours sincerely,
Julien BAUMGARTEN


avatar viadialog
<https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_logo>






      Julien BAUMGARTEN

Chef de Projet Développement

01 77 45 30 94

<tel:0177453094>

julien.baumgar...@viadialog.com

<mailto:julien.baumgar...@viadialog.com>

www.viadialog.com

<https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_link>


152 Boulevard Pereire, 75017 Paris

facebook <https://www.facebook.com/viadialog>
        twitter <https://twitter.com/viadialog>
        linkedin <https://www.linkedin.com/company/viatelecom>


<https://www.viadialog.com/?utm_source=signature&utm_medium=email&utm_campaign=email_signature_banner>


This email message (including its attachments) is confidential and may
contain privileged information and is intended solely for the use of
the individual and/or entity to whom it is addressed. If you are not
the intended recipient of this e-mail you may not share, distribute or
copy this e-mail (including its attachments), or any part thereof. If
this e-mail is received in error, please notify the sender immediately
by return e-mail and make sure that this e-mail (including its
attachments), and all copies thereof, are immediately deleted from
your system. Please further note that when you communicate with us via
email or visit our website we process your personal data. See our
privacy policy for more information about how we process it:
https://www.viadialog.com/mentions-legales
<https://www.viadialog.com/mentions-legales>


_______________________________________________
Libav-user mailing list
Libav-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
libav-user-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
Libav-user mailing list
Libav-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
libav-user-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to