[C] Ejecutar Un Archivo Wav O Midi Con La Librería De "Allegro"


Objetivo: [C] Ejecutar Un Archivo Wav O Midi Con La Librería De "Allegro"
La librería de Allegro (version 4) ofrece recursos para la programación de juegos. Al ser una librería de medios, es posible utilizar algunas de sus funciones para ejecutar archivos audio de formato WAV.
Se necesita instalar tambien la librería " liballegro4.4-plugin-alsa " !

#include <allegro.h>
#include <stdio.h>

int main() {

SAMPLE *audio;
int pos, vox;

// Inicializa la librería de Allegro "liballeg.so.4.4.2" :
if (install_allegro(SYSTEM_AUTODETECT, NULL, NULL)!= 0) {
allegro_exit();
printf("Error: no se puede inicializar la librería ''allegro' !");
exit(-1);
}

// Instala el modulo de sonido:
if (install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL)!= 0) {
allegro_exit();
printf("Error: imposible la instalación del módulo de sonido !");
exit(-1);
}

// Sube el archivo wav:
audio = load_wav("/direccion/del/file.wav");
if (!audio) {
allegro_exit();
printf("Error: imposible subir el archivo !");
exit(-1);
}

// Extrae informaciónes generales del archivo wav:
printf("Resolución de muestreo: %dbit\n", audio->bits);
printf("Canales de salida: %d\n", audio->stereo*-1+1);
printf("Frecuencia de muestreo: Hz %d\n", audio->freq);

// Ejecuta el file wav:
vox = play_sample(audio, 255, 128, 1000, 0);

do {
pos = voice_get_position(vox);
printf("Ejecución de la muestra de audio n. %d\r", pos);
} while (pos!=-1);


// Terminar:
destroy_sample(audio);
remove_sound();

return 0;

}

Este código debe ser compilado con la siguiente línea de comando:
gcc -o /direccion/del/programa /direccion/del/programa.c `allegro-config --libs`

última edición por vuott el Sabado, 24 Enero 2015, 23:28; editado 6 veces
Perfil MP  
Objetivo: Re: Ejecutar Un Archivo Wav Con La Librería De "Allegro"
Hola vuott:

¿ Aun no hay nada en gambas para poder usar directamente Allegro ?.
Espero que pronto se animen en gambas para la creación de un componente.
Cosas mas difíciles han logrado hacer.

La librería la conocía, darle uso, no.

Saludos

Objetivo: Re: Ejecutar Un Archivo Wav Con La Librería De "Allegro"
Shell escribió:  
¿ Aun no hay nada en gambas para poder usar directamente Allegro ?.

Hola Shell,
puedes haber notado que reporté un código C en lugar del código gambas - ...como suelo hacer - con funciones externas de la librería de "Allegro". Esto es porqué usando en gambas las funciones externas de esta librería no es reproducido algún sonido.
Por eso, ya que el programa C funciona, quise transformar el puro código C en una librería externa que debe ser llamada en gambas. Pero, muuuy extrañamente, aun usando este programa C convertido en una librería externa llamada de gambas, no funciona!
No comprendo de verdad el porque.

Mediante gambas sólo es posible hacer funcionar el puro programa C compilado con la función Shell ... pero esto es un pequeño consuelo!

Perfil MP  
Objetivo: Re: [C] Ejecutar Un Archivo Wav O Midi Con La Librería De "Allegro"
Ejecutar un archivo Midi.
Para la ejecución del archivo MIDI el procedimiento es más complejo, porque es necesario preparar un archivo-banco de sonidos (soundfont bank), denominado patches.dat, que permita la reproducción de sonido de los datos Midi.
Este archivo es utilizado por un driver autónomo wavetable propio de Allegro, llamado DigiMid.
Es posibile crear el archivo patches.dat a partir de un archivo-banco de sonidos .sf2 ejecutando el comando pat2dat en il Terminal, como sigue:
pat2dat -o patches.dat /direccion/del/soundfont_bank.sf2 -8
Este archivo patches.dat debe insertarse preferentemente en Home !
Obtenido, sin embargo, el archivo soundfont, para ejecutar un archivo Midi se compilarán y ejecutará el siguiente código de 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;

}

Este código debe ser compilado con la siguiente línea de comando:
gcc -o /direccion/del/programa /direccion/del/programa.c `allegro-config --libs`

...para ejecutar los archivos Midi tenemos que utilizar la libreria 'allegro4' !

última edición por vuott el Miercoles, 23 Abril 2014, 16:19; editado 6 veces
Perfil MP  
Objetivo: Re: [C] Ejecutar Un Archivo Wav O Midi Con La Librería De "Allegro"
Para ejecutar un fichero audio con la librería de "Allegro 5", es posible utilizar este simple codigo:

#include <stdio>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>


int main(int argc, char *argv[]){

ALLEGRO_SAMPLE *sample = NULL;
unsigned int pos, frequenza;


if(!al_init()){
fprintf(stderr, "Impossible inicializar la libreria Allegro 5 !\n");
return -1;
}

if(!al_install_audio()){
fprintf(stderr, "Impossible inicializar el audio!\n");
return -1;
}

if(!al_init_acodec_addon()){
fprintf(stderr, "Impossible inicializar audio codecs !\n");
return -1;
}

if (!al_reserve_samples(1)){
fprintf(stderr, "Impossible reservar las muestras audio!\n");
return -1;
}

sample = al_load_sample(argv[1]);

if (!sample){
printf( "Archivo audio no cargado !\n" );
return -1;
}

frequenza = al_get_sample_frequency(sample);
printf("Frecuencia: Hz %d\n", frequenza);

pos = al_get_sample_length(sample);

printf("Duración: %.2f segundos\n", (float)pos / frequenza);

/* Ejecuta el fichero audio. */
al_play_sample(sample, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL);

/* Permite ejecutar para toda la duración del archivo. */
al_rest(pos / frequenza);

al_destroy_sample(sample);

return 0;

}

Este código debe ser compilado con la siguiente línea de comando:
gcc -o /direccion/del/programa /direccion/del/programa.c -L/usr/local/lib -lallegro -lallegro_main -lallegro_audio -lallegro_acodec

última edición por vuott el Viernes, 06 Febrero 2015, 13:21; editado 1 vez
Perfil MP  
Objetivo: Re: Ejecutar Un Archivo Wav Con La Librería De "Allegro"
Shell escribió:  

¿ Aun no hay nada en gambas para poder usar directamente Allegro ?.


Es posible utilizando la versión 5 de la librería de Allegro:

http://foro.gambas-es.org/viewtopic.php?f=5&p=24966

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 1.7658s (PHP: -87% SQL: 187%)
Consultas SQL: 48 - Debug off - GZIP Activado