tuts_gbc
Thread Id: 26720
Thread Name: [GBC]Inserccion de Melodias MIDI
#0
G0LD_ZTHVARD0X! 27515
=====OJO, este es un tutorial semicompleto, debido a que aun faltan detalles para no sobreescribir datos, pero de momento si es posible insertar midis correctamente=====

Bienvenidos, este es uno de mis mayores logros en el hacking GBC, es insertar una melodia al rom, cabe mencionar que para hacerlo facil debemos de contar con el MIDI2GSC de Froggestspirit.

========================
Objetivo del tutorial
========================
Poner nuestra propia musica al juego, es algo dificil, pero esto le dara mas estilo a nuestro hack, asi que esto es algo bastante necesario

========================
¿Que necesitamos?
========================

• Gold Finger (o cualquier editor hex)
• Anvil Studio (buscadlo en google)
• A-Point
• MIDI2GSC de Froggestspirit
• Una MIDI de 4 canales
• Wordpad
Este documento sobre cabezales de musica

==========================
Paso 1: Separando los canales
==========================
Primero debemos de tomar una melodia MIDI, yo usare para el tutorial la melodia de Ciudad Celeste de HG/SS adaptada a 4 canales, la abriremos con el Anvil studio, e inmediatamente veremos la lista de canales e instrumentos, deben de ser solo 4 canales los que deben mostrarse (si hay mas deben de reorganizar la MIDI para que queden solo 4l), ahora lo que haremos es separar la melodia por canal, osea guardaremos cada canal como una sola MIDI, quedando MIDI1.mid, MIDI2.mid, MIDI3.mid y MIDI4.mid.

Para esto en anvil studio solo le damos click derecho a los canales que se eliminaran, y le damos a "Delete Track", quedando solo un canal, y le damos click a file>Save as a MIDI format 0, recordemos que es obligatorio que cada canal este en ese formato, guardamos y listo.

Repetimos el proceso para los otros tres canales, y estamos con el paso 1.

===========================
Paso 2: Loopeando Los Canales
===========================
ahora viene un paso muy dificil, que es loopear la melodia, ya que debemos de loopear cada canal manualmente con anvil studio, para ello abrimos el primer canal, y luego nos iremos en anvil studio a view>piano roll editor

Ahora veremos las notas del canal 1, ahora reproducimos la melodia, y cuando lleguemos al punto donde queremos que inicie la melodia, pausamos rapidamente, y nos iremos a donde dice "cue" y le daremos "add", se nos desplegara una ventana para poner el nombre del loop, ahi pondremos el simbolo de abrir corchete, osea "[", le damos Ok, y ya hemos insertado el inicio del loop

Ahora volvemos a reproducir la melodia, y cuando lleguemos a donde queremos que termine la melodia le damos rapidamente pausa, y volveremos a darle a "add cue", esta vez ingresaremos "]" que es donde acaba el loop, le damos ok, guardamos como "Midi format 0" y listo, tenemos nuestro loop insertado, repetimos el proceso para el resto de canales.

============================
Paso 3: Ensamblando la Melodia
============================
Ahora que tenemos los 4 canales debidamente loopeados, procedemos a ensamblar la melodia, para ello abriremos la aplicacion "Midi2gsc.exe"(requiere .Net 4.0) y se nos abrira una ventana de seleccion de archivos, ahora buscaremos en la pc donde dejamos los canales, seleccionamos el primer canal, luego nos pedira los otros tres canales, al seleccionar los canales se cerrara el programa, pero nos ha creado un archivo con el nombre de nuestra melodia con formato .asm, ahora copiaremos ese archivo a la carpeta "songs" que esta dentro de la carpeta donde tenemos el MIDI2GSC, y ya tenemos ensamblada la melodia.

=========================
Paso 4: Organizando el .Asm
=========================
Ahora debemos de modificar el archivo .asm que nos generaron, para ello debemos de usar wordpad, asi que abrimos el programa, y abriremos el archivo .asm, ahora se nos abrira como un texto comun, ahora debemos irnos a donde dice "SONG_START_EQU $0" y reemplazaremos el 0 por la offset donde pondremos la Melodia, usando este documento sabemos donde estan los cabezales de cada melodia, como yo reemplazare la melodia del menu continue/new game me ire a $F7971, donde empieza segun el puntero el primer canal, quedando ahora "SONG_START_EQ $F7971", guardamos y listo, con esto el loop quedara perfecto al ponerlo al ROM.

