Funciones estilo get_song_pos y get_song_line

Started by MythomizeR, November 04, 2008, 04:30:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

MythomizeR

Hola,

Se echa en falta en Bennu funciones del estilo  get_song_pos, get_song_line, etc. a fin de sincronizar imágenes con música "mod", por lo que, ¿hay algún plan de incorporarlas al lenguaje? ¿o al menos es factible el acceder a los campos de alguna estructura que contenga tal información, y en caso a afirmativo, qué variables son?

Un saludo y buen trabajo con Bennu.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#2
Yo sí que las encuentro prácticas (por ejemplo para una demo gráfica sincronizada con musica mod de fondo), pero vamos, que si no se van a incorporar ni tampoco se puede obtener tal información de ninguna forma, tampoco me va a resultar un problema, por suerte tengo recursos y lo puedo solventar de otras maneras jeje

SplinterGU

no es ironia, es una pregunta seria, estaba intentando preguntar cual seria el uso que le darias, no entendi tu requerimiento y un ejemplo practico de su uso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#4
Nah, como te digo, aplicaciones donde se requiere lanzar en diversos puntos en la reproducción de un archivo de música "mod" (.mod, .xm, ...) ciertos eventos gráficos como animaciones o simplemente imágenes estáticas..., (un ejemplo son las demos gráficas/sonoras de las demoscenas del Amiga y del PC de los 90), para eso fundamentalmente.

SplinterGU

Vos te referis a poder decirle donde comience a reproducir el sonido? por ejemplo, tengo un ogg de 30 segundos y que se posicione en el tiempo 5 seg, luego le digo que se posicione a los 3 seg, asi?

y get_song_line que funcionamiento tendria?

sigo sin entenderte... explicalo practicamente... no necesito codigo, sino paso a paso como lo utilizarias...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#6
No es eso. Perdón me explicaré mejor, pensaba que conocías estas funciones que vienen con el DIV 2...

Los archivos de música "mod" (.mod, .xm) se componen de patrones y estos a su vez de líneas que es donde van las notas musicales (por lo general un patrón se compone de 64 líneas), estando formada más o menos una canción "mod" por 20-30 patrones... (que todo esto supongo que ya lo sepas, pero bueno :-)

Entonces, al disponer de este par de funciones (get_song_pos para obtener el número de patrón actual que está sonando en ese momento y get_song_line para obtener el número de línea dentro de ese patrón) es fenómeno para lo que digo de poder hacer posible el que se produzca de forma sincronizada con la música algo como el que aparezca un gráfico cuando la canción llegue a un determinado punto (patrón/línea_de_ese_patrón)... a ver si ahora me he explicado mejor, si no te sigo explicando :-)

Mira te pongo la documentación de estas dos funciones y que venían con el DIV 2 a ver si así lo ves más claro:

get_song_pos()

Retorna:

La posición actual del módulo musical que se esté reproduciendo.

Descripción:

Devuelve la posición actual de reproducción del módulo musical, esta posición puede fijarse con la función set_song_pos().

Esta <posición del módulo> es un número entre 0 y el número máximo de pattern (patrones) del módulo. Este valor varia para cada módulo, y se define en los programas utilizados para componerlos. Los módulos suelen tener un número muy variable de patrones, aunque la media puede situarse entre 30 y 40.

Dentro de cada patrón los módulos tienen un determinado número de líneas (normalmente 64), en las cuales aparecen las notas musicales, por lo que se podría definir cada patrón como una pequeña sección del módulo musical.
Programa ejemplo:

PROGRAM ejemplo_get_song_pos;

GLOBAL
    id_canción;
    posición_módulo;

BEGIN
    load_song("help\help.xm",1);
    song(id_canción);
    write(0,0,0,0,"Posición del módulo:");
    write_int(0,0,10,0,OFFSET posición_módulo);
    LOOP

        posición_módulo=get_song_pos(); // Obtiene la posición

        FRAME;
    END
END



Este programa carga el módulo contenido en el archivo help.xm y entonces inicia su reproducción con la función song().

A partir de este momento se mostrará la posición actual del módulo en pantalla, obtenida mediante la función get_song_pos().

Nota: Se puede obtener el número de línea que se está reproduciendo, dentro del patrón, con la función get_song_line().
Ver: get_song_line() - set_song_pos() - song()


-----

get_song_line()

Retorna:

El número de línea del módulo musical.

Descripción:

