void
fluid_portaudio_driver_settings (fluid_settings_t *settings)
{
  const PaDeviceInfo *deviceInfo;
  int numDevices;
  PaError err;
  int i;
  char tmp_setting__name[1024];

  fluid_settings_register_str (settings, "audio.portaudio.device", PORTAUDIO_DEFAULT_DEVICE, 0, NULL, NULL);
  fluid_settings_add_option (settings, "audio.portaudio.device", PORTAUDIO_DEFAULT_DEVICE);
  snprintf(tmp_setting__name, sizeof(tmp_setting__name), "audio.portaudio.%s.channels", PORTAUDIO_DEFAULT_DEVICE);
  fluid_settings_register_int (settings, tmp_setting__name, 2, 0, 32, 0, NULL, NULL);
  fluid_settings_register_int (settings, "audio.portaudio.channelL", 0, 0, 32, 0, NULL, NULL);
  fluid_settings_register_int (settings, "audio.portaudio.channelR", 1, 0, 32, 1, NULL, NULL);

  err = Pa_Initialize();

  if (err != paNoError)
  {
    FLUID_LOG (FLUID_ERR, "Error initializing PortAudio driver: %s",
               Pa_GetErrorText (err));
    return;
  }

  numDevices = Pa_GetDeviceCount();

  if (numDevices < 0)
  {
    FLUID_LOG (FLUID_ERR, "PortAudio returned unexpected device count %d", numDevices);
    return;
  }

  for (i = 0; i < numDevices; i++)
  {
    deviceInfo = Pa_GetDeviceInfo (i);
    if ( deviceInfo->maxOutputChannels >= 2 )
      fluid_settings_add_option (settings, "audio.portaudio.device",
                                 deviceInfo->name);
		{
			int nb_outputs = deviceInfo->maxOutputChannels;
		  snprintf(tmp_setting__name, sizeof(tmp_setting__name), "audio.portaudio.%s.channels", deviceInfo->name);
		  fluid_settings_register_int (settings, tmp_setting__name, nb_outputs, 0, 32, 0, NULL, NULL);
		}
  }

  /* done with PortAudio for now, may get reopened later */
  err = Pa_Terminate();

  if (err != paNoError)
    printf ("PortAudio termination error: %s\n", Pa_GetErrorText (err) );
}
示例#2
0
/**
 * Registers settings related to the MIDI player
 */
void fluid_player_settings(fluid_settings_t* settings)
{
	/* player.timing-source can be either "system" (use system timer) 
	or "sample" (use timer based on number of written samples) */
	fluid_settings_register_str(settings, "player.timing-source", "sample", 0, NULL, NULL);
	fluid_settings_add_option(settings, "player.timing-source", "sample");
	fluid_settings_add_option(settings, "player.timing-source", "system");

	/* Selects whether the player should reset the synth between songs, or not. */
	fluid_settings_register_int(settings, "player.reset-synth", 1, 0, 1,
                                    FLUID_HINT_TOGGLED, NULL, NULL);
}