bool init(MidiFormat format, const char* patchLoc) { free(); s_mutex = Mutex::create(); s_midiFormat = format; if (s_midiFormat == MFMT_GUS_PATCH) { s_volume = c_volumeScale[0]; s_sampleRate = 32072.0; if (WildMidi_Init(patchLoc, 32072, WM_MO_ENHANCED_RESAMPLING) >= 0) { s_initialized = true; WildMidi_MasterVolume(100); return true; } } else if (s_midiFormat == MFMT_SOUND_FONT) { s_volume = c_volumeScale[1]; if (!loadFluidsythDLL()) { LOG( LOG_ERROR, "cannot find or load the \"libfluidsynth\" dynamic library." ); return false; } s_fluidSettings = new_fluid_settings(); fluid_settings_setstr(s_fluidSettings, "player.timing-source", "sample"); fluid_settings_setstr(s_fluidSettings, "synth.lock-memory", 0); fluid_settings_setstr(s_fluidSettings, "synth.chorus-active", "0"); s_fluidSynth = new_fluid_synth(s_fluidSettings); if (fluid_synth_sfload(s_fluidSynth, patchLoc, 1) < 0) { LOG( LOG_ERROR, "cannot load sound font \"%s\"", patchLoc ); unloadFluidsynthDLL(); return false; } s_fluidSeq = new_fluid_sequencer2(false); fluid_sequencer_register_fluidsynth(s_fluidSeq, s_fluidSynth); fluid_settings_getnum(s_fluidSettings, "synth.sample-rate", &s_sampleRate); s_initialized = true; s_fluidPlayer = new_fluid_player(s_fluidSynth); return true; } return false; }
void MidiPlayerThread::setVolume( int volume ) { // volume may be from 0 to 127.... (in mplayer to 100) qDebug() << "MidiPlayerThread::setVolume: volume = " << volume; WildMidi_MasterVolume( volume ); }