https://foro.gambas-es.org/viewtopic.php?f=17&t=3756&p=21428#p21428
-----------------------------------
vuott
Miercoles, 16 Abril 2014, 15:11

Re: [C] Ejecutar Un Archivo Wav O Midi Con La Librería De "Allegro"
-----------------------------------
[b][color=maroon]Ejecutar un archivo Midi.[/color][/b]
Para la ejecución del archivo MIDI el procedimiento es más complejo, porque es necesario preparar un archivo-banco de sonidos ([i]soundfont bank[/i]), denominado [i]patches.dat[/i], que permita la reproducción de sonido de los datos Midi.
Este archivo es utilizado por un [i]driver[/i] autónomo [i]wavetable[/i] propio de Allegro, llamado [i]DigiMid[/i].
Es posibile crear el archivo [i]patches.dat[/i] a partir de un archivo-banco de sonidos [i].sf2[/i] ejecutando el comando [i]pat2dat[/i] en il Terminal, como sigue:
[i][color=brown]pat2dat -o patches.dat /direccion/del/soundfont_bank.sf2 -8[/color][/i]
Este archivo [i]patches.dat[/i]  debe insertarse preferentemente en  [i]Home[/i] !
Obtenido, sin embargo, el archivo [i]soundfont[/i], para ejecutar un archivo Midi se compilarán y ejecutará el siguiente código de C:
[code linenumbers=false syntax=c]#include <allegro>   
#include <stdio>   
  
int main() {  
  
  MIDI *mid;  
  int dur;  
  
// Inicializa la libreria 'allegro':  
  if (install_allegro(SYSTEM_AUTODETECT, NULL, NULL)!= 0) {  
     allegro_exit();   
     printf("Error: no se puede inicializar la librería 'allegro' !");  
     exit(-1);  
  }  
  
// Instala el temporizador interno de la libreria 'allegro':  
  install_timer();   
  
// Instala el modulo de sonidos:  
  if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL)!= 0) {  
     allegro_exit();   
     printf("Error: imposible la instalación del módulo de sonido Midi !");  
     exit(-1);  
  }  
  
// Sube el archivo Midi:  
  mid = load_midi("/direccion/del/file.mid");   
  if (!mid) {  
     allegro_exit();   
     printf("Error: impossible cargar el file !");  
     exit(-1);  
  }  
  
//  Extrae la duración del archivo Midi:
  dur = get_midi_length(mid);  
  printf("Duración del file Midi: %d segundos\n", dur);  
  
// Ejecuta el file Midi:   
  if (play_midi(mid, 0)!= 0) {  
     allegro_exit();   
     printf("Error: impossible ejecutar el file Midi !");  
     exit(-1);  
  }  
  
  do  
     printf("Segundos transcurridos: %ld\r", midi_time);  
  while (midi_time != dur);  
  
  
// Terminando...:  
  destroy_midi(mid);   
      
  return 0;  
  
}[/code]
Este código debe ser compilado con la siguiente línea de comando:
[i][color=brown]gcc -o /direccion/del/programa /direccion/del/programa.c `allegro-config --libs`[/color][/i]

...para ejecutar los archivos Midi tenemos que utilizar la libreria '[color=indigo]allegro[b]4[/b][/color]' !


