Registrarse

[Música] Inserción de MIDI's detallada y ejemplificada (22/07/2016 Actualizado)

Pum

GBCero
Para ver el tutorial original por @~Ruki! pulsar aquí.

NOTA : Si una imagen no se ve lo suficientemente grande. Click derecho sobre ella y "Abrir imagen en pestaña nueva

Ejemplo en Vídeo (Inglés y Largos, 7 partes. En la parte 6 se recomienda ver la descripción del video):
  1. Parte 1:
  2. Parte 2:
  3. Parte 3:
  4. Parte 4:
  5. Parte 5:
  6. Parte 6:
  7. Parte 7:

En Este tutorial veremos como insertar una canción desde 0 en la ROM muy detalladamente


Programas que se usarán (Se proporcionan en descarga al final del tutorial)​

  • Emulador VBA-M / GamBatte / BGB *
  • Anvil Studio
  • C-Point
  • Gold Finger
  • Editor de Textos (Recomiendo Notepad++)
  • Midi2GSC
  • GSCImport
  • MAF

* GamBatte Y BGB emularán el audio más fielmente al sonido original de una GameBoy, pero ten en cuenta que mucha más gente usa VBA-M para jugar ROMs.

Durante el tutorial usaré una canción de ejemplo con su resultado final al principio.

  1. Antes de nada, necesitamos nuestra MIDI de 4 canales. Podemos conseguirla de dos formas: Modificando una MIDI ya existente, o creando nosotros una desde cero. Lo segundo es bastante complicado, laborioso y largo. A menos que seas muy bueno creando música no se recomienda lanzarte a componer.

    Para este ejemplo, cogeremos la canción que suena en Pokemon Conquest en el castillo de veneno:



    Hay que tener en cuenta que no porque una canción esté en una ROM va a estar formateada como MIDI. Hay canciones que pueden estar en formato .wav y entonces no podemos hacer nada.

    Esta canción existe como MIDI por internet. Pero yo decidí extraerla directamente de la ROM del juego por si acaso. Esto no es materia de este tutorial.
  2. Abrimos la MIDI con Anvil Studio, vemos que tiene 15 canales (El primero esta inutilizado) (Ver imagen)
    Si escogimos una canción es porque nos gusta y la hemos escuchado varias veces. Al escuchar este midi reconoceremos en cierta medida la canción original, pero notaremos muchas diferencias de tempo, instrumentos, etc.

    Una vez hayamos escuchado la midi varias veces. Debemos localizar los trozos de audio principales que queremos en un nuestro midi de 3 canales.
    Principalmente vamos a querer uno que es un sonido de fondo repetitivo, y dos sonidos que caracterizan a la canción.

    Para hacer pruebas podemos silenciar canales que no nos interesan (Ver imagen)


    y volver a reproducir hasta que nos queden tres y sigamos oyendo la melodía principal. En ciertas situaciones puede que queramos más de tres canales para que la canción nos suene como queramos. Lo que se puede hacer es coger esas porciones de audio e intentar meterlas en uno de los tres canales. Pero ten en cuenta siempre que solo disponemos de 3 canales. (El canal de drums nunca se debería de usar como un 4º canal de audio, los drums son drums y punto)

    Ten en cuenta que muchos canales son duplicados de otros en ciertos momentos con otros tonos/instrumentos para darle profundidad/estilo a la canción.
  3. Tras analizar la canción, decido que los canales que voy a usar son el 2, el 7 y el 13. Sin embargo en el canal 4 tiene una parte de la melodía al final que me interesa, aprovecho que el canal 2 no tiene nada durante la reproducción de esa parte y veo que la podré poner en ella. (Ver Imagen)


    Ahora debo eliminar el resto de canales y quedarme con esos tres (más el nº 4 para copiar la parte que quiero usar en el 2, luego se habla de eso). Para eliminar un canal simplemente haz click derecho sobre el y dale a "Delete Track". O si no selecciona el canal que desees eliminar dándole a la derecha de todo donde deberá aparecer un ✓ en rojo, y después dale, arriba de todo donde dice Track, a delete; luego confirma.

    Una vez eliminados todos los canales de sobra debemos ver si es viable usar los tres que tenemos. Con viable me refiero a lo siguiente para cada canal independientemente:

    NOTA: Antes de explicar esto, añadir que para poder acceder a las notas del canal de forma detallada para lo que nosotros queremos debemos tener nuestro canal seleccionado, después le damos a View --> Piano Roll Edition. Ahí podremos ver los semitonos, cada nota con su duración, etc... Y ponemos, donde dice Grid, 1/16.

    • A la hora de que nuestra midi sea reproducida por el emulador, tenemos que tener en cuenta que la nota más corta posible es una semicorchea. Si nuestra canción tiene notas más pequeñas, tendremos que modificarlas para que sean mínimo semicorcheas. En ciertas canciones esto es imposible o extremadamente tedioso, ya que al hacerlas semicorcheas unas notas empiezan a ponerse sobre otras, y los canales se ralentizan respecto a otros. En nuestro ejemplo tenemos este problema, pero por suerte se puede solucionar. Ver apartado de DyD para una posible solución

      Si nos encontramos esto :


      Lo cambiaríamos para que quede así :


      Como podemos ver, eliminamos parte de la nota anterior para hacer sitio a las dos notas.

      Esas notas eran fusas (1/2 de semicorchea) ya que teníamos puesto el grid a 1/16 (que es como debe estar) Y ya dijimos que el mínimo era semicorchea. (Ver imagen)

    • A la hora de que nuestra midi sea reproducida por el emulador, tenemos que tener en cuenta que dos notas, en el mismo canal, con el mismo tono, seguidas pero separadas, sonarán como una en el emulador sumando sus duraciones. Si por ejemplo en nuestro canal de ritmo tenemos esto, podemos hacer varias cosas. Por ejemplo podemos eliminar las notas dos a dos, de forma que siempre nos quede un hueco del tamaño de una semicorchea entre las notas, ya que ahí tendremos que insertar un silencio. Otra posibilidad es subir o bajar las notas dos a dos de Semitono. Por ejemplo si tenemos 10 notas seguidas en el semitono 'D#', podemos cambiar las que estén las posiciones impares (primera, tercera, quinta, séptima y novena) de semitono al 'D' o al 'E', y ver como suena. Para subir o bajar una nota de semitono, ponemos el ratón encima por el medio del rectángulo hasta que el puntero cambie a una línea vertical con dos flechas en las esquinas, entonces mantenemos pulsado y movemos hacia arriba o abajo.

      Si por ejemplo, tenemos esto :


      A la hora de sonar, equivaldría a esto :


      Entonces podemos hacer bien esto (según la importancia del canal puedo sonar igual o peor) :


      O esto (más posibilidad de que suene bien) :

    • A la hora de que nuestra midi sea reproducida por el emulador, tenemos que tener en cuenta que dos notas del mismo canal no pueden sonar al mismo tiempo, aunque tengan distinto tono. En nuestra canción esto sucede pero muy minoritariamente, y es fácil de eliminar. Pero en ciertas canciones esto puede ser la razón principal por la que suenan bien, y tratar de modificar eso nos llevará a una canción que sonará mucho peor y para nada a como era antes. Lo mejor es mirar canal a canal, nota a nota buscando notas que se reproduzcan al mismo tiempo. Generalmente te vas a encontrar de dos tipos:
      • Notas duplicadas/triplicadas/etc (Ver imagen)


        Con este tipo de repetición es con la que más problemas vamos a tener, en este caso habría que eliminar una de las líneas de semicorcheas (la del medio probablemente) y eliminar las notas que suenen al mismo tiempo que las corcheas de la linea inferior. Lo probé y no sonaba mal, pero en una parte más adelante de esa canción (no es la de este ejemplo) fue imposible de editar y que sonara decentemente. Quizá alguien a quien se le diera bien esto hubiera podido.

      • Pequeñas transposiciones de notas (Ver imagen)


        Este es común en ciertas canciones, y en la que estamos editando pasa igual (la imagen es de nuestra canción). Estos son fáciles de solucionar si no son muy grandes y comunes. En el caso de la imagen, simplemente cogimos la nota que duraba 3 semicorcheas y la acortamos una para que dure dos, y justo cuando acabe empiece la siguiente. Para acortarla pon el ratón a la derecha del rectángulo que representa la nota y, cuando el puntero del ratón cambie a la linea horizontal con dos flechas, mantén pulsado y muévete hacia la izquierda. Si coges la nota por la izquierda en vez de por la derecha, te permitirá mover la nota pero no acortarla/alargarla.

        Debemos mirar los tres canales uno a uno en busca de estas transposiciones y eliminarlas.

    Si vemos que nuestra midi no tiene estos problemas, o que si los tiene, los podemos solucionar, seguimos.
  4. Decía que aquella parte del canal número 4 me interesaba, y que me cabía en el canal 2 ya que mientras esa parte del canal 4 se reproducía, el 2 está en silencio. Lo más sencillo es hacer lo siguiente:

    • Primero cambiamos de visualización dándole a View --> Composer.
    • Después, en el 4º canal nos posicionamos en la primera nota que queremos mover al 2do canal (Ver imagen)

    • Ahora mantenemos pulsado la tecla Shift (La que tiene una flecha que apunta hacia arriba, encima de Ctrl) y pulsamos la tecla de moverse hacia la derecha. Esto irá seleccionando notas a medida que vamos pulsando, nos guiamos por la gráfica que hay arriba a la derecha, y cuando tengamos nuestro segmento seleccionado, lo copiamos con Ctrl+C. Debimos tener seleccionado esto aproximadamente (Ver imagen) Nótese el zoom al 50%:

    • Ahora nos vamos al canal 2 y le hacemos click derecho encima, le damos a "clone track" y un canal exactamente igual nos aparecerá debajo (si no está justo debajo, muévelo encima del original pulsando en él y dándole a "Move track up in list" varias veces), esto nos servirá como guía para más tarde. Tras esto, seleccionamos la misma cantidad de tiempo que antes, esta vez seleccionando los descansos que hay en el canal. (Ver imagen)


      Una vez que creemos que tenemos aproximadamente la misma cantidad de tiempo, pulsamos Shift+Insert y nos pegará lo que copiáramos antes (alternativamente, ir a Edit --> Paste Insert). Es posible que no esté tal cual estaba en el canal 4, para calibrarlo bien, ponemos el canal 4 justo debajo del canal 2 haciéndole click derecho encima y dándole a "Move track up in list". (Ver imagen)


      Fíjense que el segmento que hemos insertado comienza en 0:44:539
    • Ahora simplemente insertamos silencios en el canal 2 hasta que veamos que coincida perfectamente lo que pegamos con lo del canal 4 (con coincidir me refiero a que sucedan en el mismo espacio de tiempo). Para comprobar exactamente si coinciden, miramos arriba de todo donde dice "Time", y miramos el tiempo, cambiamos al canal 4 y si coinciden es que insertamos bien. Si no coinciden inserta descansos en un canal u otro según corresponda hasta que coincidan.

      En nuestro caso lo insertamos bien, ya que el mismo segmento comenzaba también en el mili segundo 0:44:539 en el canal 4.
    • Repetimos la comparación con el clon del antiguo canal 2 para ver si lo que está después de lo que pegamos al canal está donde tiene que estar. Tras ponerlo todo bien, borramos el canal 4 y el clon del canal 2. Y guardamos.

      En nuestro caso parece que nos sobran dos semicorcheas, ya que si miramos el canal 2 donde insertamos (en Piano roll Editor) vemos esto justo en las notas que estaban en el canal dos después de lo que insertamos (Fíjense en el tiempo):


      Vemos que empieza en 1:21:692, si ahora cambiamos al canal original que clonamos antes:


      Entonces lo que hacemos es recortar dos semicorcheas la nota larga que formaba parte de lo que insertamos, seleccionamos dos semicorcheas vacías y pulsamos supr (Para seleccionarlas mantener pulsado donde la flecha azul está y mover hacia la derecha/izquierda)

  5. Ahora ya tenemos nuestros tres canales y sabemos que son viables, tenemos que escoger qué canal será el del ritmo y cuales los otros dos, yo personalmente pongo el del ritmo de tercero y los otros dos antes (el que tenga menos notas de 2º).

    Tras esto, podemos añadir la introducción de la canción porque es una canción de batalla (lo que suena cuando la pantalla parpadea antes de entrar en batalla después de que un entrenador/pkmn te rete/ataque), en mi caso quiero usar esta canción para la batalla de gimnasio, entonces cogí la MIDI de la introducción de la batalla de gimnasio de Johto, la copié y la pegué en nuestro midi canal a canal. La introducción debe durar 32 Semicorcheas. Yo edité la intro para que suene bien con la nueva canción ya que no es realmente del estilo GBC. Esto no es necesario pero le puede dar un toque interesante si se hace bien.

    Guardamos nuevamente, y ahora eliminamos todos los canales menos uno, el cual guardamos dándole a File --> Export Midi-0 Format File... , reabrimos el fichero que tiene los tres canales, rechazamos guardar y repetimos para los otros dos canales, nombrándolos de forma distinta.

    Ahora que tenemos los tres canales debemos crear los puntos de loop para cada canal. Hacer el loop no es tan complicado. Abrimos el midi correspondiente al canal 1. En nuestro ejemplo, el inicio del loop sería exactamente en la primera semicorchea (sea una nota o un silencio) tras el intro, es decir en el segundo ~0.02:824. Cuando tengamos el marcador de tiempo en la cantidad que queremos, vamos a arriba donde dice "New cue" y cuando nos pida el nombre ponemos "[" (sin comillas).

    Esto no es algo forzoso, puedes poner el inicio del loop donde tú quieras, pero tienes que estar 100% seguro de que los tres canales tienen el comienzo del loop en el mismo milisegundo. Repetimos para el final de la canción pero el cue debe llamarse "]" (sin comillas), si uno de los tres canales acaba antes que algún otro, inserta silencios para que su loop no comience antes de tiempo. Para poder comparar los tres canales al mismo tiempo, puedes abrir otras dos instancias de Anvil Studio para abrir los dos canales restantes allí. Todos los canales deben acabar en el mismo momento. Tras esto volvemos a exportar como Midi-0 format y repetimos para los otros dos canales.
  6. Posible eventualidad : Hay notas con duraciones fusas
    Si tenemos por ejemplo esto:


    O esto :


    Deberemos recurrir al método de Doblar Y Dividir

    Este método consiste en doblar la duración de todas las notas de la canción, y al mismo tiempo doblamos el tempo (Lo de dividir viene de que al editar el ASM, cuanto más grande sea el tempo, más lenta irá la canción, de forma que técnicamente dividiremos el tempo).

    Ventajas:
    • Permite usar una canción con notas demasiado cortas (fusas o menores)

    Desventajas:
    • Si el tempo es mayor de 150, no se podrá representar correctamente en Anvil Studio, ya que el máximo es 300, sin embargo probablemente sí se pueda reproducir en el emulador con el tempo correcto.
    • Incrementará el tamaño de la canción, ya que todas las notas con duración entre 8 y 15 requerirán una nota más para su representación.

    Antes de explicar como aplicar el método de Doblar y Dividir (A partir de ahora se le denominará "DyD" para abreviar), hay que tener en cuenta que esto no nos solucionará todo siempre que tengamos notas fusas, si observamos la segunda imagen, veremos como hay notas que duran 2 semicorcheas y media, y otras cantidades irrepresentables por el emulador. Habrá que hacer trabajo extra.

    Lo que tenemos que hacer, es modificar estas notas para que tengan una duración exacta medible en semicorcheas. Nuestro ejemplo anterior podría quedar así:


    Sin embargo esto puede sonar horrible según la canción, es recomendable usar DyD en estos casos para simplificar la diferencia entre el original y el modificado, ya que tendremos más precisión al doblar las notas.

    Lo mejor es reproducir con Anvil Studio y ver como suena tras aplicar DyD.

    Es importante darse cuenta de la diferencia de precisión que tenemos al usar DyD, si miramos la imagen anterior, a la derecha del todo podemos ver una nota que dura 1 semicorchea, luego 1 que dura 2 semicorcheas, y finalmente 1 que dura 1 semicorchea. Esto quedó así tras arreglar la canción que se veía en la imagen anterior sin haber aplicado DyD.

    Como podemos ver en esta imagen, las notas sin modificar son así (tras cambiar el Grid a 1/32 note) :


    Se ve como las notas duran aproximadamente 1 semicorchea + 1 semifusa

    Si aplicamos el mismo método de aproximar la notas a una cantidad entera de semicorcheas, nos quedará algo así:


    No hemos aplicado DyD aún, pero si nos fijamos, como dije antes el Grid está a 1/32, lo cual es el doble de lo normal (1/16). Esto quiere decir que lo que estamos viendo es exactamente como nos quedará la canción tras aplicar DyD.

    Así es como hubiera quedado si no hubiéramos cambiado el Grid o si no hubiéramos aplicado DyD :


    Tengamos en cuenta que las notas antes de tocar nada tenían la duración de 1.25 semicorcheas (1 semifusa es 1/4 de semicorchea)

    En la primera imagen en la que cambiamos el Grid a 1/32, se ve que las notas siguen una progresión de 3-2-3-3-2-3-3-2-...

    En la segunda imagen en la que dejamos el Grid a 1/16, se ve que las notas siguen una progresión de 1-2-1-1-2-1-1-2-...

    Hay que tener en cuenta que en la primera imagen la progresión habrá que dividirla entre 2, ya que doblaremos el tempo.

    Entonces nos quedará algo así:
    • Grid 1/32 : 1.5 - 1 - 1.5 - 1.5 - 1 - 1.5 - 1.5 - 1
    • Grid 1/16 : 1 - 2 - 1 - 1 - 2 - 1 - 1 - 2
    • Original : 1.25 - 1.25 - 1.25 - 1.25 - 1.25 - 1.25 - 1.25 - 1.25

    Márgenes de Error (Original - Grid):
    • Grid 1/32 : (-0.25) - (0.25) - (-0.25) - (-0.25) - (0.25) - (-0.25) - (-0.25) - (0.25)
    • Grid 1/16 : (0.25) - (-0.75) - (0.25) - (0.25) - (-0.75) - (0.25) - (-0.75) - (0.25)

    Como se puede obvservar, el márgen de error es menor la mayor parte de las veces usando DyD, por eso recomiendo usarlo si es necesario.

    Ahora veamos cómo se aplica DyD

    • Primero seleccionamos el primer canal en la MIDI, clickeamos en Track y después le damos a Quantize -> All tracks in song. (Ver imagen)

    • Después seleccionamos "Stretch/Compress Time", y ponemos 2/1 (Ver Imagen)


      Si por la razón que sea sólo se modifica el canal seleccionado, habrá que hacer esto con cada canal individualmente.
    • Finalmente, doblamos el tempo. Si el tempo varía a medida que progresa la canción, es recomendable ir una a una, en cada cambio de tempo, empezando desde el principio hasta el final, dándole a "Insert tempo change at the current position" (Para cambiar el tempo basta con darle al botón que pone tempo, junto con una nota representativa del tempo actual, casi siempre una negra). (Ver imagen)

  7. Ahora hablemos del canal de Percusión, o canal Drums.

    En primer lugar, si la canción originalmente no tenía ningún canal de percusión, (tiene que poner "10 drums")


    Entonces no se debería usar un cuarto canal y la canción solo tendrá 3 canales, se puede crear un cuarto canal con percusión de cero a mano si se cree necesario y se tiene los conocimientos musicales necesarios para que suene acorde con la canción.

    Si la canción sí tiene un canal de Percusión, entonces habrá que analizarlo y ver si será representable por el emulador.

    Generalmente las reglas para ver si el canal de Percusión es usable son estas:

    • No hay más de 5 notas diferentes
    • No hay muchos instrumentos distintos, y si los hay, se puede escuchar 1 instrumento principal
    • El instrumento principal son Tambores, o un instrumento similar

    Si se cumple esto (en cierta medida), entonces podremos usar el canal.

    Una forma más natural de ver si podremos usar el canal de Percusión, es simplemente poner dicho canal en Solo, y escucharlo. Si podemos oír un Tambor constantemente (aunque varíe fuerza), podremos usar el canal.

    Ahora pasa un pequeño problema, la representación de instrumentos en Anvil Studio no tiene nada que ver con la que usa el emulador de G/S/C.

    Como dije antes no debe haber más de 5 notas diferentes de tambor, esto es así ya que es la máxima cantidad de tambores que suele haber en un Drumkit

    Un drumkit es un conjunto de instrumentos que usa el emulador, cada drumkit tiene 12 instrumentos, uno por cada posible tono. Si bien muchos tonos suelen ser el mismo instrumento pero con diferente fuerza al sonar.

    En total hay 6 drumkits en Pokemon G/S/C, generalmente los más usados son el 0, el 3 y el 5.

    Podría decir qué instrumentos tiene cada drumkit, pero lo mejor es coger este archivo ASM hecho para poder oír los posibles instrumentos en cada drumkit.

    Para usarlo simplemente ábrelo con NotePad++, e insértalo en una ROM limpia de pruebas usando gscImport (puedes ver los puntos finales del tutorial de cómo insertar el contenido de un fichero .asm en una ROM), una vez insertado, puedes modificar el campo pkmsSetDrums para cambiar el drumkit, entre 0 y 5. Tras cambiar el drumkit vuelve a insertar el fichero y así podrás probar todos los drumkits.

    Generalmente el drumkit que más se usa es el 5, antes mencioné el 0 y el 3, ya que esos se pueden usar puntualmente, pero el 0 es demasiado ruidoso, y el 3 tiene menos tambores que el 5, aunque es un poco más ruidoso.

    Lo que yo hago más comúnmente es coger el canal de percusión y modificarlo todo de forma que solo se usen 5 notas, de la C a la E, siendo la C el Tambor con más fuerza y E el tambor con menor fuerza. Sabiendo esto se modifica el canal de drums para que use solo esas notas y ya está.

    Si bien es cierto, hay más notas con otros instrumentos (como triángulos), usa el ASM de prueba que se menciona arriba para poder localizar otras notas que, a tu criterio, puedan ser útiles para representar un sonido que no sea un Tambor.

    Por ejemplo, así estaba el principio de un canal de Percusión antes de que yo lo modificara:


    Y así quedó tras modificarlo, usando los 5 Tambores del drumkit 5.


    Finalmente decir que una nota en el canal de drums durará lo mínimo siempre, es decir,
    db (ntC | 15) y db (ntC | 0) sonarán exactamente igual, solo que el primero ocupará más tiempo.

    Análogamente, db (ntC | 15) sería exactamente lo mismo que db (ntC | 0) + db (ntRst | 14)

    Sabiendo esto, nunca se deben poner descansos en el 4 canal para ahorrar espacio en la ROM. Aún así existe una excepción, que es cuando tenemos un descanso que dura más de 16 semicorcheas. Si por ejemplo tenemos
    db (ntC | 15) + db (ntC | 15) + db (ntC | 15) , pero en realidad solo tiene que sonar una nota, habría que substituir las dos últimas C por Rst.

    Eso es más o menos todo respecto a la Percusión, si quieres ir más allá podrías modificar los drumkits con ASM para que usen los 12 instrumentos que tú quieras, pero eso es bastante más avanzado.
  8. Ahora ya acabamos con Anvil Studio. Lo siguiente es abrir MIDI2gsc, nos pedirá uno a uno los midis de nuestra canción, se los damos en el orden que decidimos antes.

    Esto nos habrá creado un archivo .asm con los datos de la canción dentro de la carpeta donde estaba el primer MIDI. Lo abrimos con Notepad++ (O cualquier editor decente) y veremos esto:


    Ahora explicaremos los comandos que se pueden usar en el fichero .asm (puedes ver el fichero pkms.asm donde aparecen todos los comandos posibles):

    • SONG_START EQU $0, esto es la dirección que se usará para localizar el loop. Simplemente pon la dirección donde se va a insertar la canción, de esta forma, el loop se podrá insertar correctamente.
    • pkmsSetTempo 0, $70 es el tempo de la canción, lo más habitual suele ser un valor entre 60 y 80, pero eso depende del tempo que se usara en Anvil Studio. Ten en cuenta que si usaste DyD probablemente el tempo valga entre 30 y 50.

      Este comando se puede usar en cualquier momento de la canción, pudiendo crear un efecto interesante donde el tempo poco a poco crece/decrece. Sin embargo asegúrate que un cambio de tempo nunca sucede mientras una nota se está reproduciendo, para asegurarte, mira dónde estas insertando el cambio de tempo, y comprueba que, en ese específico instante, en los 4 canales, o hay un descanso o una nota está a punto de sonar / acaba de finalizar de sonar. Si no haces esto habrá glitches de desincronización.
    • pkmsSetVolume $77, es volumen general, lo podemos dejar así de momento, y bajarlo/subirlo tras hacer las pruebas.
    • Podemos hacer que la canción suene en stéreo escribiendo lo siguiente:

      db $EF
      db $xx

      Los valores de xx pueden ser:
      • FF : El canal sonará en Mono (ambos lados igual)
      • F0 : El canal sonará por la izquierda
      • 0F : El canal sonará por la derecha

      Esto se puede cambiar en cualquier momento de la canción, si eres creativo puedes crear efectos interesantes con esto. Pero ten en cuenta que esto se ignorará completamente si el jugador tiene el juego puesto en modo "Mono".
    • pkmsSetDuty cambia la modulación del canal, donde 0 = 12.5%, 1 = 25%, 2 = 50% y 3 = 25% invertido. Yo suelo usar el 2, pero depende de la canción.
    • pkmsSetNtr $C, 11, 8 es un comando muy importante: La C representa la velocidad innata del canal, independiente del tempo, el 11 representa el volumen propio del canal, y 8 representa la duración de la nota. Lo mejor es experimentar con estos valores según lo que oigamos en las pruebas.

      El tercer argumento de este comando (el 8 en el ejemplo de arriba) es muy útil, ya que nos permite hacer que las notas crezcan o decrezcan su volumen en el tiempo.

      Un valor entre el 0 y el 7 hará que la nota poco a poco decaiga desde su volumen inicial (el segundo argumento) hasta el silencio, cuanto menor sea el número más rápido decaerá.

      El valor 8 hará que la nota tenga un volumen constante

      Un valor entre 9 y $F hará que la nota poco a poco crezca desde su volumen inicial hasta el volumen máximo (correspondiente a poner $F en el segundo argumento)

      Veamos esto con un ejemplo:



      Se puede notar al principio de esa canción cómo se usan notas que crecen en volumen y luego decrecen

      Todo esto lo está reproduciendo el primer canal, así es como está el fichero ASM (Imagen con explicaciones) :

    • pkmsSetVel 1,2 : Este comando solo se usa en el tercer canal (Wave). Recibe dos argumentos, el primero nos indica el volumen del canal, y el segundo nos indica que tipo de instrumento sonará en el canal.

      El primer argumento puede ser contra intuitivo, ya que cuanto menor sea el valor mayor volumen tendrá. Desgraciadamente este valor es poco utilizable ya que a partir de 3 el canal es casi inexistente. Generalmente solo vas a usar 1 ó 2 en el primer argumento.

      El segundo argumento dirá qué instrumento se usará para el canal, lo mejor es probar con distintos valores y ver cual suena mejor, ten en cuenta que los valores más altos suenan más fuerte. Los más comunes son el 2 y el 4.

      En ocasiones puede ser útil probar un valor alto y hacer que se transforme en el canal principal de la canción durante un tramo. Un ejemplo de esto podría ser éste (de 0:11 a 0:24):



      Eso que se oye es el efecto de pkmsSetVel 1, 10 (durante el resto de la canción es pkmsSetVel 1, 2)
    • pkmsSetMod : Esto creará un efecto de Vibrato, lo que hace es que la nota suene ondulada, aproximadamente como una onda sinusoidal

      Recibe 3 argumentos:
      • El primero es un valor que ocupa 1 byte entero, y es el retardo que esperará vibrato para aplicar su efecto.
      • El segundo es un valor que ocupa medio byte, y es la velocidad del efecto. Si miramos el link de antes y vemos la representación de una onda sinusoidal, este argumento sería el Período de la onda. Cuanto mayor sea más rápidamente variará el volumen.
      • El tercero es también un valor de medio byte, y es la cantidad de variación del efecto. Nuevamente mirando la representación gráfica de una onda sinusoidal, este argumento sería la Amplitud de onda. Cuanto mayor sea mayor será la diferencia de volúmenes.

      Ejemplo : pkmsSetMod $10, $F, 2
  9. Ahora tenemos que insertar los silencios entre notas separadas. Esto tiene que hacerse porque el generador del fichero ASM asume que si tras una nota no hay nada, la nota que estaba antes seguirá hasta que se encuentre otra nota distinta o acabe la canción.

    Gráficamente Imagen Importante:


    Vamos por números:

    • El 0 nos muestra lo que es el espacio de una octava, cuando nos salimos de una octava a una nota fuera de ella (solo verticalmente), debemos indicárselo a la game boy, en este caso vemos que la primera operación es db oct2 , ya que estas notas que muestro no son el comienzo de la canción, y antes de la nota '2' había notas más arriba. Puede verse en el documento con las lineas azules separando entre ocatavas,
    • El 1 nos indica el tamaño que representa a la nota más pequeña, la semicorchea
    • Del 2 al 11 son notas con la mínima duración (semicorcheas), se corresponden a los números del documento de la derecha en la imagen. Por ejemplo la 2 es ntF# | 0 , ntF# nos indica el tono de la nota, que al verla en la imagen se ve que corresponde con F#, y 0 es la duración. Como se puede ver, 0=1 , 1=2 , etc hasta 15=16. Esto quiere decir que si una nota dura 1 semicorchea, se apuntará como 0 debido a como se almacena esto en 4 bits. (Si apuntáramos de 1 a 16, para representar el 16 necesitaríamos 8 bits (0001 0000), apuntando del 0 (0000) al 15 (1111) solo necesitamos 4 bits.
    • La nota 12 vemos que tiene de duración 1 en el código asm.
    • La nota 13 es un descanso (ntRst) que tiene de duración 1. ESTO es lo que tienen que arreglar. Esto está así porque yo lo edité. Pero normalmente nos hubiera mostrado, en la nota 12, db (ntF# | 3) , y luego pasaría a la nota 14. Esto causaría que la nota 12 dure el doble, y que la 14 suene justo después, que no es lo que queremos.
    • Las notas 14 y 15 son normales, después de la 15 cambiamos de Barra (la barra verde) , cada barra tiene 16 semicorcheas. Cada vez que decimos lo que dura una nota podemos salirnos de la barra, pero cuando vayamos a la siguiente ten en cuenta que empezamos más adelante (se verá con detalle con el 17).
    • La nota 16 originalmente duraba lo que dura la 16 + lo que dura la 17 + lo que dura la 18. Esto es debido a lo que dije antes. Originalmente el documento asm pondría ntC | 15 y luego en la barra siguiente ntC | 14 y luego ntC# | 0 (lo que es la nota 19). Lo primero es cortar esa ntC a su valor real , 5 , ya que ocupa 6 semicorcheas.
    • Ahora, el 17. Todo ese espacio como vimos antes era antes el tono C de la nota 16. Para calcular los ntRst que debemos poner, operamos así:
      • En primer lugar contamos cada barra vacía como 16, en este caso hay 0.
      • Después sumamos a lo que teníamos los espacios de la primera y última barra, en este caso hay 10 espacios en la primera barra y 14 en la última.
      • Tenemos 0*16+14+10, ahora restamos 1 a cada operando.
      • Tenemos 0*15+13+9, ahora sumamos y nos da 22
      • Ahora le restamos 15 a este número, nos da 7, por lo tanto debemos poner un descanso de duración 15, y otro de duración 7.
      • Ejemplo: si hubiéramos encontrado 7 barras, 5 vacías, la primera tuviera 8 espacios y la última 10:
        1. 16*5+8+10
        2. 15*5+7+9 = 91
        3. 91/15 = 6.066
        4. 6*15 = 90
        5. 91-90 = 1
        6. Pondríamos 6 (ntRst | 15) y 1 (ntRst | 1)
      • Como podemos observar entre los dos ntRst hay separación de barras. Esto se debe a que tras el primer silencio de 16 semicorcheas, nos pasamos a la siguiente barra (Exactamente donde el marcador marrón indica). Entonces el siguiente descanso de 8 semicorcheas se pone tras el cambio de barra, aunque estemos ya a la mitad de ésta. Habría que hacer lo mismo para nuestro ejemplo de antes, Pondríamos separaciones de barras entre cada (ntRst | 15) y habría que ver dónde nos localizamos tras el (ntRst | 0).
      • Como podemos ver el Channel_Loop está ahí, debido al "[" que pusiéramos antes con el cue.
    • En eso consistirá nuestro trabajo con el asm, asegurarnos de que todas las notas acaban cuando tienen que hacerlo. Podríamos haber insertado manualmente los silencios como notas con volumen 1 una por una, pero puede llevar más tiempo y ser más prole a errores.
    • Al final de cada canal asegurémonos de que pone
      pkmsJump Channel#_Loop + SONG_START (siendo # el número del canal ; 1 , 2, 3 ó 4)
  10. Podemos usar el programa MAF para simplificar este trabajo. El link de descarga proporcionado abajo explica detalladamente lo que puede hacer este programa, pero sus usos más útiles serían:

    • Comprobar que los 4 canales tienen la misma cantidad de notas
      Si usamos la 4 función de MAF, podremos ver cuantas notas tiene cada canal, deben tener exactamente las mismas, si no el loop se desincronizará.
    • Simplificar el trabajo en una zona donde todas las notas son iguales
      Por ejemplo aquí :


      Podemos ver muchas notas de duración 0, con descansos de duración 0 entre cada una. Esto en el asm aparecerá sin los descansos por las razones ya explicadas. Este es el caso perfecto para usar MAF.

      Iríamos a la función 2, si le indicamos el canal, entre que barras se encuentran nuestras notas, y la duración máxima de nota de 0. El programa nos actualizará el fichero poniendo todos los descansos correspondientemente.

      Esto funciona porque todas las notas tienen la misma duración, entonces, como le dijimos que la duración de nota máxima es 0, y el programa va a encontrar todas las notas de duración 1, lo que hará será sobre-escribir dichas notas poniéndoles de duración 0, y tras la nota pondrá un descanso correspondiente a la resta entre la la duración encontrada y la duración máxima dada (en este caso todo 0s)
  11. Ahora debemos importar el fichero asm al ROM. Primero nos conseguimos una ROM limpia de G/S/C, y luego ejecutamos gscImport.exe

    NOTA : Para asegurarte de que funciona, mete gscImport , todos sus complementos y el fichero asm en una carpeta en el escritorio que no tenga espacios ni caracteres raros (como tildes , ñ's, etc..). También asegúrate de que el fichero asm no tiene ningún espacio.

    Tras abrir gscImport le damos a donde pone Inject music into ROM. Después le damos a Load ASM y seleccionamos nuestro fichero asm. Tras esto le damos a Load RBY ROM y seleccionamos la ROM donde vamos a insertar la canción. En Inject offset ponemos el offset donde insertamos la canción, en nuestro caso $1FC00C. En Pointer (Hex) Pondríamos el 3-byte pointer al offset que acabamos de poner. En nuestro caso sería 7F 0C 40 (ya que hay que invertir los dos ultimos bytes). Para calcularlo usamos C-Pointer. Por último le das a "Compile BIN File" Si gscimport te sigue dando error, comenta con una screenshot de lo que te dice

    Ahora que ya tenemos la canción arreglada e insertada, debemos decirle al juego que la reproduzca. Primero debemos saber qué canción substituir (ya que no nos molestaremos ahora de repuntar la lista de cabeceras). Aquí tienes una lista de las canciones en el juego (de 00 a 5D en G/S , de 00 a 66 en Cristal).

    También se puede ver en este Spoiler:

    Music
    00 nothing
    01 title screen
    02 Route 1
    03 Route 3
    04 Route 12
    05 Train Ride
    06 Kanto Gym Leader fight
    07 Kanto Trainer fight
    08 Kanto Wild Pokémon fight
    09 Pokémon Center
    0A Look! Hiker
    0B Look! Lass
    0C Look! Officer
    0D Heal Pokémon sound
    0E Lavender Town
    0F Route 2
    10 Mount Moon
    11 Show Me Around
    12 Game Corner
    13 Bicycle
    14 Hall of Fame
    15 Viridian City
    16 Celadon City
    17 Trainer Victory
    18 Wild Pokémon Victory
    19 Gym Leader Victory
    1A Mount Moon Square
    1B Gym
    1C Pallet Town
    1D Professor Oak’s Pokémon Talk
    1E Professor Oak
    1F Rival
    20 After the Rival Fight
    21 Surfing
    22 Evolution
    23 National Park
    24 Credits
    25 Azalea Town
    26 Cherrygrove City
    27 Look! Kimono Girl
    28 Union Cave
    29 Johto Wild Pokémon
    2A Johto Trainer Fight
    2B Route 30
    2C Ecruteak City
    2D Violet City
    2E Johto Gym Fight
    2F Champion Fight
    30 Rival Fight
    31 Rocket Fight
    32 Elm’s Lab
    33 Slowpoke Well
    34 Route 29
    35 Route 36
    36 S.S. Aqua
    37 Look! Youngster
    38 Look! Beauty
    39 Look! Rocket
    3A Look! Pokémaniac
    3B Look! Sage
    3C New Bark Town
    3D Goldenrod City
    3E Vermilion City
    3F Pokémon Channel!
    40 Poké Flute Channel
    41 Tin Tower
    42 Sprout Tower
    43 Burned Tower
    44 Lighthouse
    45 Lake of Rage
    46 Indigo Plateau
    47 Route 37
    48 Rocket Hideout
    49 Dragon’s Den
    4A Johto Wild Pokémon (nighttime)
    4B Ruins of Alph radio signal
    4C Successful Capture
    4D Route 26
    4E Mom
    4F Victory Road
    50 Pokémon Lullaby
    51 Pokémon March
    52 Gold/Silver Opening
    53 Gold/Silver Opening (part 2)
    54 New Game or Continue?
    55 Ruins of Alph (inside)
    56 Rocket theme (overworld)
    57 Dancing Hall
    58 Counting the Points (Bug‐Catching Contest)
    59 Bug‐Catching Contest
    5A Lake of Rage, Rocket’s radio signal
    5B Printer
    5C Post‐credits
    5D Clair
    5E

    Estas son solo de Cristal:

    5F Mobile Adapter
    60 Buena’s Password
    61 Look! Mysticalman
    62 Crystal Opening
    63 Battle Tower theme
    64 Wild Pokémon Battle (Raikou/Entei/Suicune)
    65 Battle Tower lobby
    66 Pokémon Center

    Una vez escogida, debemos ir a la lista de 3-byte punteros a los cabezales de las canciones. Como mi canción es de Batalla de líder de gimnasio, iré a la 2E porque quiero ver como se sincroniza el audio con las animaciones. Si quereis probar rápidamente una canción podéis substituir la del Menú inicio (01).

    Dichos punteros a los cabezales se encuentran en la dirección $E906E
    La fórmula para encontrar el nuestro sería

    Código:
    E906E + 3*N
    Siendo N la posición de nuestra canción

    En mi caso sería la posición $E90F8 , la 01 sería la $E9071.

    Una vez localizado el puntero, escribiremos la dirección del cabezal. Nosotros insertamos la canción en $1FC00C para tener desde $1FC000 hasta $1FC00B libres para poner la cabecera. Debido a esto escribimos $1FC000 usando C-Point y vemos que el puntero a ese offset es 7F4000. Esto es [Bank][Pointer] entonces escribimos 7F 00 40 ya que el puntero intercambia los bytes de lugar. 7F siendo el Bank y 00 40 el puntero invertido.

    Ahora nos vamos a dicho cabezal que aún no hemos creado. El cabezal se compone de los siguientes valores:

    [AB][XX][XX][01][YY][YY][02][ZZ][ZZ]

    Donde :

    • 'A' Es la cantidad de canales , 0 = 1 , 4 = 2 , 8 = 3 y C = 4. En nuestro caso pondríamos un 8.
    • 'B' Nos dice a que canal corresponde el pointer siguiente , 0 = 1 , 1 = 2 , 2 = 3 y 3 = 4. En nuestro caso ponemos 0. Entonces nos quedaría este byte (el $1FC000) como $80.
    • XX XX Nos dice el puntero al primer canal (ya que dejamos 0 en el byte de antes), como lo insertamos en $1FC00C, el puntero será 400C, entonces, debido a que tenemos que invertir los dos bytes de posición ponemos 0C 40.
    • 01 Nos dice a que canal corresponde el siguiente puntero, en este caso el 01 nos indica que será del segundo canal. Lo ponemos tal cual.
    • YY YY Puntero al segundo canal (ya que dejamos 01 en el anterior byte). Para saber donde empieza dicho canal hacemos una búsqueda de los bytes FF y DB (Ver imagen)


      Nos los encontrará y el offset donde está el DB es donde comienza el segundo canal. Esto se debe a que FF corresponde a pkmsEndSound (que como vimos está al final de cada canal en el fichero asm), y DB corresponde a pkmsSetDuty (que está en varios canales, por eso lo buscamos con FF) y pkmsSetDuty está al principio del canal 2.
    • 02 Igual que el 01 , pero para el tercer canal.
    • ZZ ZZ Igual que con YY YY, solo que para el canal 3 en vez de buscar FF DB, buscamos FF D8.

      Recuerda invertir los punteros.

      En mi caso el cabezal me quedó así : 80 0C 40 01 3B 43 02 03 44 00 00 00 (comienzo canal1)

    Y ya está, ahora ejecutamos la ROM y probamos la canción. Tras oírla podemos cambiar detalles en el asm como el Tempo, el volumen, la modulación, etc. Si cambias valores de este estilo simplemente vuelve a insertarla con gscImport y ya está. Pero si eliminas o añades alguna cosa, revisa los punteros del cabezal.

Agradecimientos:​
@~Ruki! , @javcdark , @Globo Globito , @Gallego13
Y a los creadores de las herramientas usadas

Descargas de los Programas:

GSCimport + Midi2GSC : Aquí

Anvil Studio : Aquí

C-Point : Aquí

NotePad++ : Aquí

VBA-M : Aquí

GamBatte : Aquí

BGB : Aquí

GoldFinger : Aquí

MAF : Aquí

Video de como me quedo al final mi canción en el juego (el tempo esta cambiado para que vaya mas rápido):



Cualquier Error, duda o problema por favor coméntenlo abajo.
 
Última edición:

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Joer, que bien te quedó el tuto, la verdad el que hice yo fue improvisado, y siendo muy nuv en el asunto de las midis, ya que veo el porque no me quedaba bien nunca una midi, gracias por tomarte el tiempo de hacer un tuto re bien elaborado c:
 
  • Me gusta
Reacciones : Pum

Gelatina

ENTP 6w5
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Antes que nada felicidades por este excelente tutorial.

¿Pero si en lugar de VBA-M recomiendas BGB o Gambatte?. El sonido de estos 2 se asemeja mas una Game Boy real que VBA-M.
 
  • Me gusta
Reacciones : Pum

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Antes que nada felicidades por este excelente tutorial.

¿Pero si en lugar de VBA-M recomiendas BGB o Gambatte?. El sonido de estos 2 se asemeja mas una Game Boy real que VBA-M.
No sabía eso de BGB o Gambatte, aún así. Las posibilidades de que alguien que descargue tu rom/ips y la juegue en uno de esos emuladores es más baja a que lo haga en VBA-M debido a su mayor popularidad (no tengo los datos, quizá esto no sea cierto, pero lo sospecho) , si bien podemos usar esos emuladores para poder comprobar más fielmente como sonaría en una Game Boy real, dudo que tu ROM hack acabe en un cartucho físico de Game Boy.

En breve añadiré esos datos porque no están de menos, gracias por la info.
 

Gelatina

ENTP 6w5
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Pum dijo:
NOTA : El uso del canal nº de 4 de "Drums" no se contempla aquí. Si alguien sabe como funciona este canal, que lo aporte si es posible.
Solo hay que poner el byte $E3 XX (0-5) (Crystal) para seleccionar un drumkit. Y luego tocar una nota.

http://whackahack.com/foro/t-12373-pag23#post312287

Por ejemplo:

$E3 03 ; Seleccionar Drumkit $03
$D8 0C ; Notetype
$43 ; D# Kick
$43 ; D# Kick
$33 ; D- Snare
 

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Solo hay que poner el byte $E3 XX (0-5) (Crystal) para seleccionar un drumkit. Y luego tocar una nota.

http://whackahack.com/foro/t-12373-pag23#post312287

Por ejemplo:

$E3 03 ; Seleccionar Drumkit $03
$D8 0C ; Notetype
$43 ; D# Kick
$43 ; D# Kick
$33 ; D- Snare
Uhm interesante, investigaré el tema cuando tenga tiempo.

Aún así habría que ver que configuraciones se pueden aplicar y cuales no (de modulación, volumen, etc), ya que por ejemplo el canal wave y los dos canales pulse tienen distintas configuraciones.

Porque no me quedan claras varias cosas, puede el canal drums aceptar notas de cualquier tono/tiempo/octava ? Se puede cambiar de drumkit en medio de la canción? Que tipos de "Sonidos" tiene? (Lo que dices de Kick,Snare) y como se diferencian, permite loop como los otros canales? etc...

Si lo ves posible pon un ejemplo más completo y explicado, te o agradecería enormemente.
 

Gelatina

ENTP 6w5
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada

Pum dijo:
[...]

Aún así habría que ver que configuraciones se pueden aplicar y cuales no (de modulación, volumen, etc), ya que por ejemplo el canal wave y los dos canales pulse tienen distintas configuraciones.
Luego escribo una lista mas o menos completa sobre los efectos.

Acá esta. (Luego edito otra ves).

30/09/15

Pum dijo:
Porque no me quedan claras varias cosas, puede el canal drums aceptar notas de cualquier tono/tiempo/octava ? Se puede cambiar de drumkit en medio de la canción? Que tipos de "Sonidos" tiene? (Lo que dices de Kick,Snare) y como se diferencian, permite loop como los otros canales? etc...
No permite octavas ni cambios de drumkit. Pero si permite loops, cambios de Tempo y talves Modo 15 o 7 steps.

Solo tiene de sonidos percusión, si quieres la lista completa mira este enlace https://github.com/kanzure/pokecrystal/blob/master/audio/engine.asm#L2818. (Nota: Arriba están la Wavetables, instrumentos del CH Wave.)

Pum dijo:
Si lo ves posible pon un ejemplo más completo y explicado, te o agradecería enormemente.
No hay nada mas que explicar.
 
Última edición:
  • Me gusta
Reacciones : Pum

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial)

Me grabé haciendo una MIDI para que se vea mejor el proceso de elaboración. Los videos son largos y muchas veces se aconseja usar x2 speed.

  1. Parte 1:
  2. Parte 2:
  3. Parte 3:
  4. Parte 4:
  5. Parte 5:
  6. Parte 6:
  7. Parte 7:
 
Última edición:
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))



