1 /* this file is a part of amp software, (C) tomislav uzelac 1996,1997 2 */ 3 4 /* audio.h some global variables 5 * 6 * Created by: tomislav uzelac Mar/Apr, Jul 96 7 */ 8 9 #include <stdio.h> 10 11 struct AUDIO_HEADER { 12 int ID; 13 int layer; 14 int protection_bit; 15 int bitrate_index; 16 int sampling_frequency; 17 int padding_bit; 18 int private_bit; 19 int mode; 20 int mode_extension; 21 int copyright; 22 int original; 23 int emphasis; 24 }; 25 26 struct SIDE_INFO { 27 int main_data_begin; 28 int scfsi[2][4]; 29 int part2_3_length[2][2]; 30 int big_values[2][2]; 31 int global_gain[2][2]; 32 int scalefac_compress[2][2]; 33 int window_switching_flag[2][2]; 34 int block_type[2][2]; 35 int mixed_block_flag[2][2]; 36 int table_select[2][2][3]; 37 int subblock_gain[2][2][3]; 38 int region0_count[2][2]; 39 int region1_count[2][2]; 40 int preflag[2][2]; 41 int scalefac_scale[2][2]; 42 int count1table_select[2][2]; 43 }; 44 45 46 /* global stuff 47 */ 48 49 extern FILE *in_file; 50 51 extern void statusDisplay(struct AUDIO_HEADER *header, int frameNo); 52 extern void initialise_globals(void); 53 extern void report_header_error(int err); 54 55 extern int scalefac_l[2][2][22]; 56 extern int scalefac_s[2][2][13][3]; 57 extern int t_b8_l[2][3][22]; 58 extern int t_b8_s[2][3][13]; 59 extern short t_bitrate[2][3][15]; 60 61 extern int is[2][578]; 62 extern float xr[2][32][18]; 63 64 extern int *t_l,*t_s; 65 extern int nch; 66 extern int t_sampling_frequency[2][3]; 67 68 extern int A_QUIET,A_SHOW_CNT; 69 extern int A_WRITE_TO_AUDIO; 70 extern short pcm_sample[64]; 71 extern int A_AUDIO_PLAY; 72 extern int A_SET_VOLUME,A_SHOW_TIME; 73 extern int A_DOWNMIX; 74 extern int A_SHUFFLE; 75 76 extern int stop_flag; 77 extern int quit_flag; 78 79 /* ... 80 */ 81 82 #ifdef AUDIO 83 84 FILE *in_file; 85 86 int scalefac_l[2][2][22]; 87 int scalefac_s[2][2][13][3]; 88 89 int is[2][578]; 90 float xr[2][32][18]; 91 92 int *t_l,*t_s; 93 int nch; 94 int t_sampling_frequency[2][3] = { 95 { 22050 , 24000 , 16000}, 96 { 44100 , 48000 , 32000} 97 }; 98 99 /* GUI control stuff */ 100 int send_fd; 101 int receive_fd; 102 103 int stop_flag; 104 int quit_flag; 105 106 int A_QUIET,A_SHOW_CNT; 107 int A_AUDIO_PLAY; 108 int A_SET_VOLUME, A_SHOW_TIME; 109 int A_SHUFFLE; 110 int A_DOWNMIX; 111 112 short pcm_sample[64]; 113 114 short t_bitrate[2][3][15] = {{ 115 {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256}, 116 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160}, 117 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160} 118 },{ 119 {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448}, 120 {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384}, 121 {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320} 122 }}; 123 124 /* the last sfb is given implicitly on pg.28. of the standard. scalefactors 125 * for that one are 0, pretab also 126 */ 127 /* leftmost index denotes ID, so first three tables are for MPEG2 (header->ID==0) 128 * and the other three are for MPEG1 (header->ID==1) 129 */ 130 /* 22.05, 24, 16 */ 131 int t_b8_l[2][3][22]={{ /* table B.8b ISO/IEC 11172-3 */ 132 {5,11,17,23,29,35,43,53,65,79,95,115,139,167,199,237,283,335,395,463,521,575}, 133 {5,11,17,23,29,35,43,53,65,79,95,113,135,161,193,231,277,331,393,463,539,575}, 134 {5,11,17,23,29,35,43,53,65,79,95,115,139,167,199,237,283,335,395,463,521,575} 135 },{ 136 {3,7,11,15,19,23,29,35,43,51,61,73,89,109,133,161,195,237,287,341,417,575}, 137 {3,7,11,15,19,23,29,35,41,49,59,71,87,105,127,155,189,229,275,329,383,575}, 138 {3,7,11,15,19,23,29,35,43,53,65,81,101,125,155,193,239,295,363,447,549,575} 139 }}; 140 int t_b8_s[2][3][13]={{ /* table B.8b ISO/IEC 11172-3 */ 141 {3,7,11,17,23,31,41,55,73,99,131,173,191}, 142 {3,7,11,17,25,35,47,61,79,103,135,179,191}, 143 {3,7,11,17,25,35,47,61,79,103,133,173,191} 144 },{ 145 {3,7,11,15,21,29,39,51,65,83,105,135,191}, 146 {3,7,11,15,21,27,37,49,63,79,99,125,191}, 147 {3,7,11,15,21,29,41,57,77,103,137,179,191} 148 }}; 149 150 int args(int argc,char **argv); 151 void initialise_decoder(void); 152 int decodeMPEG(struct AUDIO_HEADER *header); 153 void initialise_globals(void); 154 void report_header_error(int err); 155 int setup_audio(struct AUDIO_HEADER *header); 156 void close_audio(void); 157 int ready_audio(void); 158 159 void play(char *inFileStr); 160 161 #endif /* AUDIO */ 162 163