Programación General > C/C++
Que me recomiendan para programar un "piano"
(1/1)
Alfonsos1:
Supongamos que quiero hacer un teclado de 10 notas, para ello deberia tener 10 archivos de sonido:
nota1.wav
nota2.wav
...
nota10.wav
si se presiona una tecla deberia sonar una nota:
tecla "1" --- nota1.wav
tecla "2" --- nota2.wav
...
tecla "0" --- nota 10.wav
Esto es fasil de programar, yo lo hice con la libreria allegro de C++. Pero no anda bien cuando empiezo a tocar notas rapido. Por ejemplo si toco una misma nota varias veses a una velocidad rapida (por ejmplo 6 veces por seg) empieza a saltearce notas (como si no le diera la capasidad para hacer sonar todas las notas), probe achicando el tamaño de los archivos wav pero no se soluciono el problema.
Supongo que C++ al ser un lenguaje de bajo nivel es bueno para programar este tipo de cosas, sin embargo no se si allegro sea una buena opcion.
¿allegro es una libreria eficiente o buena para programar lo que quiero?, sino que libreria puedo usar?
¿saben el porque de mi problema o la solucion?
Epa:
en que plataforma estas programando?
Alfonsos1:
Windows XP es el SO
Alfonsos1:
Intente lo siguiente, pero cuando lo ejecuto no pasa nada:
--- Código: C++ ---#include <allegro.h> int main() { allegro_init(); install_keyboard(); install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL); //Creo el flujo de audio "stream" AUDIOSTREAM *stream = play_audio_stream(1024, 8, FALSE, 22050, 255, 128); //Luego creo el sample "archivo" cargando un wav SAMPLE *archivo=load_wav("wav.wav"); while(!key[KEY_ESC]){ void *mem_chunk; mem_chunk = get_audio_stream_buffer(stream); //Cuando no halla nada en el buffer del flujo de audio "stream" if (mem_chunk != NULL){ //Se coloca en el buffer el sample "archivo" mem_chunk=&archivo; //Se indica que el buffer ya ha sido cargado free_audio_stream_buffer(stream); } }}END_OF_MAIN();
En el codigo deje comentarios que esplican lo que yo pretendia hacer con este codigo.
Pero como ya les dije, no pasa nada cuando ejecuto este codigo, ¿alguien sabe que estoy hacendo mal?
Epa:
Buenas
La verdad que no tengo idea de sonido, pero tenes esta opcion que podes probar: la API de windows.
tenes las funciones waveOut para manejar dispositivos de audio.
te dejo dos link para que veas si te sirve.
a falta de windows no lo pude probar :P
funciones de multimeda de la winapi, fijate al final estan las waveout:
http://msdn.microsoft.com/en-us/library/dd743586%28v=vs.85%29.aspx
ejemplo de como usar las wave out:
http://www.tmsoft.com/tutorial-sound.html
Esta parte la tendrias que sacar para no tener que esperar a que termine un sonido:
--- Código: C --- // ** Wait until sound finishes playing if (WaitForSingleObject(Done,INFINITE) != WAIT_OBJECT_0) { Message("Error waiting for sound to finish"); return TRUE; }
Si lo probas deja comentarios de que tal andubo.
Saludos
Navegación
Ir a la versión completa