Pregunta para nota sobre música.

Started by Aki, September 28, 2011, 06:26:07 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Aki

Muy buenas a todos.
Ando leyendo tutoriales según voy pudiendo sobre Bennu, pero como la cabra tira al monte, me he ido a buscar lo primero información sobre el tema de música.
He visto los comandos: • Is_playing_song() • Load_song() • Load_wav() • Pause_song() • Play_song() • Play_wav() • Resume_song() • Set_Wav_Volume() • Set_song_volume() • Unload_song() • Unload_wav().
Con ellos veo que se pueden hacer muchas cosas, pero básicamente ejecutar canciones en formato .ogg o .xm, que son los que me interesan.

Hace muchos muchos años cuando formamos un grupo Scener que duró una demo, yo hice la música. El mayor problema que tuvimos fue a la hora de sincronizar la música, pues yo había hecho un .mp3 en vez de una canción con un tracker .it o .xm
Al final la sincronizamos a pelo y fue una locura.
En su día recuerdo que los trackers tenian efectos de sincronización para dar paso a las diferentes secuencias de las demos.
Hace una eternidad que no hago cosas de ese tipo y no recuerdo el efecto que se utilizaba para ser leido desde el código, el caso es que me gustaría saber si hay algo hecho o si se puede hacer algo así en Bennu.
Con poder leer la nota que se ejecuta en un canal sería suficiente, pues a ese canal se le puede asignar un instrumento sin sonido y utilizarlo solo para sincronizar con el juego o incluso para gobernarlo asignando funciones de aparición de enemigos a ciertas notas,...
No sé porque pero esperaba que esto ya estuviera ya implementado, pero no he encontrado nada.
¿Hay algo ya hecho del estilo?
¿Sería posible hacer algo así?.

Para el pequeño matamata que tenía pensado me vendría muy bien, pues la música la tengo pensada en plan chiptune y a tracker total y si puedo asignar funciones de aparición de enemigos o de fases,... a ciertas notas podría crear varias pantallas con solo cambiar de una canción a otra y variando la columna de sincronización.
Vamos, que la cabra tira al monte y yo pienso más en canciones que en código (o por lo menos a día de hoy :-P )

Si no hay nada, pero si hubiera sería cojonudo.

Un saludo.

KeoH

La verdad esq no tengo ni idea de si Bennu tiene algo así.. me suena q no ... pero la verdad esq estaría de puta madre xDD eso haría muy sencillo hacer un Guitar Hero para Bennu xDDDD

Rein (K´)ah Al-Ghul

Supongo que es posible hacer esas cosas...

Si puedes ver cuando ocurren las notas(tiempo en que ocurren) puedes armar algo para que a los YYY milisegundos, haga algo...
algo asi como un proceso que controle todo el resto cuando pase YYY tiempo que corresponda al una nota...
supongo que puedes armar efectos con las funciones de musica, como decender el volumen, lanzar sonidos al tocar tal tecla, lo que no se es si se puede volver a determinado punto de una sonido...
con todo eso tienes para efectos basicos...

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

KeoH

Rein, yo entiendo q lo q quiere decir es q la misma musica active eventos en el juego, q hagan q se cree un proceso, o matar procesos .. cosas de esas. Osea, un proceso q este "escaneando" constantemente una pista de la canción (no serviría para los mp3 supongo) con instrumento mudo, pero q sean detectables por el proceso. Este proceso al ver q en tal momento aparece tal nota, activaría un evento (cumpliría una condicion en un switch por ejemplo xD). Sería algo chulo para sincronizar lo q ocurra con la música, ya q es la música lo q marca lo q aparece en el juego. Me mola la idea.

Rein (K´)ah Al-Ghul

No hablaba de escanear nada, sino de armar los eventos segun el tiempo de la cancion, por ejemplo en 01:01:589 queda solo un instrumento, armar algo que cuando llegue a ese tiempo haga algo...
supongo que una lista enlazada seria util...
si se tiene un mod o mid de referencia esto seria mas facil, pero con cualquier archivo de audio seria posible

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

gecko

El problema de esa solucion serian las maquinas lentas, o los juegos medio pesados, donde la musica a veces se desincroniza.. y si te basas en el tiempo para crear todo, bueeno, como que perdes la sincronia de todo.

Pero una funcion que vaya leyendo un instrumento, o una especie de "cabezal lector" que indique que es lo que se esta reproduciendo ahora mismo si que seria util para ir lanzando eventos o reaccionado de determinada manera.

Da para mucho jugo, y mucho juego esa idea! :D
Torres Baldi Studio
http://torresbaldi.com

Yawin