Yo me quedé hasta el paso de la inserción. Ocurre esto.
 

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Yo me quedé hasta el paso de la inserción. Ocurre esto.
Pasa por lo que mencioné en el tuto. El programa tiene problemas para leer directorios. Simplemente haz que el archivo asm a insertar no tenga ni espacios ni tildes. (Se ve que tu fichero tiene espacios, y abajo de todo ves que intenta abrir "Canal" , cuando el archivo se llama "Canal 1 con Loop.asm")
 
Última edición:
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Pasa por lo que mencioné en el tuto. El programa tiene problemas para leer directorios. Simplemente haz que el archivo asm a insertar no tenga ni espacios ni tildes. (Se ve que tu fichero tiene espacios, y abajo de todo ves que intenta abrir "Canal" , cuando el archivo se llama "Canal 1 con Loop.asm")
Cambié el nombre del archivo, y funcionó. :D
Si pude hacer la inserción.
Pero, no me reproduce la canción (cambié los punteros del offset de la canción del inicio, pero no se escucha nada).

Por cierto, ¿la canción forzosamente debe tener un intro? Si es así, eso explicaría porque no se escucha mi canción. .-.
 
Última edición:

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Cambié el nombre del archivo, y funcionó. :D
Si pude hacer la inserción.
Pero, no me reproduce la canción (cambié los punteros del offset de la canción del inicio, pero no se escucha nada).

