fluidsynth_simple.c
上传用户:tjmskj2
上传日期:2020-08-17
资源大小:577k
文件大小:2k
源码类别:

midi

开发平台:

C/C++

  1. /* FluidSynth Simple - An example of using fluidsynth
  2.  *
  3.  * This code is in the public domain.
  4.  *
  5.  * To compile:
  6.  *   gcc -g -O -o fluidsynth_simple fluidsynth_simple.c -lfluidsynth
  7.  *
  8.  * To run
  9.  *   fluidsynth_simple soundfont
  10.  *
  11.  * [Peter Hanappe]
  12.  */
  13. #include <stdio.h>
  14. #include <fluidsynth.h>
  15. int main(int argc, char** argv) 
  16. {
  17. fluid_settings_t* settings;
  18. fluid_synth_t* synth = NULL;
  19. fluid_audio_driver_t* adriver = NULL;
  20. int err = 0;
  21. if (argc != 2) {
  22. fprintf(stderr, "Usage: fluidsynth_simple [soundfont]n");
  23. return 1;
  24. }
  25. /* Create the settings object. This example uses the default
  26.  * values for the settings. */
  27. settings = new_fluid_settings();
  28. if (settings == NULL) {
  29. fprintf(stderr, "Failed to create the settingsn");
  30. err = 2;
  31. goto cleanup;
  32. }
  33.   
  34. /* Create the synthesizer */
  35. synth = new_fluid_synth(settings);
  36. if (synth == NULL) {
  37. fprintf(stderr, "Failed to create the synthesizern");
  38. err = 3;
  39. goto cleanup;
  40. }
  41. /* Load the soundfont */
  42. if (fluid_synth_sfload(synth, argv[1], 1) == -1) {
  43. fprintf(stderr, "Failed to load the SoundFontn");
  44. err = 4;
  45. goto cleanup;
  46. }
  47. /* Create the audio driver. As soon as the audio driver is
  48.  * created, the synthesizer can be played. */
  49. adriver = new_fluid_audio_driver(settings, synth);
  50. if (adriver == NULL) {
  51. fprintf(stderr, "Failed to create the audio drivern");
  52. err = 5;
  53. goto cleanup;
  54. }
  55. /* Play a note */
  56. fluid_synth_noteon(synth, 0, 60, 100);
  57. printf("Press "Enter" to stop: ");
  58. fgetc(stdin);
  59. printf("donen");
  60.  cleanup:
  61. if (adriver) {
  62. delete_fluid_audio_driver(adriver);
  63. }
  64. if (synth) {
  65. delete_fluid_synth(synth);
  66. }
  67. if (settings) {
  68. delete_fluid_settings(settings);
  69. }
  70. return err;
  71. }