[Bennu Module] mod_midi

Started by FreeYourMind, February 23, 2010, 09:07:20 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

En windows sí que hay una forma de cambiar los bancos midis: cambiando los drivers :D:D:D
En serio, uso mi SB Live 5.1 desde hace bastante tiempo, y con cada SO me ha sonado de una forma porque he tenido que ir usando drivers de tarjetas modernas que han "downgradeado" los señores de creative. Cuando tenía W98 y sus drivers nativos, era una delicia: muy buenos bancos sonoros, y además el propio soft me permitía cambiar entre 4 distintos (el de windows, uno que no sonaba y dos muy parecidos, para cambiarlos según el juego, porque había alguno en el que ciertos sonidos no se oían, como en el Sonic 3 & Knucles de PC).

En Linux es más fácil (como casi siempre), gracias a Timidity, librería que se puede usar para hacer el port de la librería.
Por cierto ¿Bennu no soportaba ya MIDI?
¿Y no he dicho ya la mitad de todo esto, antes?
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)

FreeYourMind

Ya lo habia comentado Splinter, soportaba midi pero para leer ficheros midi, no para poner notas directamente....

grisendo

Bennu soporta reproducción de archivos MIDI, que se generan con otros programas y dentro
de Bennu se reproducen tal cual, no hay forma de modificarlos.

Esta librería es más para generar MIDI en tiempo de ejecución, aunque de momento sólo se
puedan utilizar notas sueltas. Lo veo ideal para un Guitar Hero más realista (sin poner el
típico "clap" cuando fallas de nota o alargas demasiado las notas).

Modificado:
Quote from: FreeYourMind on May 12, 2010, 12:48:13 PM
Ya lo habia comentado Splinter, soportaba midi pero para leer ficheros midi, no para poner notas directamente....

Te me adelantaste, qué lento soy!! jeje  :D

Drumpi

Mmmmm, leer los ficheros MID (almacenarlos manualmente en memoria) + reproducirlos a mano =
-Reproducir manualmente los canales que queramos.
-Modificar la velocidad en tiempo real.
-Generar (por fin) los bucles, teniendo intro y bucle principal, y reproducir una sección un número de veces.

Gutten, gutten :D :D :D
Si encima funcionase en WIZ, casi que podría hacer FrikiMusic2.0 :D :D :D
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)

grisendo

#34
Perdona, pero... dónde está la DLL para probar?  ;D

Edito: Ya la he encontrao, estoy un poco tonto ultimamente...  :(

grisendo

He hecho lo que he podido... Se me oía como el culo en máquina virtual (siempre se me oyen entrecortados los sonidos), y no he podido jugar mucho con la duración de las notas y el tempo... Te lo he dejado con una función que puede ser útil por aquello de las notas :D (igual la tenías ya de mod_beep, pero bueno...). Ahí va una canción cíclica, a ver si te funciona y sabes cual es (famosísima) :D

[code language="bennu"]
PROGRAM test;

IMPORT "mod_video"
IMPORT "mod_midi"
IMPORT "mod_key"
IMPORT "mod_math"

CONST

   CONST_E = 2.71828183;
   LN_2 = 0.693147181;

   DO = 1;
   DO_SHARP = 2;
   RE = 3;
   RE_SHARP = 4;
   MI = 5;
   FA = 6;
   FA_SHARP = 7;
   SOL = 8;
   SOL_SHARP = 9;
   LA = 10;
   LA_SHARP = 11;
   SI = 12;
   
   BELL = 9;
   
   VECES = 2;

END

FUNCTION float nota(int nota, int octava)
BEGIN
   RETURN(440 * pow(CONST_E, ( (octava - 3) + (nota - 10) / 12.0 ) * LN_2));
END

GLOBAL
   int i;
END

BEGIN

   FOR(i = 0; i < VECES; i++)
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(LA, 1), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(SI, 1), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(SOL, 1), 1000, 127, BELL, 2);
      midi(nota(LA, 1), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(DO, 2), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(RE, 2), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(SI, 1), 1000, 127, BELL, 2);
      midi(nota(DO, 2), 1000, 127, BELL, 2);
      midi(nota(MI, 1), 1000, 127, BELL, 2);
      midi(nota(SI, 1), 1000, 127, BELL, 2);
   END

   midi_sleep(100);

   LOOP
      IF(key(_esc))
         BREAK;
      END
      FRAME;
   END

END
[/code]

FreeYourMind

Que bien, lo voy a probar ya.

Si te sirve de utilidad, te pongo este piano midi que he encontrado, se podria hacer algo similar con bennu usando la dll :)


Rein (K´)ah Al-Ghul

free, al final liberaste las fuentes???

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

FreeYourMind

Buena pregunta, el mod_beep si lo hice, si este no lo hice lo tienes dificil porque desde que saque esto ya he tenido que cambiar 2 veces de disco duro y la verdad no se si tengo algun backup, lo tendria que mirar pero mi habitación parece el almazen de la Retro xDD