Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
bool MusicDriver_FluidSynth::IsSongPlaying()
{
	if (!_midi.player) return false;

	return fluid_player_get_status(_midi.player) == FLUID_PLAYER_PLAYING;
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
	bool is_end() const {
		return fluid_player_get_status(source_.player.get()) != FLUID_PLAYER_PLAYING;
	}