void SynthSequencer::engineActivityChanged() { if (m_engine) { if (m_engine->active()) { //create m_synthID = fluid_sequencer_register_fluidsynth(m_sequencer, m_engine->synthHandle()); m_clientID = fluid_sequencer_register_client(m_sequencer, "SynthSequencer", sequencer_callback, this); qDebug("created sequencer"); } else { //destroy m_synthID = 0; } } }
int main (int argc, char *argv[]) { int n; fluid_settings_t *settings; settings = new_fluid_settings (); if (argc < 2) { usage (argv[0]); } else { /* create the synth, driver and sequencer instances */ synth = new_fluid_synth (settings); audiodriver = new_fluid_audio_driver (settings, synth); sequencer = new_fluid_sequencer (); /* register the synth with the sequencer */ synth_destination = fluid_sequencer_register_fluidsynth (sequencer, synth); /* register the client name and callback */ client_destination = fluid_sequencer_register_client (sequencer, "fluidsynth_metronome", sequencer_callback, NULL); /* load a SoundFont */ n = fluid_synth_sfload (synth, argv[1], 1); if (n != -1) { if (argc > 2) { n = atoi (argv[2]); if (n > 0) pattern_size = n; } if (argc > 3) { n = atoi (argv[3]); if (n > 0) note_duration = 60000 / n; } /* get the current time in ticks */ time_marker = fluid_sequencer_get_tick (sequencer); /* schedule patterns */ schedule_pattern (); schedule_timer_event (); schedule_pattern (); /* wait for user input */ printf ("press <Enter> to stop\n"); n = getchar (); } /* clean and exit */ delete_fluid_sequencer (sequencer); delete_fluid_audio_driver (audiodriver); delete_fluid_synth (synth); } delete_fluid_settings (settings); return 0; }
/** * Registers a synthesizer as a destination client of the given sequencer. * The \a synth is registered with the name "fluidsynth". * @param seq Sequencer instance * @param synth Synthesizer instance * @returns Sequencer client ID, or #FLUID_FAILED on error. */ short fluid_sequencer_register_fluidsynth (fluid_sequencer_t* seq, fluid_synth_t* synth) { fluid_seqbind_t* seqbind; seqbind = FLUID_NEW(fluid_seqbind_t); if (seqbind == NULL) { fluid_log(FLUID_PANIC, "sequencer: Out of memory\n"); return FLUID_FAILED; } seqbind->synth = synth; seqbind->seq = seq; seqbind->sample_timer = NULL; seqbind->client_id = -1; /* set up the sample timer */ if (!fluid_sequencer_get_use_system_timer(seq)) { seqbind->sample_timer = new_fluid_sample_timer(synth, fluid_seqbind_timer_callback, (void *) seqbind); if (seqbind->sample_timer == NULL) { fluid_log(FLUID_PANIC, "sequencer: Out of memory\n"); delete_fluid_seqbind(seqbind); return FLUID_FAILED; } } /* register fluidsynth itself */ seqbind->client_id = fluid_sequencer_register_client(seq, "fluidsynth", fluid_seq_fluidsynth_callback, (void *)seqbind); if (seqbind->client_id == -1) { delete_fluid_seqbind(seqbind); return FLUID_FAILED; } return seqbind->client_id; }
/* registering the synth */ short fluid_sequencer_register_fluidsynth(fluid_sequencer_t* seq, fluid_synth_t* synth) { /* register fluidsynth itself */ return fluid_sequencer_register_client(seq, "fluidsynth", fluid_seq_fluidsynth_callback, (void *)synth); }