#ifndef _mp3_header_h_ #define _mp3_header_h_ // https://en.wikipedia.org/wiki/MP3 #if defined(__cplusplus) extern "C" { #endif /* ISO/IEC 11172-3 2.4.1.3 Header unsigned int sync: 12 unsigned int version: 1 unsigned int layer: 2 unsigned int error protection: 1 unsigned int bitrate_index: 4 unsigned int sampling_frequency: 2 unsigned int padding: 1 unsigned int private: 1 unsigned int mode: 2 unsigned int mode extension: 2 unsigned int copyright: 1 unsigned int original: 1 unsigned int emphasis: 2 bit_rate_index Layer I Layer II Layer III '0000' free format free format free format '0001' 32 kbit/s 32 kbit/s 32 kbit/s '0010' 64 kbit/s 48 kbit/s 40 kbit/s '0011' 96 kbit/s 56 kbit/s 48 kbit/s '0100' 128 kbit/s 64 kbit/s 56 kbit/s '0101' 160 kbit/s 80 kbit/s 64 kbit/s '0110' 192 kbit/s 96 kbit/s 80 kbit/s '0111' 224 kbit/s 112 kbit/s 96 kbit/s '1000' 256 kbit/s 128 kbit/s 112 kbit/s '1001' 288 kbit/s 160 kbit/s 128 kbit/s '1010' 320 kbit/s 192 kbit/s 160 kbit/s '1011' 352 kbit/s 224 kbit/s 192 kbit/s '1100' 384 kbit/s 256 kbit/s 224 kbit/s '1101' 416 kbit/s 320 kbit/s 256 kbit/s '1110' 448 kbit/s 384 kbit/s 320 kbit/s sampling_frequency '00' 44.1 kHz '01' 48 kHz '10' 32 kHz '11' reserved mode '00' stereo '01' joint_stereo (intensity_stereo and/or ms_stereo) '10' dual_channel '11' single_channel mode_extension '00' subbands 4-31 in intensity_stereo, bound==4 '01' subbands 8-31 in intensity_stereo, bound==8 '10' subbands 12-31 in intensity_stereo, bound==12 '11' subbands 16-31 in intensity_stereo, bound==16 emphasis '00' no emphasis '01' 50/15 microsec. emphasis '10' reserved '11' CCITT J.17 */ struct mp3_header_t { unsigned int version : 2; // 0-MPEG 2.5, 1-undefined, 2-MPEG-2, 3-MPEG-1 unsigned int layer : 2; // 3-Layer I, 2-Layer II, 1-Layer III, 0-reserved unsigned int protection : 1; unsigned int bitrate_index : 4; //0-free, unsigned int sampling_frequency : 2; unsigned int priviate : 1; unsigned int mode : 2; unsigned int mode_extension : 2; unsigned int copyright : 1; unsigned int original : 1; unsigned int emphasis : 2; }; // version #define MP3_MPEG1 3 #define MP3_MPEG2 2 #define MP3_MPEG2_5 0 // layer #define MP3_LAYER1 3 #define MP3_LAYER2 2 #define MP3_LAYER3 1 #define MP3_BITS_PER_SAMPLE 16 ///MP3 Header size: 4 int mp3_header_load(struct mp3_header_t* mp3, const void* data, int bytes); int mp3_header_save(const struct mp3_header_t* mp3, void* data, int bytes); int mp3_get_channel(const struct mp3_header_t* mp3); int mp3_get_bitrate(const struct mp3_header_t* mp3); int mp3_set_bitrate(struct mp3_header_t* mp3, int bitrate); int mp3_get_frequency(const struct mp3_header_t* mp3); int mp3_set_frequency(struct mp3_header_t* mp3, int frequency); #if defined(__cplusplus) } #endif #endif /* !_mp3_header_h_ */