Con esta función se puede obtener el número de línea del módulo musical que se está reproduciendo (dentro de la posición, o patrón actual).

Esta posición actual, o patrón (pattern), puede obtenerse con la función get_song_pos().

Dentro de cada patrón los módulos tienen un determinado número de líneas (normalmente 64), en las cuales aparecen las notas musicales. Los módulos suelen tener un número muy variable de patrones, aunque la media puede situarse entre 30 y 40.
Programa ejemplo:

PROGRAM ejemplo_get_song_line;

GLOBAL
    id_canción;
    línea_módulo;

BEGIN
    load_song("help\help.xm",1);
    song(id_canción);
    write(0,0,0,0,"Línea del módulo:");
    write_int(0,0,10,0,OFFSET línea_módulo);
    LOOP

        línea_módulo=get_song_line(); // Obtiene el número de línea

        FRAME;
    END
END



Este programa carga el módulo contenido en el archivo help.xm y entonces inicia su reproducción con la función song().

A partir de este momento se mostrará la línea actual del módulo en pantalla, obtenida mediante la función get_song_line().

Nota: No se puede fijar la línea del módulo musical, aunque si se puede fijar la posición a partir de la que debe reproducirse con la función set_song_pos() (siempre se comenzará en la línea 0 del patrón).
Ver: #219,get_song_pos()} - set_song_pos() - song()

SplinterGU

Ya veo... el modulo de sonidos fue estabilizado, pero esta pendiente de hacerle un upgrade a nivel funcionalidades...
tomado notas de las sugerencias, pero nada a corto plazo...
gracias...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2


osk

Hola. Pero, , estos formatos: xm, mod, it...¿no están un poco desfasados ya? Quiero decir, hoy en día, ¿son realmente necesarios?
Pregunto por puro desconocimiento, que conste, eh?

Prg

La verdad sí, yo casi no encuentro estos formatos en uso. Sin embargo se me hace muy interesante tener funciones de éste tipo, como para hacer un disparaletras con música y que lance las letras al ritmo de cierta canción. Claro especificando la velocidad según la línea o cosas así.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Drumpi

Pues si están obsoletas no lo entiendo, porque yo las uso a destajo. Su funcionamiento es similar al midi, y el formato tambien (incluyendo el ahorro de memoria) pero no depende de ninguna librería de instrumentos pre-instalada, pues ya se "incrustan" en el archivo. Así puedes tener mejor calidad y todo y, en lugar de instrumentos, poner una voz si quieres (que puedes usar tambien como instrumento :P)
Puede que algunos se queden cortos en especificaciones (por numero de canales o lo que sea) pero creo que el ahorro de memoria lo compensa con creces.
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)

MythomizeR

#12
Antaño fui, y ahora vuelvo.

Qué jóvenes éramos SplinterGU, cuando te sugerí lo que comenté en este hilo, aunque bueno, seguro que seguimos siéndolo todavía, además de más curtidos  ;D

Guasas aparte jeje, que me he acordado hoy de éste tema, de que se echa un poco en falta una función que devolviese la posición actual de la canción que está sonando, pues sería ideal -como ya comenté en su día cuando creé este hilo- para sincronizar los gráficos con la música (por ejemplo para juegos estilo Baila Baila Revolution, por poner un solo ejemplo).

Así que me he puesto a buscar por el código fuente de BennuGD a ver si había habido alguna novedad respecto a esto durante todo este tiempo que he estado totalmente desconectado del lenguaje.

Y bueno, que aunque he visto que finalmente no hay nada para detectar esto en los "archivos mod", sí que he visto que hay una función para establecer la posición en las canciones y que es Set_music_position(F), por lo que he pensado que creo que sería bastante interesante (y supongo que simple también) implementar "la complementaria" F Get_music_position() que devuelva, precisamente, el mismo valor que se le pasa como parámetro a la primera.

Es solo una sugerencia y que BennuGD tiene ya más que suficientes funciones y el lenguaje mola cantidubidubidá, y que, "a malas", aunque pueda haber algún problemilla con la sincronización del vídeo con el audio por cuestiones de posibles lags durante la ejecución (por lo que la referencia del reloj ya no es precisa), lo sigo haciendo por otros métodos y ya está  :)

Gracias por tu trabajo  :)

SplinterGU

hay que ver como esta la sdl mixer actualmente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

claro, ya imagino... pues a disfrutar con lo que ya ofrece BennuGD, que es bastante  :)