1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
/*
mp3tech.h - Headers for mp3tech.c
Copyright (C) 2000-2001 Cedric Tefft <cedric@earthling.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
***************************************************************************
This file is based in part on:
* MP3Info 0.5 by Ricardo Cerqueira <rmc@rccn.net>
* MP3Stat 0.9 by Ed Sweetman <safemode@voicenet.com> and
Johannes Overmann <overmann@iname.com>
* MP3Info 0.8.4 by Cedric Tefft <cedric@earthling.net> and
Ricardo Cerqueira <rmc@rccn.net>
Changes:
03-19-2002
- Added data_start to mp3info structure.
*/
/* MIN_CONSEC_GOOD_FRAMES defines how many consecutive valid MP3 frames
we need to see before we decide we are looking at a real MP3 file */
#define MIN_CONSEC_GOOD_FRAMES 4
#define FRAME_HEADER_SIZE 4
#define MIN_FRAME_SIZE 21
#define NUM_SAMPLES 4
enum VBR_REPORT { VBR_VARIABLE, VBR_AVERAGE, VBR_MEDIAN };
enum SCANTYPE { SCAN_NONE, SCAN_QUICK, SCAN_FULL };
typedef struct {
unsigned long sync;
unsigned int version;
unsigned int layer;
unsigned int crc;
unsigned int bitrate;
unsigned int freq;
unsigned int padding;
unsigned int extension;
unsigned int mode;
unsigned int mode_extension;
unsigned int copyright;
unsigned int original;
unsigned int emphasis;
} mp3header;
typedef struct {
char title[31];
char artist[31];
char album[31];
char year[5];
char comment[31];
unsigned char track[1];
unsigned char genre[1];
} id3tag;
typedef struct {
char *filename;
FILE *file;
off_t datasize;
off_t data_start;
int header_isvalid;
mp3header header;
int id3_isvalid;
id3tag id3;
int vbr;
float vbr_average;
int seconds;
int frames;
int badframes;
} mp3info;
int get_header(FILE *file,mp3header *header);
int frame_length(mp3header *header);
int header_layer(mp3header *h);
int header_bitrate(mp3header *h);
int sameConstant(mp3header *h1, mp3header *h2);
int get_mp3_info(mp3info *mp3,int scantype, int fullscan_vbr);
int get_id3(mp3info *mp3);
char *pad(char *string, int length);
char *unpad(char *string);
int write_tag(mp3info *mp3);
int header_frequency(mp3header *h);
char *header_emphasis(mp3header *h);
char *header_mode(mp3header *h);
int get_first_header(mp3info *mp3,long startpos);
int get_next_header(mp3info *mp3);
|