int DM_Music_Get(int prop, void* ptr) { switch(prop) { case MUSIP_ID: if(ptr) { strcpy((char*) ptr, "FluidSynth/Ext (MIDI only)"); return true; } break; case MUSIP_PLAYING: { if(!fsPlayer) return false; int playing = (fluid_player_get_status(fsPlayer) == FLUID_PLAYER_PLAYING); DSFLUIDSYNTH_TRACE("Music_Get: MUSIP_PLAYING = " << playing); return playing; } default: break; } return false; }
void MidiPlayer::play() { int status = fluid_player_get_status(player); if (status == FLUID_PLAYER_READY) fluid_player_play(player); if (true && status == FLUID_PLAYER_DONE) { fluid_player_stop(player); delete_fluid_player(player); player = new_fluid_player(synth); if (player == NULL) { //setError("Failed to play MIDI."); return; } fluid_player_add_mem(player, midi.c_str(), midi.size()); fluid_player_play(player); } _is_playing = true; //if (fluid_player_get_status(player) != FLUID_PLAYER_DONE) // SoundStream::play(); /* play the midi files, if any */ //fluid_player_play(player); /* wait for playback termination */ //fluid_player_join(player); }
static void fast_render_loop(fluid_settings_t* settings, fluid_synth_t* synth, fluid_player_t* player) { fluid_file_renderer_t* renderer; renderer = new_fluid_file_renderer (synth); if (!renderer) return; while (fluid_player_get_status(player) == FLUID_PLAYER_PLAYING) { if (fluid_file_renderer_process_block(renderer) != FLUID_OK) { break; } } delete_fluid_file_renderer(renderer); }
bool MusicDriver_FluidSynth::IsSongPlaying() { if (!_midi.player) return false; return fluid_player_get_status(_midi.player) == FLUID_PLAYER_PLAYING; }
static void fluidsynth_file_decode(struct decoder *decoder, const char *path_fs) { char setting_sample_rate[] = "synth.sample-rate"; /* char setting_verbose[] = "synth.verbose"; char setting_yes[] = "yes"; */ fluid_settings_t *settings; fluid_synth_t *synth; fluid_player_t *player; int ret; enum decoder_command cmd; /* set up fluid settings */ settings = new_fluid_settings(); if (settings == NULL) return; fluid_settings_setnum(settings, setting_sample_rate, sample_rate); /* fluid_settings_setstr(settings, setting_verbose, setting_yes); */ /* create the fluid synth */ synth = new_fluid_synth(settings); if (synth == NULL) { delete_fluid_settings(settings); return; } ret = fluid_synth_sfload(synth, soundfont_path, true); if (ret < 0) { g_warning("fluid_synth_sfload() failed"); delete_fluid_synth(synth); delete_fluid_settings(settings); return; } /* create the fluid player */ player = new_fluid_player(synth); if (player == NULL) { delete_fluid_synth(synth); delete_fluid_settings(settings); return; } ret = fluid_player_add(player, path_fs); if (ret != 0) { g_warning("fluid_player_add() failed"); delete_fluid_player(player); delete_fluid_synth(synth); delete_fluid_settings(settings); return; } /* start the player */ ret = fluid_player_play(player); if (ret != 0) { g_warning("fluid_player_play() failed"); delete_fluid_player(player); delete_fluid_synth(synth); delete_fluid_settings(settings); return; } /* initialization complete - announce the audio format to the MPD core */ struct audio_format audio_format; audio_format_init(&audio_format, sample_rate, SAMPLE_FORMAT_S16, 2); decoder_initialized(decoder, &audio_format, false, -1); while (fluid_player_get_status(player) == FLUID_PLAYER_PLAYING) { int16_t buffer[2048]; const unsigned max_frames = G_N_ELEMENTS(buffer) / 2; /* read samples from fluidsynth and send them to the MPD core */ ret = fluid_synth_write_s16(synth, max_frames, buffer, 0, 2, buffer, 1, 2); if (ret != 0) break; cmd = decoder_data(decoder, NULL, buffer, sizeof(buffer), 0); if (cmd != DECODE_COMMAND_NONE) break; } /* clean up */ fluid_player_stop(player); fluid_player_join(player); delete_fluid_player(player); delete_fluid_synth(synth); delete_fluid_settings(settings); }
bool is_end() const { return fluid_player_get_status(source_.player.get()) != FLUID_PLAYER_PLAYING; }