====================================
Paso 5: Generando el Binario e Insertando
====================================
Ahora nos dispondremos a crear el archivo binario que se insertara al ROM, para ello vamos a la carpeta donde tenemos el MIDI2GSC, y abriremos la aplicacion "gscimport.exe" ahora se nos abrira el programa, y nos situaremos debajo de "ASM > BIN", marcaremos la casilla "inject to rom" y mas arriba le damos "load asm" y se nos abre la ventana de navegacion, y nos iremos a songs, y ahi seleccionamos el archivo .asm de nuestra melodia, ahora minimizamos y abrimos a-point, y calculamos el puntero de 3-bytes donde pondremos la melodia, lo copiamos, y volvemos al gscimport, y en el primer campo,debajo de la direccion del archivo .asm, pondremos la direccion de dondre pondremos la MIDI, y en el campo de abajo pondremos el puntero de 3-bytes de la direccion de arriba, y le damos al boton "Make BIN", nos dara una notificacion que se compilo el .bin correctamente, y luego un aviso que la MIDI fue inyectada al ROM, ahora la melodia esta dentro del ROM.
============================
Paso 6: Repunteando Canales
============================
Ahora abriremos el ROM con gold finger, y nos iremos al cabezal de la melodia, en mi caso $F7900, los datos del cabezal estan organizados asi:

vvww01xx02yy03zz

Que se traduce como:
vv= byte random
ww=puntero de 2-bytes del canal 1
xx=puntero de 2-bytes del canal 2
yy=puntero de 2-bytes del canal 3
zz=puntero de 2-bytes del canal 4

Ahora con el documento de melash (traducido por jepsen) sobre el formato de musica de GBC nos dispondremos a reorganizar manualmente los 4 canales de la melodia, ahora los reorganizaremos, guardamos y ¡listo! ya tienes insertada la MIDI en tu juego ^^

Ahora abre tu rom y vete al area donde pusiste tu midi, y comprueba tu mismo como quedo tu melodia. Si organizaste mal la melodia o si loopeaste mal, vuelve a repetir el proceso.

Es todo, recuerden que aun se investiga como poner una melodia sin sobreescribir ningun dato, asi que si lo saben, ¡compartanlo perras!
#1
G0LD_ZTHVARD0X! 27515
Gracias a Data Crystal he encontrado que en 0xE906E se ubica la tabla de punteros de los cabezales de cada midi, y como estan dispersos por varios bancos la estructura es de punteros de 3-bytes, por lo cual podemos poner una MIDI donde sea.

Con esto concluyo la investigacion, y muevo q tutoriales el tema.
#2
javcdark 15833
Iniciado por Faitsu

Ahora abriremos el ROM con gold finger, y nos iremos al cabezal de la melodia, en mi caso $F7900, los datos del cabezal estan organizados asi:

vvww01xx02yy03zz

Que se traduce como:
vv= byte random
ww=puntero de 2-bytes del canal 1
xx=puntero de 2-bytes del canal 2
yy=puntero de 2-bytes del canal 3
zz=puntero de 2-bytes del canal 4


vengo a explicar mejor esto

vv en realidad seria algo como ab
a determina el numero de canales, por lo que no es forzosamente que sean 4 canales.
para determinar esto se hace de una forma algo rara
00?-1 canal
40- 2 canales
80- 3 canales
C0- 4 canales

ahora b, determina el numero de canal (de 0 a 3), por lo que los siguientes 2 bytes son el pointer de ese canal, en este caso el canal 1

para que quede mejor explicado pongo un ejemplo

[C0][ww] [01][xx] [02][yy] [03][zz]
[4 canales | numero de canal (1)][pointer del canal1][numero de canal (2)][Pointer del canal2]...

cuando logre recordar mas cosas las pondre aqui para tener un mejor tutorial ;)
#3
Chamber4315♪ 26330
Vez [MENTION=15833]javcdark[/MENTION], nada te cuesta aportar jaja.

Creo que con esa explicacion resulta un poco mas simple el tutorial, pero a decir verdad me resulta complicado aun.

GALLEGO DONDE ESTAS?¡??????