public MultiBandCompressor( Backend.Quality quality ) { switch (quality) { case Backend.Quality.HIGH: _crossover = new StereoCrossover( 190.0, 2200.0, StereoCrossover.Quality.HIGH ); break; case Backend.Quality.MEDIUM: _crossover = new StereoCrossover( 190.0, 2200.0, StereoCrossover.Quality.MEDIUM ); break; case Backend.Quality.LOW: _crossover = new StereoCrossover( 190.0, 2200.0, StereoCrossover.Quality.LOW ); break; default: throw new ApplicationException( "Unexpected case in switch" ); } // Default levels: compressThresholdBass = 9000; // 12000 compressThresholdMid = 5775; // 7000 compressThresholdTreble = 3375; // 4500 // Allow overshoot in the limiter, as long as we are using // soft clipping. _limiter.limit = 49150.0; }
/// /// Call this to create the singleton object /// public static void Init( int desiredQueueSize, string connectionString, Quality qualityLevel, CompressionType compressType, string metadataProgram ) { _theBackend = new Backend( desiredQueueSize, connectionString, qualityLevel, compressType, metadataProgram ); }
/// /// \warning When creating an object for remoting, call Init() and /// access the singleton returned by theBackend. This constructor /// is public only for use by non-remoting configurations. /// public Backend( int desiredQueueSize, string connectionString, Quality qualityLevel, Backend.CompressionType compressionType, string metadataFileName ) { _Trace( "[Backend]" ); _qualityLevel = qualityLevel; _compressionType = compressionType; _desiredQueueSize = desiredQueueSize; _connectionString = connectionString; if (null == _connectionString) throw new ApplicationException( "Engine is not properly initialized by the server" ); _database = new StatusDatabase( _connectionString ); _metadataSender = new MetadataSender( metadataFileName ); // Todo: initialize compressor from stored settings in database _compressor = _LoadCompressor(); // Get defaults from this kind of thing? // string bufferSize = // ConfigurationSettings.AppSettings ["BufferSize"]; // Set up default buffering for the audio engine _player = new Player(); _player.bufferSize = 44100 / 8 ; _player.buffersInQueue = 40; _player.buffersToPreload = 20; // Set up callbacks _player.OnTrackFinished += new TrackFinishedHandler( _TrackFinishedCallback ); _player.OnTrackPlayed += new TrackStartingHandler( _TrackStartingCallback ); _player.OnReadBuffer += new ReadBufferHandler( _TrackReadCallback ); }