XDDD ya me imaginaba que tendrías alguna ida así, los sceners no pensamos en otra cosa jajajajaja
Imagino que algo habrá, se que josebita ha utilizado alguna librería de detección de tono para hacer su kantaoke. Si no, la otra opción es programar la librería. Te haces una librería que haga esas cosas, y yasta, a partir de ese momento el lenguaje podrá hacerlo xDD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Aki

Gracias a todos por las respuestas.
La idea es la que dice Keoh. No se porque, pero pensaba que se podía, supongo que de recuerdos de los tiempos de demos.
Si no se pueden mandar banderas de sincronización desde la pista del tracmer, está claromque tendré que buscarme una forma de ir mandando eventos según una linea de tiempo, y rezar para que la sincronización no se pierda.
Por otro lado y dando una vuelta de turca, si desde el códigosepudieran añadir efectos a la pista del tracker, eso si que estaría chulo, ya que por ejemplo lo que me encantaría en mi matamarcianos es poder relentizar o acelerar el tiempo del juego a voluntad del usuario según vaya gastando un poder.
Para este caso sería imprescindible que la música fuera con el tempo que marca el código, es decir, que se pudiera cambiar la velocidad de reproducción del módulo según lo diga el código.
En fin, ya me parece demasiado, lo dejaré para la versión 10.0 del matamarcianos. Para arrancar, con lo básico iré tirando, y luego ya lo complicaré, pero si que me gustaría saber si se puede hacer lo que digo de cara al futuro.

Por cierto, esto que comento le vendría de perlas al guitar hero que habeis comentado, para acelerar o no según quiera el usuario, y darle una pequeña vuelta de tuerca al tema de un guitar hero convencional.
Un saludo a todos y gracias por las respuestas.

Yawin

Hubo un usuario que se curró una librería para mandar señales al canal midi. Creo recordar.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Aki

Quote from: Yawin on September 29, 2011, 07:54:10 AM
Hubo un usuario que se curró una librería para mandar señales al canal midi. Creo recordar.

Vaya, disculpa mi ignorancia, pero: ¿las librerías se programan en C?.
Es que de java o de visual basic algo me acuerdo, pero en C no he llegado a hacer nunca nada.
¿Se puede acceder al código de esas librerías?.
De todos modos, esto queda fuera de mi alcance actual, y me temo que para siempre también... es decir, no he programado un matamata como los de los ejemplos y ya ando dando vueltas a hacer librerías...  ::) ...  luego es más por curiosidad.

Yawin

Eso habla con los grossos de este foro xDD que están tol día haciendo librerías.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Drumpi

A ver, os comento cómo va la cosa (por cierto, un saludo y bienvenido, Aki):

Actualmente, tanto Fenix como Bennu usan la librería SDL_Mixer para la reproducción de sonidos. Se eligió así por el tema de compatibilidad y portabilidad. Esta librería permite no tener que trabajar en un sistema nuevo de audio cada vez que se cambia de plataforma.
La pega es que (creo) no proporciona un control total sobre la música, más allá de cargar, reproducir, pausar, detener y descargar. Hay una librería, la mikmod (de la que creo que SDL_mixer hace uso) que sí permite todo eso y más, que es la que se usa para todo tipo de música modular (s3m, xm, mod, it...).

Si alguien se pone y hace una librería basada en esta, no habría problemas en usarla en Bennu (por suerte, Bennu es muy flexible gracias a sus módulos), el problema es hacerla. En principio debería dar igual el lenguaje, siempre que se genere una DLL/SO compatible (así que descartamos Java).

Y lo digo porque en su momento estuve analizando el tema, porque también se echa de menos una función para variar la velocidad de reproducción del sonido (y generar efectos como la aceleración del coche, y me hubiera venido genial para el FrikiMusic).

Respecto a la sincronización, por lo general, la música no se sincroniza con el juego, pero si la máquina es lo suficientemente potente, el audio sonará a su velocidad normal (lo he visto con "cierto juego" en WIZ), por lo que se pueden usar los TIMERs en estos casos (si, timers, no contadores, es uno de los pocos casos en los que los veo útiles ;D ) que cuentan el tiempo en centésimas de segundo, pero tiempo REAL, independientemente de las ralentizaciones.

Y sí, iba a haber un Guitar Hero, pero no soy tan buen músico como para generar las canciones para el modo entrenamiento de los instrumentos de FrikiMusic (¿O pensábais que el hueco entre "instrucciones" y "tocar" en el menu de cada instrumento era para hacer bonito? ;D o al menos, no en todos los instrumentos).

PD: lo del Kantaoke creo que era un módulo para reconocer frecuencias en la entrada de audio, no en la salida... y le tengo que echar un vistazo, a ver cómo funciona, sobre todo si es portable a Linux, WIZ y demás.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)