/* fluid_settings_foreach function for displaying option help "-o help" */ static void settings_foreach_func (void *data, char *name, int type) { fluid_settings_t *settings = (fluid_settings_t *)data; double dmin, dmax, ddef; int imin, imax, idef, hints; char *defstr; int count; OptionBag bag; switch (type) { case FLUID_NUM_TYPE: fluid_settings_getnum_range (settings, name, &dmin, &dmax); ddef = fluid_settings_getnum_default (settings, name); printf ("%-24s FLOAT [min=%0.3f, max=%0.3f, def=%0.3f]\n", name, dmin, dmax, ddef); break; case FLUID_INT_TYPE: fluid_settings_getint_range (settings, name, &imin, &imax); idef = fluid_settings_getint_default (settings, name); hints = fluid_settings_get_hints (settings, name); if (!(hints & FLUID_HINT_TOGGLED)) { printf ("%-24s INT [min=", name); print_pretty_int (imin); printf (", max="); print_pretty_int (imax); printf (", def="); print_pretty_int (idef); printf ("]\n"); } else printf ("%-24s BOOL [def=%s]\n", name, idef ? "True" : "False"); break; case FLUID_STR_TYPE: printf ("%-24s STR", name); defstr = fluid_settings_getstr_default (settings, name); count = fluid_settings_option_count (settings, name); if (defstr || count > 0) { if (defstr && count > 0) printf (" [def='%s' vals:", defstr); else if (defstr) printf (" [def='%s'", defstr); else printf (" [vals:"); if (count > 0) { bag.count = count; bag.curindex = 0; fluid_settings_foreach_option (settings, name, &bag, settings_option_foreach_func); } printf ("]\n"); } else printf ("\n"); break; case FLUID_SET_TYPE: printf ("%-24s SET\n", name); break; } }
sf2Instrument::sf2Instrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &sf2player_plugin_descriptor ), m_srcState( NULL ), m_font( NULL ), m_fontId( 0 ), m_filename( "" ), m_lastMidiPitch( -1 ), m_lastMidiPitchRange( -1 ), m_channel( 1 ), m_bankNum( 0, 0, 999, this, tr("Bank") ), m_patchNum( 0, 0, 127, this, tr("Patch") ), m_gain( 1.0f, 0.0f, 5.0f, 0.01f, this, tr( "Gain" ) ), m_reverbOn( false, this, tr( "Reverb" ) ), m_reverbRoomSize( FLUID_REVERB_DEFAULT_ROOMSIZE, 0, 1.0, 0.01f, this, tr( "Reverb room size" ) ), m_reverbDamping( FLUID_REVERB_DEFAULT_DAMP, 0, 1.0, 0.01, this, tr( "Reverb damping" ) ), m_reverbWidth( FLUID_REVERB_DEFAULT_WIDTH, 0, 1.0, 0.01f, this, tr( "Reverb width" ) ), m_reverbLevel( FLUID_REVERB_DEFAULT_LEVEL, 0, 1.0, 0.01f, this, tr( "Reverb level" ) ), m_chorusOn( false, this, tr( "Chorus" ) ), m_chorusNum( FLUID_CHORUS_DEFAULT_N, 0, 10.0, 1.0, this, tr( "Chorus voices" ) ), m_chorusLevel( FLUID_CHORUS_DEFAULT_LEVEL, 0, 10.0, 0.01, this, tr( "Chorus level" ) ), m_chorusSpeed( FLUID_CHORUS_DEFAULT_SPEED, 0.29, 5.0, 0.01, this, tr( "Chorus speed" ) ), m_chorusDepth( FLUID_CHORUS_DEFAULT_DEPTH, 0, 46.0, 0.05, this, tr( "Chorus depth" ) ) { for( int i = 0; i < 128; ++i ) { m_notesRunning[i] = 0; } #if QT_VERSION_CHECK(FLUIDSYNTH_VERSION_MAJOR, FLUIDSYNTH_VERSION_MINOR, FLUIDSYNTH_VERSION_MICRO) >= QT_VERSION_CHECK(1,1,9) // Deactivate all audio drivers in fluidsynth const char *none[] = { NULL }; fluid_audio_driver_register( none ); #endif m_settings = new_fluid_settings(); //fluid_settings_setint( m_settings, (char *) "audio.period-size", engine::mixer()->framesPerPeriod() ); // This is just our starting instance of synth. It is recreated // everytime we load a new soundfont. m_synth = new_fluid_synth( m_settings ); #if FLUIDSYNTH_VERSION_MAJOR >= 2 // Get the default values from the setting double settingVal; fluid_settings_getnum_default(m_settings, "synth.reverb.room-size", &settingVal); m_reverbRoomSize.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.reverb.damping", &settingVal); m_reverbDamping.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.reverb.width", &settingVal); m_reverbWidth.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.reverb.level", &settingVal); m_reverbLevel.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.chorus.nr", &settingVal); m_chorusNum.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.chorus.level", &settingVal); m_chorusLevel.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.chorus.speed", &settingVal); m_chorusSpeed.setInitValue(settingVal); fluid_settings_getnum_default(m_settings, "synth.chorus.depth", &settingVal); m_chorusDepth.setInitValue(settingVal); #endif loadFile( ConfigManager::inst()->defaultSoundfont() ); updateSampleRate(); updateReverbOn(); updateReverb(); updateChorusOn(); updateChorus(); updateGain(); connect( &m_bankNum, SIGNAL( dataChanged() ), this, SLOT( updatePatch() ) ); connect( &m_patchNum, SIGNAL( dataChanged() ), this, SLOT( updatePatch() ) ); connect( Engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSampleRate() ) ); // Gain connect( &m_gain, SIGNAL( dataChanged() ), this, SLOT( updateGain() ) ); // Reverb connect( &m_reverbOn, SIGNAL( dataChanged() ), this, SLOT( updateReverbOn() ) ); connect( &m_reverbRoomSize, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbDamping, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbWidth, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); connect( &m_reverbLevel, SIGNAL( dataChanged() ), this, SLOT( updateReverb() ) ); // Chorus connect( &m_chorusOn, SIGNAL( dataChanged() ), this, SLOT( updateChorusOn() ) ); connect( &m_chorusNum, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusLevel, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusSpeed, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); connect( &m_chorusDepth, SIGNAL( dataChanged() ), this, SLOT( updateChorus() ) ); InstrumentPlayHandle * iph = new InstrumentPlayHandle( this, _instrument_track ); Engine::mixer()->addPlayHandle( iph ); }