Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: combining main data in mp3 file (Read 2739 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

combining main data in mp3 file

This is my first post here, I am happy to find this forum where I can share specific problems, hopefully I will get some direction,

I am trying to decode mp3 file using my C code for informative purposes, I dont want to use any library etc. I have gone through previous threads and I can do following stuffs successfully

1. take an mp3 file and process as bitstream that gives me correct number of physical frames
2. decode frame header and side information and store main data in a array of struct.
2. Now I want to convert these physical frames into logical frames for making better sense of data.

I have learned that side info has pointer to begin_main_data and we can sum part_2_3len to get total size of main data

so,

size of main data ( in bits) = part2_3_length (g1 + channel0) + part2_3_length (g1 +channel1) + part2_3_length (g2 + channel0) + part2_3_length (g2 + channel1)
so is it true ?


And below the frame by frame debug log for an mp3 file

fs -> frame size, (excluding header)

bmd -> begin main data pointer

smd -> size main data (in bytes)

======output =========

fs : 413, bmd : 0, smd : 1
fs : 414, bmd : 381, smd : 651
fs : 414, bmd : 62, smd : 470
fs : 414, bmd : 28, smd : 409
fs : 414, bmd : 79, smd : 430
fs : 414, bmd : 117, smd : 385
fs : 414, bmd : 173, smd : 333
....
...

From above log it seems that either my code is wrong or conceptually I am missing something first physical frame has no data of its own, second frame has 381 bytes in first frame and remaining (651-381 = 270) in its own frame, so in its own frame 414 -32 - 270 = 112 are left as byte reservoir which should be used by next frame, but the third frame is starting from -62 offset and not -112

can you pls make me understand what is wrong with my procedure

Thanks a lot
Abhishek