[Libav-user] Getting spikes in signal when reading mp3 data
Mark McKay
mark at kitfox.com
Tue Dec 3 23:06:50 EET 2019
Just to add more data, this is an example of what I'm reading from my
mp3 file. While many of the values appear to be correct (and a graph
I've made of the data appears to mostly match what I'm getting from the
same audio sample in .wav format), I'm getting a lot of byte sequences
that do not belong there - especially 0xeefeeefe. This data is taken
from channel 0, stepped by every 64 samples:
f4 8f 94 bd : -0.072540
a4 61 69 bd : -0.056978
15 8e 77 3d : 0.060438
07 31 32 be : -0.174015
af c4 92 3d : 0.071664
c0 dc 45 3d : 0.048306
14 ee 38 bd : -0.045149
67 88 a9 3e : 0.331119
c0 04 c4 2f : 0.000000
ab ab ab ab : -0.000000
c5 76 7e 75 : 322571370690696392781073674665984.000000
5c d4 fb 09 : 0.000000
ee fe ee fe : -158839966806181746533156862930074992640.000000
7b cb 3c 91 : -0.000000
ee fe ee fe : -158839966806181746533156862930074992640.000000
65 55 7e 6f : 78712428148303660770110996480.000000
30 ef fc 6e : 39139691209729015717184929792.000000
0e 2e 00 be : -0.125176
19 8d 08 bb : -0.002084
89 1f da bd : -0.106505
70 c3 23 bb : -0.002499
0e 2e 28 3d : 0.041060
2d d3 28 bd : -0.041217
c8 6c 30 be : -0.172290
61 0f 17 3e : 0.147520
75 a0 15 3d : 0.036530
ee fe ee fe : -158839966806181746533156862930074992640.000000
ee fe ee fe : -158839966806181746533156862930074992640.000000
On 2019-12-03 07:56, Mark McKay wrote:
> I'm trying to use libav to read in audio PCM data. I've got it to read in my .wav sample data correctly (the byte format is AV_SAMPLE_FMT_S16). However, my .mp3 sample is getting a lot of strange spikes in the data. The sample format for the .mp3 is AV_SAMPLE_FMT_FLTP and while most of the samples appear to be correct, about 10% of them have very large magnitudes. I'm wondering what's going wrong, and if this might have something to do with the exponent of the floating point number being translated incorrectly. It's not clear to me what the difference between AV_SAMPLE_FMT_FLT and AV_SAMPLE_FMT_FLTP is.
>
> This is a sample of the bit of my code that reads the data from the frame. Am I reading it correctly?
>
> int bufferSize = av_samples_get_buffer_size(NULL,
>
> aCodecCtx->channels,
>
> aFrame->nb_samples,
>
> aCodecCtx->sample_fmt,
>
> 1);
>
> uint8_t *dataBuf = aFrame->data[0];
>
> for (int i = 0; i < aFrame->nb_samples; i++)
>
> {
>
> for (int ch = 0; ch < numChannels; ch++)
>
> {
>
> float val = 0;
>
> switch (aCodecCtx->sample_fmt)
>
> {
> ...
>
> case AV_SAMPLE_FMT_FLT:
>
> case AV_SAMPLE_FMT_FLTP:
>
> {
>
> val = ((float*)dataBuf)[ch + i * numChannels];
>
> if (val > 1 || val < -1)
>
> {
>
> qDebug("Sample out of range %f", val);
>
> val = 0;
>
> }
>
> break;
>
> }
>
> ---
> http://www.kitfox.com
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/libav-user
>
> To unsubscribe, visit link above, or email
> libav-user-request at ffmpeg.org with subject "unsubscribe".
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20191203/7315a0ff/attachment.html>
More information about the Libav-user
mailing list