int DIA_getLameSettings(ADM_audioEncoderDescriptor *descriptor) { int ret=0; char string[400]; uint32_t mmode,ppreset; #define SZT(x) sizeof(x)/sizeof(diaMenuEntry ) #define PX(x) &(lameParam->x) LAME_encoderParam *lameParam; ADM_assert(sizeof(LAME_encoderParam)==descriptor->paramSize); lameParam=(LAME_encoderParam*)descriptor->param; mmode=lameParam->mode; ppreset=lameParam->preset; diaMenuEntry channelMode[]={ {ADM_STEREO, QT_TR_NOOP("Stereo"),NULL}, {ADM_JSTEREO, QT_TR_NOOP("Joint stereo"),NULL}, {ADM_MONO, QT_TR_NOOP("Mono"),NULL}}; diaElemMenu menuMode(&mmode, QT_TR_NOOP("C_hannel mode:"), SZT(channelMode),channelMode); diaMenuEntry encodingMode[]={ {ADM_LAME_PRESET_CBR, QT_TR_NOOP("CBR"),NULL}, {ADM_LAME_PRESET_ABR, QT_TR_NOOP("ABR"),NULL}, #if 0 {ADM_LAME_PRESET_EXTREME, QT_TR_NOOP("Extreme"),NULL} #endif }; diaElemMenu Mode(&ppreset, QT_TR_NOOP("Bit_rate mode:"), SZT(encodingMode),encodingMode); #define BITRATE(x) {x,QT_TR_NOOP(#x)} diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224) }; diaElemMenu bitrate(&(descriptor->bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElemUInteger quality(PX(quality),QT_TR_NOOP("_Quality:"),0,9); diaElemToggle reservoir(PX(disableReservoir),QT_TR_NOOP("_Disable reservoir:")); diaElem *elems[]={&menuMode,&Mode,&quality,&bitrate,&reservoir}; if( diaFactoryRun(QT_TR_NOOP("LAME Configuration"),5,elems)) { lameParam->mode=(ADM_mode)mmode; lameParam->preset=(ADM_LAME_PRESET)ppreset; return 1; } return 0; }
bool configure(CONFcouple **setup) { uint32_t mmode,ppreset; ELEM_TYPE_FLOAT qqual; vorbis_encoder config=defaultConfig; if(*setup) { ADM_paramLoad(*setup,vorbis_encoder_param,&config); } mmode=config.mode; qqual=(ELEM_TYPE_FLOAT)config.quality; diaMenuEntry channelMode[]={ {ADM_VORBIS_VBR, QT_TRANSLATE_NOOP("vorbis","VBR"),NULL}, {ADM_VORBIS_QUALITY, QT_TRANSLATE_NOOP("vorbis","Quality based"),NULL}}; diaElemMenu menuMode(&mmode, QT_TRANSLATE_NOOP("vorbis","_Mode:"), SZT(channelMode),channelMode); diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224) }; diaElemMenu bitrate(&(config.bitrate), QT_TRANSLATE_NOOP("vorbis","_Bitrate:"), SZT(bitrateM),bitrateM); diaElemFloat quality(&qqual,QT_TRANSLATE_NOOP("vorbis","_Quality:"),-1.,10.); diaElem *elems[]={&menuMode,&bitrate,&quality}; if( diaFactoryRun(QT_TRANSLATE_NOOP("vorbis","Vorbis Configuration"),3,elems)) { config.mode=(ADM_VORBIS_MODE)mmode; config.quality=(float)qqual; if(*setup) delete *setup; *setup=NULL; ADM_paramSave(setup,vorbis_encoder_param,&config); defaultConfig=config; return 1; } return 0; }
int DIA_getVorbisSettings(ADM_audioEncoderDescriptor *descriptor) { int ret=0; char string[400]; uint32_t mmode,ppreset; ELEM_TYPE_FLOAT qqual; #define SZT(x) sizeof(x)/sizeof(diaMenuEntry ) #define PX(x) &(lameParam->x) VORBIS_encoderParam *vorbisParam; ADM_assert(sizeof(VORBIS_encoderParam)==descriptor->paramSize); vorbisParam=(VORBIS_encoderParam*)descriptor->param; mmode=vorbisParam->mode; qqual=(ELEM_TYPE_FLOAT)vorbisParam->quality; diaMenuEntry channelMode[]={ {ADM_VORBIS_VBR, QT_TR_NOOP("VBR"),NULL}, {ADM_VORBIS_QUALITY, QT_TR_NOOP("Quality based"),NULL}}; diaElemMenu menuMode(&mmode, QT_TR_NOOP("_Mode:"), SZT(channelMode),channelMode); #define BITRATE(x) {x,QT_TR_NOOP(#x)} diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224) }; diaElemMenu bitrate(&(descriptor->bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElemFloat quality(&qqual,QT_TR_NOOP("_Quality:"),-1.,10.); diaElem *elems[]={&menuMode,&bitrate,&quality}; if( diaFactoryRun(QT_TR_NOOP("Vorbis Configuration"),3,elems)) { vorbisParam->mode=(ADM_VORBIS_MODE)mmode; vorbisParam->quality=(float)qqual; return 1; } return 0; }
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // init_sequences // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void init_sequences() { extern Sequence_Wrapper g_sequences; // Local Variables SystemParameters sysParams; char filename[100]; gdk_threads_enter(); // Get GDK lock int Br = BITRATE(); int Bs = BLOCKSIZE(); char* Fn = SEQFILENAME(); int Fs = FS(); gdk_threads_leave(); // Release GDK lock // Set up system parameters sysParams.setSamplingRate(Fs); sysParams.setBlockSize(Bs); sysParams.setBitRate(Br); // Set up the sequences! g_snprintf(filename,100,"../res/%s",Fn); g_sequences.setSystemParameters(&sysParams); g_sequences.load_sequences_from_file(filename); g_sequences.print_sequences(); }
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // load_sequences_button_callback // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void load_sequences_button_callback(GtkWidget * widget, GdkEvent * event) { // Bring globals into scope extern GladeXML* gui; struct stat st; char filename[100]; g_snprintf(filename,100,"../res/%s",SEQFILENAME()); if(!BITRATE()) { alert("Invalid Bitrate","Please enter a valid bitrate greater than zero"); return; } if(stat(filename,&st) != 0 ) { alert("File Not Found", "Check that the filename you entered is correct"); return; } // Show calibration progress window; GtkWidget * window = glade_xml_get_widget(gui, "seq_progress"); gtk_widget_show(window); // Launch loader thread pthread_t loader; pthread_create(&loader, NULL, loader_thread, NULL); }
/* check_mp3_header: returns 0 on success */ static int check_mp3_header (int header) { if (((header & 0xffe00000) == 0xffe00000) && (MPEG_VERSION(header) > 0.0) && (BITRATE(header) > 0) && (SAMPLERATE(header) > 0)) return 0; else if (header == 0x4d4c4c54) /* MLLT */ return 2; else return 1; }
uint8_t configure(void) { uint32_t mmode,ppreset; ELEM_TYPE_FLOAT qqual; VORBIS_encoderParam *vParam=&vorbisParam; mmode=vParam->mode; qqual=(ELEM_TYPE_FLOAT)vParam->quality; diaMenuEntry channelMode[]={ {ADM_VORBIS_VBR, QT_TR_NOOP("VBR"),NULL}, {ADM_VORBIS_QUALITY, QT_TR_NOOP("Quality based"),NULL}}; diaElemMenu menuMode(&mmode, QT_TR_NOOP("_Mode:"), SZT(channelMode),channelMode); diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224) }; diaElemMenu bitrate(&(vParam->bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElemFloat quality(&qqual,QT_TR_NOOP("_Quality:"),-1.,10.); diaElem *elems[]={&menuMode,&bitrate,&quality}; if( diaFactoryRun(QT_TR_NOOP("Vorbis Configuration"),3,elems)) { vParam->mode=(ADM_VORBIS_MODE)mmode; vParam->quality=(float)qqual; return 1; } return 0; }
/** \fn configure */ uint8_t configure (void) { diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224), BITRATE(384) }; diaElemMenu bitrate(&(lavConfig.bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElem *elems[] = {&bitrate}; return diaFactoryRun(QT_TR_NOOP("Aften Configuration"), 1, elems); }
/** \fn configure */ bool configure (CONFcouple **setup) { int ret=0; lav_encoder config=defaultConfig; if(*setup) { ADM_paramLoad(*setup,lav_encoder_param,&config); } diaMenuEntry bitrateM[]={ BITRATE(56), BITRATE(64), BITRATE(80), BITRATE(96), BITRATE(112), BITRATE(128), BITRATE(160), BITRATE(192), BITRATE(224), BITRATE(384) }; diaElemMenu bitrate(&(config.bitrate), QT_TR_NOOP("_Bitrate:"), SZT(bitrateM),bitrateM); diaElem *elems[]={&bitrate}; if ( diaFactoryRun(QT_TR_NOOP(ADM_LAV_MENU" (lav) Configuration"),1,elems)) { if(*setup) delete *setup; *setup=NULL; ADM_paramSave(setup,lav_encoder_param,&config); defaultConfig=config; return true; } return false; }
static size_t mpeg_frame_length (int header) { double bitrate = (double)BITRATE(header) * 1000.0; double samplerate = (double)SAMPLERATE(header); double padding = (double)MPEG_PADDING(header); char layer = MPEG_LAYER(header); size_t frame_length; if (layer == 0x11) frame_length = 144.0 * bitrate/samplerate + padding; else frame_length = (12 * bitrate/samplerate + padding) * 4.0; return (size_t)((layer != 0x11) ? (144.0 * bitrate/samplerate + padding) : (12 * bitrate/samplerate + padding) * 4.0); }
bool configure (CONFcouple **setup) { int ret=0; dcaencoder config=DCAENC_DEFAULT_CONF; if(*setup) { ADM_paramLoad(*setup,dcaencoder_param,&config); }else { config=defaultConfig; } diaMenuEntry bitrateM[]={ BITRATE(320), BITRATE(384), BITRATE(448), BITRATE(512), BITRATE(640) }; diaElemMenu bitrate(&(config.bitrate), QT_TRANSLATE_NOOP("dcaenc","_Bitrate:"), SZT(bitrateM),bitrateM); diaElem *elems[]={&bitrate}; if( diaFactoryRun(QT_TRANSLATE_NOOP("dcaenc","DcaEnc Configuration"),1,elems)) { if(*setup) delete *setup; *setup=NULL; ADM_paramSave(setup,dcaencoder_param,&config); defaultConfig=config; return true; } return false; }
bool configure (CONFcouple **setup) { int ret = 0; char string[400]; uint32_t mmode, ppreset; #define SZT(x) sizeof(x)/sizeof(diaMenuEntry ) #define PX(x) &(config.x) lame_encoder config=defaultConfig; if(*setup) { ADM_paramLoad(*setup,lame_encoder_param,&config); } ppreset = config.preset; diaMenuEntry encodingMode[] = { {ADM_LAME_PRESET_CBR, QT_TRANSLATE_NOOP("lame","CBR"), NULL}, {ADM_LAME_PRESET_ABR, QT_TRANSLATE_NOOP("lame","ABR"), NULL}, }; diaElemMenu Mode (&ppreset, QT_TRANSLATE_NOOP("lame","Bit_rate mode:"), SZT (encodingMode), encodingMode); #define BITRATE(x) {x,QT_TRANSLATE_NOOP("lame",#x)} diaMenuEntry bitrateM[] = { BITRATE (56),//56 BITRATE (64), BITRATE (80), BITRATE (96), BITRATE (112), BITRATE (128), BITRATE (160), BITRATE (192), BITRATE (224), BITRATE (256), BITRATE (320) }; //*** diaElemMenu bitrate (&(config.bitrate), QT_TRANSLATE_NOOP("lame","_Bitrate:"), SZT (bitrateM), bitrateM); diaElemUInteger quality (PX (quality), QT_TRANSLATE_NOOP("lame","_Quality:"), 0, 9); bool reservoir32=config.disableBitReservoir; diaElemToggle reservoir (&reservoir32, QT_TRANSLATE_NOOP("lame","_Disable reservoir:")); diaElem *elems[] = { &Mode, &bitrate,&quality, &reservoir }; if (diaFactoryRun (QT_TRANSLATE_NOOP("lame","LAME Configuration"), 4, elems)) { config.preset=(ADM_LAME_PRESET)ppreset; config.disableBitReservoir=reservoir32; if(*setup) delete *setup; *setup=NULL; ADM_paramSave(setup,lame_encoder_param,&config); defaultConfig=config; return 1; } return 0; }
static int mp3_scan (struct mp3_file *mp3) { int header; int ret; int frames = 0; int last_bitrate = -1; int total_framesize = 0; size_t bitrate; int frame_size; mp3_debug ("mp3_scan: Entering...\n"); if (mp3->frames == 0 || mp3->xdata_size == 0) { /* This calculation will (from time to time) produce a duration that does not agree with the value produced by itunes. */ while (ftell (mp3->fh) < mp3->data_size && (frames < FRAME_COUNT || mp3->vbr)) { fread (&header, 4, 1, mp3->fh); header = big32_2_arch32 (header); if (check_mp3_header (header) != 0) { fseek (mp3->fh, -4, SEEK_CUR); mp3_debug ("mp3_scan: Invalid header %08x %08x Bytes into the file.\n", header, ftell(mp3->fh)); if ((ret = find_first_frame (mp3)) == -1) { mp3_debug ("mp3_scan: An error occured at line: %i\n", __LINE__); /* This is hack-ish, but there might be junk at the end of the file. */ break; } else if (ret == -2) { mp3_debug ("mp3_scan: Ran into MLLT frame.\n"); mp3->data_size -= (mp3->file_size) - ftell (mp3->fh); break; } continue; } bitrate = BITRATE(header); if (!mp3->vbr && (last_bitrate != -1) && (bitrate != last_bitrate)) mp3->vbr = 1; else last_bitrate = bitrate; frame_size = mpeg_frame_length (header); total_framesize += frame_size; fseek (mp3->fh, frame_size - 4, SEEK_CUR); frames++; } /* approximate the number of frames in the file */ if (frames == FRAME_COUNT) { frames = (int)((double)((mp3->data_size - mp3->tagv2_size) * FRAME_COUNT) / (double)total_framesize); total_framesize = mp3->data_size - mp3->tagv2_size; } if (mp3->frames == 0) mp3->frames = frames; if (mp3->xdata_size == 0) mp3->xdata_size = total_framesize; } /* duration (ms) = frames * ms/sec * (samples/frame)/(samples/sec) */ mp3->samples = (long long)samples_per_frame[mp3->version_index][mp3->layer_index] * (long long)mp3->frames; mp3->duration = (int)(1000.0 * (double)mp3->samples/(double)mp3->samplerate); mp3->bitrate = (int)(((float)mp3->xdata_size * 8.0)/(float)mp3->duration); mp3_debug ("mp3_scan: Finished scan. SampleRate: %i, BitRate: %i, Length: %i, Frames: %i.\n", mp3->samplerate, mp3->bitrate, mp3->duration, mp3->frames); if (mp3->samplerate <= 0 || mp3->bitrate <= 0 || mp3->duration <= 0) return -1; return 0; }
static int find_first_frame (struct mp3_file *mp3) { int header; int buffer; int ret; mp3->skippage = 0; while (fread (&header, 4, 1, mp3->fh)) { header = big32_2_arch32 (header); /* MPEG-1 Layer III */ if ((ret = check_mp3_header (header)) == 0) { /* Check for an Xing frame (speeds up parsing) */ fseek (mp3->fh, 32, SEEK_CUR); fread (&buffer, 4, 1, mp3->fh); if (buffer == string_to_int ("Xing")) { int xstart = ftell (mp3->fh); int xflags; /* an mp3 with an Xing header is ALWAYS vbr */ mp3->vbr = 1; fread (&xflags, 4, 1, mp3->fh); mp3_debug ("Xing flags = %08x\n", xflags); if (xflags & 0x00000001) { fread (&buffer, 4, 1, mp3->fh); mp3->frames = buffer; mp3_debug ("MPEG file has %i frames\n", mp3->frames); } if (xflags & 0x00000002) { fread (&buffer, 4, 1, mp3->fh); mp3->xdata_size = buffer; mp3_debug ("MPEG file has %i bytes of data\n", mp3->xdata_size); } fseek (mp3->fh, xstart, SEEK_SET); } mp3->initial_header = header; mp3->samplerate = SAMPLERATE(header); mp3->layer_index = MPEG_LAYER(header); mp3->version_index = MPEG_VERSION(header); mp3_debug ("Inital bitrate = %i\n", BITRATE(header)); fseek (mp3->fh, -40, SEEK_CUR); return 0; } else if (ret == 2) return -2; fseek (mp3->fh, -3, SEEK_CUR); mp3->skippage++; } return -1; }