Por cierto, ¿la canción forzosamente debe tener un intro? Si es así, eso explicaría porque no se escucha mi canción. .-.
La canción no necesita intro. ¿Te acordaste de cambiar los punteros dentro de la cabecera de la canción para que apunte a cada canal?
 
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

La canción no necesita intro. ¿Te acordaste de cambiar los punteros dentro de la cabecera de la canción para que apunte a cada canal?
Si, recordé hacerlo.

Decidí insertar la canción en el Offset x1cf03c para tener espacio para el cabezal.

Cambié los valores del cabezal de la canción del intro (que se encuentran en el offset xe9071) para que colindaran con el del cabezal de la nueva canción.

Hice el cabezal como estaba especificado, y aún así, no suena. Lo raro es que ni el intro se escucha. ¿Qué estoy haciendo mal? :I

PD: ¿Es normal que se agregue una cantidad exagerada de espacio en la ROM? .-.
 
Última edición:

xXJurassXx

Técnico Informatico
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Muy buen Tutorial, bien explicado y perfecto para la gente que quiera meter sus propias midis!

Att: xXJurassXx
 
  • Me gusta
Reacciones : Pum

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Si, recordé hacerlo.

Decidí insertar la canción en el Offset x1cf03c para tener espacio para el cabezal.

Cambié los valores del cabezal de la canción del intro (que se encuentran en el offset xe9071) para que colindaran con el del cabezal de la nueva canción.

