transcript
- 1. MP3 ENCODER CORE IMPLEMENTATION Tianyu SuLiu Cheng
University of Ottawa
- 2. SUMMARY MP3 is originally developed by Fraunhofer IIS partly
under EUREKA project EU147, Digital Audio Broadcasting (DAB). It is
then adopted as ISO- MPEAudioLayer - 3, 1991 (developed followed by
Layer 1 and 2). MP3 FILE STRUCTURE IS DIVIDED BY 3 PARTS.
TAG.V2FrameTAG.V1 TAG.V2 * Version * Reversion * Flag etc TAG.V1 *
Title * Artist * Album etc Frame * IntBitrate * IntFrequency *
IntLayer etc University of Ottawa
- 3. PRINCIPLES University of Ottawa Step 1: Subband Filtering
Down sampling and take advantage of polyphase filterbank
- 4. PRINCIPLES University of Ottawa Step 2: Psychoacoustic
Analysis Take into account of Threshold in Quiet, Frequency Masking
and Temporal Masking
- 5. PRINCIPLES University of Ottawa Step 3: 18 Point MDCT Use
previous analysis to decide Window Mode and reduce Noise
Perception
- 6. PRINCIPLES University of Ottawa Step 4: Quantization &
Bit Allocation Allocate bits and apply Huffman coding
- 7. APPLICATIONS University of Ottawa KEY CODES IN SHINE MP3
ENCODER PROGRAM THIS IS PART OF SHINE FIXED-POINT MP3 ENCODER
LIBRARY OPEN PROJECT ("libshine-fxp") libshine-fxp_20070104/
libshine-fxp / types.h types.c bitstream.h bitstream.c Main.c
Layer3.h Layer3.c L3subband.h L3subband.c L3mdct.h L3mdct.c
L3loop.h L3loop.c L3bitstream.h L3bitstream.c
- 8. APPLICATIONS University of Ottawa KEY CODES IN SHINE MP3
ENCODER PROGRAM types.h typedef struct { time_t start_time; //
define start time of encoding wave_t wave; // remain the head
information of source before encoding mpeg_t mpeg; // generated
head information after encoding /* These two app-supplied routines
are used to read and write data */ int (*get_pcm)(short
buffer[2][samp_per_frame], void *config_in); int (*write_mp3)(long
bytes, void *buffer, void *config_in); } config_t; bitstream.h
typedef struct bit_stream_struc { FILE *pt; // pointer to bit
stream unsigned char *buf; // bit stream buffer int mode; /* bit
stream open in read or write mode */ } bitstream_t;
- 9. APPLICATIONS University of Ottawa KEY CODES IN SHINE MP3
ENCODER PROGRAM Main.c #include "Layer3.h" int main(int argc, char
**argv) { wave_open(&config); /* set up the read PCM stream and
write MP3 stream functions */ config.get_pcm=&wave_get;
config.write_mp3=&write_mp3; L3_compress(&config);
wave_close(&config); }
- 10. APPLICATIONS University of Ottawa KEY CODES IN SHINE MP3
ENCODER PROGRAM Layer3.c #include "L3subband.h #include "L3mdct.h
#include "L3loop.h #include "L3bitstream.h" void
L3_compress(config_t *config) { for(gr=0; gr
- 11. DEMO University of Ottawa Shine MP3 Encoder Open
Project
- 12. REFERENCES University of Ottawa 1. Shine Fixed-pt MP3
Encoder Library: Project Web Hosting - Open Source Software(n.d.).
Retrieved November 17, 2014, from http://libshine-
fxp.sourceforge.net 2. Brandenburg K. MP3 and AAC
explained[C]//Audio Engineering Society Conference: 17th
International Conference: High-Quality Audio Coding. Audio
Engineering Society, 1999. 3. . MP3 [D]. , 2002. 4. Noll P. MPnn H
G. Genesis of the MP3 audio coding standard[J]. Consumer
Electronics, IEEE Transactions on, 2006, 52(3): 1043-1049EG digital
audio coding[J]. Signal Processing Magazine, IEEE, 1997, 14(5):
59-81. 5. Herre J, Purnhagen H, Breebaart J, et al. The reference
model architecture for MPEG spatial audio coding[C]//Audio
Engineering Society Convention Paper. 2005, 6447: 28-31.