/*------------------------------------------------------------------------------ * Initialize the object *----------------------------------------------------------------------------*/ void DarkIce :: init ( const Config & config ) throw ( Exception ) { unsigned int bufferSecs; const ConfigSection * cs; const char * str; unsigned int sampleRate; unsigned int bitsPerSample; unsigned int channel; bool reconnect; const char * device; const char * jackClientName; // the [general] section if ( !(cs = config.get( "general")) ) { throw Exception( __FILE__, __LINE__, "no section [general] in config"); } str = cs->getForSure( "duration", " missing in section [general]"); duration = Util::strToL( str); str = cs->getForSure( "bufferSecs", " missing in section [general]"); bufferSecs = Util::strToL( str); if (bufferSecs == 0) { throw Exception(__FILE__, __LINE__, "setting bufferSecs to 0 not supported"); } str = cs->get( "reconnect"); reconnect = str ? (Util::strEq( str, "yes") ? true : false) : true; // real-time scheduling is enabled by default str = cs->get( "realtime" ); enableRealTime = str ? (Util::strEq( str, "yes") ? true : false) : true; // the [input] section if ( !(cs = config.get( "input")) ) { throw Exception( __FILE__, __LINE__, "no section [input] in config"); } str = cs->getForSure( "sampleRate", " missing in section [input]"); sampleRate = Util::strToL( str); str = cs->getForSure( "bitsPerSample", " missing in section [input]"); bitsPerSample = Util::strToL( str); str = cs->getForSure( "channel", " missing in section [input]"); channel = Util::strToL( str); device = cs->getForSure( "device", " missing in section [input]"); jackClientName = cs->get ( "jackClientName"); dsp = AudioSource::createDspSource( device, jackClientName, sampleRate, bitsPerSample, channel ); encConnector = new MultiThreadedConnector( dsp.get(), reconnect ); noAudioOuts = 0; configIceCast( config, bufferSecs); configIceCast2( config, bufferSecs); configShoutCast( config, bufferSecs); configFileCast( config); }
/*------------------------------------------------------------------------------ * Initialize the object *----------------------------------------------------------------------------*/ void DarkIce :: init ( const Config & config ) throw ( Exception ) { unsigned int bufferSecs; const ConfigSection * cs; const char * str; unsigned int sampleRate; unsigned int bitsPerSample; unsigned int channel; const char * device; // the [general] section if ( !(cs = config.get( "general")) ) { throw Exception( __FILE__, __LINE__, "no section [general] in config"); } str = cs->getForSure( "duration", " missing in section [general]"); duration = Util::strToL( str); str = cs->getForSure( "bufferSecs", " missing in section [general]"); bufferSecs = Util::strToL( str); // the [input] section if ( !(cs = config.get( "input")) ) { throw Exception( __FILE__, __LINE__, "no section [general] in config"); } str = cs->getForSure( "sampleRate", " missing in section [input]"); sampleRate = Util::strToL( str); str = cs->getForSure( "bitsPerSample", " missing in section [input]"); bitsPerSample = Util::strToL( str); str = cs->getForSure( "channel", " missing in section [input]"); channel = Util::strToL( str); device = cs->getForSure( "device", " missing in section [input]"); dsp = new DspSource( device, sampleRate, bitsPerSample, channel ); encConnector = new Connector( dsp.get()); noAudioOuts = 0; configIceCast( config, bufferSecs); configIceCast2( config, bufferSecs); configShoutCast( config, bufferSecs); configFileCast( config); }
/*------------------------------------------------------------------------------ * Initialize the object *----------------------------------------------------------------------------*/ void DarkIce :: init ( const Config & config ) throw ( Exception ) { unsigned int bufferSecs; const ConfigSection * cs; const char * str; unsigned int sampleRate; unsigned int bitsPerSample; unsigned int channel; bool reconnect; const char * device; const char * jackClientName; const char * paSourceName; // the [general] section if ( !(cs = config.get( "general")) ) { throw Exception( __FILE__, __LINE__, "no section [general] in config"); } str = cs->getForSure( "duration", " missing in section [general]"); duration = Util::strToL( str); str = cs->getForSure( "bufferSecs", " missing in section [general]"); bufferSecs = Util::strToL( str); if (bufferSecs == 0) { throw Exception(__FILE__, __LINE__, "setting bufferSecs to 0 not supported"); } str = cs->get( "reconnect"); reconnect = str ? (Util::strEq( str, "yes") ? true : false) : true; // real-time scheduling is enabled by default str = cs->get( "realtime" ); enableRealTime = str ? (Util::strEq( str, "yes") ? true : false) : true; // get realtime scheduling priority. If unspecified, set it to 4. // Why 4? jackd's default priority is 10, jackd client threads run // at 5, so make the encoder thread use 4. jackd automatically sets // the process callback priority to the right value, so all we have // to care about is the encoder priority. str = cs->get( "rtprio" ); realTimeSchedPriority = (str != NULL) ? Util::strToL( str ) : 4; // the [input] section if ( !(cs = config.get( "input")) ) { throw Exception( __FILE__, __LINE__, "no section [input] in config"); } str = cs->getForSure( "sampleRate", " missing in section [input]"); sampleRate = Util::strToL( str); str = cs->getForSure( "bitsPerSample", " missing in section [input]"); bitsPerSample = Util::strToL( str); str = cs->getForSure( "channel", " missing in section [input]"); channel = Util::strToL( str); device = cs->getForSure( "device", " missing in section [input]"); jackClientName = cs->get ( "jackClientName"); paSourceName = cs->get ( "paSourceName"); dsp = AudioSource::createDspSource( device, jackClientName, paSourceName, sampleRate, bitsPerSample, channel ); encConnector = new MultiThreadedConnector( dsp.get(), reconnect ); noAudioOuts = 0; configIceCast( config, bufferSecs); configIceCast2( config, bufferSecs); configShoutCast( config, bufferSecs); configFileCast( config); }