Hice el cabezal como estaba especificado, y aún así, no suena. Lo raro es que ni el intro se escucha. ¿Qué estoy haciendo mal? :I
Podrías escribirme aquí el cabezal que pusiste? Que valor pusiste en 0xE9071 ?
 
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Podrías escribirme aquí el cabezal que pusiste? Que valor pusiste en 0xE9071 ?
Ok, mi cabezal es el siguiente

Offset: x1cf030 a 1cf03b
Cabezal:

80 70 3C 01 70 FA 02 71 A8 00 00 00 (Comienza Channel 1)

Offset de la canción del intro: xe9071 a xe9073
Valores insertados a los offsets:
73 70 30, con inversión de bytes incluida. Según A-point (Chrome no me dejaba descargar C-point porque tiene virus, y A-Point tiene tanto para las versiones metálicas como las versiones de gemas), el Pointer del offset x1cf030 (que viene siendo el cabezal de la canción) es 733070.

Por cierto, una cantidad exagerada de capacidad entró a la ROM. ¿Es normal?
Pasó de 2 MB a 7 MB con la inserción.
 

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Ok, mi cabezal es el siguiente

Offset: x1cf030 a 1cf03b
Cabezal:

80 70 3C 01 70 FA 02 71 A8 00 00 00 (Comienza Channel 1)

Los punteros están al revés. Tendría que ser 80 3C 70 01 FA 70 02 A8 71 00 00 00

Offset de la canción del intro: xe9071 a xe9073
Valores insertados a los offsets:
73 70 30, con inversión de bytes incluida. Según A-point (Chrome no me dejaba descargar C-point porque tiene virus, y A-Point tiene tanto para las versiones metálicas como las versiones de gemas), el Pointer del offset x1cf030 (que viene siendo el cabezal de la canción) es 733070.

El puntero de 3 bytes que editaste en xE9071 es [Bank] [Pointer], Pointer es la dirección dentro del bank indicado, pero invertida. En tu caso es 1CF030 es Bank = 73, y Pointer : 7030. Como hay que invertir el pointer, te queda 73 30 70. Es posible que A-Point te dé el puntero ya invertido.

Truco para saber si un puntero no invertido está bien : El primer byte tiene SIEMPRE que tener un valor entre 40 y 7F, esto es así ya que 1 bank ocupa 4000 bytes. Por esto sé que el puntero es 7030 , y 3070 es el valor que has de poner.

C-Pointer a mi también me avisa de virus, pero es un falso positivo. Si quieres usar A-Point vale igual


Por cierto, una cantidad exagerada de capacidad entró a la ROM. ¿Es normal?
Pasó de 2 MB a 7 MB con la inserción.

Eso me tiene pasado y no se porqué pasa, parece un bug grave aunque la ROM a mi me funciona. De todas formas hasta que sepa porqué pasa eso yo meto las canciones en ROMS de prueba.
Respuestas en Negrita. Editaré el Tuto para aclarar esto mejor.
 
Última edición:
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Con VideoTutorial (27-11-2015))

Respuestas en Negrita. Editaré el Tuto para aclarar esto mejor.
Tenías razón, los pointer estaban al revés. Me sorprende lo que se puede llegar a la GBC. :00

Muy buen tutorial. Funcioonó al 100%. :DD:heart:
 
  • Me gusta
Reacciones : Pum

Pum

GBCero
Respuesta: GBC | Otros | Inserción de MIDI's detallada y ejemplificada (Actualizado 22/07/2016)

Bueno he actualizado completamente el tutorial para que quede un poco mejor presentado con Spoilers.

También añadí bastante información sobre el canal de Percusión, uso de MAF, comandos usables al editar el fichero ASM y explicación del truco de Doblar y Dividir.
 
Arriba