Charla tecnológica de Paul – LSDj 5.3.5_4x. Parte uno: Overclocking y teoría del oscilador dual

- Posted October 5th, 2018 by

Artículo Original de PainPerdu. Traducción al Español de Pixel_Guy.

¡Hola, gente hermosa, y gracias por leer la Charla tecnológica de Paul en el blog de Chiptunes = WIN!

Hoy veremos una versión muy especial del LSDj y también un método de secuenciación que no puede ser utilizado en un Gameboy con tanta frecuencia; pero que es muy popular es otras plataformas, como la NES: OVERCLOCKING ~ ♪♫.

Durante la avalancha de actualizaciones que dieron el punto de partida a esta columna en primer lugar, la comunidad trabajó duro para encontrar errores y ofrecer sugerencias para nuevas funciones. Algunas eran bastante desafiantes, parecían casi imposibles, pero aún así fueron consideradas por Johan para su integración al programa. Una de ellas fue la noción de añadir el underclocking. Indudablemente se estarán preguntando: ¿por qué hacer al Gameboy más lento de lo que ya es? Bueno, hay una limitante en el hardware del Gameboy que, en teoría, podría ser solucionada utilizando este método: el rango de notas.

Gameboy Pocket con una modificación para alterar el reloj (Variable Clock Mod).


Cava profundo, salta alto

Es un hecho bien conocido que los canales Pulse del Gameboy no pueden llegar a notas tan graves como el canal Wave, el cual nos ofrece los beneficios de una octava extra. Mientras que su capacidad para llegar a notas muy graves hace al canal WAV perfecto para bajos y diseño de kicks, también ha contribuido a hacer de esto su rol por defecto. Lo que ha tenido efectos adversos al hacer que los kicks hechos en los canales Pulse parezcan un chiste; considerados por los imbéciles puristas una especie de técnica que solo ocupan los «novatos» en LSDj (j*danse, puristas, los kicks del canal Pulse son geniales). Peor aún es que la versatilidad en el canal WAV muy a menudo se ve perdida entre los leads y la armonía, cuando podría brillar por algo más que su capacidad para generar sonidos graves.

LSDj es lo que se podría llamar un ROM para Gameboy «mejorado con soporte para color». Uno de los vínculos perdidos entre los juegos que utilizan solo la escala de grises, como Trip world, y los exclusivos para GBC, como los (asombrosos) RPGs de Harry Potter. Juegos como Pokémon amarillo, Wario land II o algunos otros títulos de «cartucho negro», están diseñados para correr en el ladrillo gris que todos conocemos y amamos; pero si los pones en un GB Color harán uso de su CPU y GPU más rápidos, mostrando así una paleta de colores muy brillantes.

El CPU del GB Color corre, aproximadamente, al doble de la velocidad de un DMG o de un GB Pocket.  Para mantener la consistencia entre plataformas, el ROM reconoce en qué plataforma se está ejecutando y ajusta la velocidad del reloj del procesador de acuerdo a la misma.

De izquierda a derecha: escala de grises, mejorado con soporte para color, exclusivo para color.

Como resultado, la configuración de tempo más baja que puedes lograr en un DMG es de 40, mientras que en un GB Color es de 80. Alguien tuvo la idea de forzar el ROM a iniciarse en modo DMG en un GB Color. Los resultados fueron interesantes, por decir lo menos. El tempo se había dividido, efectivamente, por la mitad, ¡al igual que el pitch! El canal Pulse ahora podía alcanzar una octava más abajo, aunque el costo fue reducir a la mitad la velocidad del CPU. Desafortunadamente el ROM fue ensombrecido por muchos errores y, además, no corría bien en lo absoluto. Cuando Johan recogió esta idea, todos concluimos que la única forma de alcanzar una octava extra hacia abajo era usar una modificación manual para variar la velocidad del reloj, como las que se vendían en Tursday Customs, la cual alteraría la frecuencia analógica del CPU, pero dejaría el procesamiento intacto.

Lo que pasó después; sin embargo, fue inesperado y malditamente asombroso.


Este esfuerzo llamó la tención de Johan, por lo que nos concedió una versión muy especial de LSDj.

En aquel tiempo LSDj había crecido a pasos agigantados, y la versión más reciente era la 5.3.6. Johan solo ajustó el cálculo entre el reloj del CPU y el cómo este generaba los valores de tempo y la duración de los ticks. Redoble de tambores. Aquí viene la versión 5.3.5_4x.

¡¡EL TEMPO SE MULTIPLICÓ POR ~CUATRO~!!

Sí, leyeron eso bien: por cuatro. Esto significó que en esta versión el LSDj ahora iba de 320 a 1020. La configuración de tempo más baja ahora era 65 BPM, más rápida que la más rápida de las que vienen por defecto. ¿No es eso fantástico?

Ahora, antes de entrar de lleno en la exploración de nuevas técnicas nunca antes vistas y a los terrenos de lo experimental; hay que tratar de domar a la bestia y ver cómo es el estado de las cosas en otras plataformas, como la NES y Famitracker. ¡Es hora de algo de TEORÍA!

Motor de velocidad personalizable de la NES y alcanzar el rango de sonido audible

Gracias a que los ingenieros en radiodifusión europeos son estúpidos es que existe el PAL. La versión europea de la NES tenía que trabajar con una tasa de refresco de 50 Hz, mientras que los modelos NTSC, como la NES norteamericana y la Famicon japonesa, trabajaban con una tasa de 60 Hz. A fin de reflejar dicha situación, el Famitracker presenta un cursor de motor de velocidad bastante útil, el cual no solo te permite ajustar entre los estándares PAL y NTSC, también te permite especificar una velocidad personalizable para tu sistema, ¡tan bajo como 16 Hz y tan alto como 400 Hz!

Ahora, 400 Hz, ¿no es esa la frecuencia que hace vibrar una campana? Es correcto. Solo estamos un poco lejos de la afinación estándar de la: 440 Hz. Estamos entre sol y sol#, lo que también era el caso cuando nos encontrábamos entre 50 y 60 Hz, pero con 400, ahora estamos entre lo que se llama Rango Perceptible de Audio. Hablando desde la teoría, el oído humano debería de ser capaz de percibir frecuencias desde los 20 hasta los 20,000 Hz. Mi examen de audición dice que puedo oír, aproximadamente, de 27 a 18,000 Hz. Adiós a los agudos. Cualquiera con una buena salud auditiva debería poder oír cerca de los 400. En Famitracker esta tasa de refresco es la que determina los ticks.

Supongamos que eres Quicksilver; si fueses capaz de aplaudir a la velocidad de treinta aplausos por segundo (si puedes alcanzar doce sería muy impresionante), seríamos capaces de escuchar tus aplausos, pero también un ruido de 30 Hz creado por la velocidad de los mismos. Si fueses capaz de aplaudir 440 veces por segundo, tus aplausos generarían la nota la perfectamente afinada, y esta sonaría por encima del ruido de los aplausos.

Gracias a que la velocidad de los ticks en la NES van tan alto en el rango de audio es que podemos utilizar el mismo principio en Famitracker y, ahora, ¡también en LSjJ! Intentemos hacer a esa NES aplaudir.

♥ Caso de estudio ♥

Abran una ventana con el Famitracker. Dejen la velocidad del motor a 60 Hz por ahora. Crea un instrumento de onda de pulso. Ajusta el duty cycle a 50 %, después ingresa la siguiente secuencia de volumen y haz que se repita en bucle.

Es hora de jugar con el teclado. Deberías de poder oír un loop muy rápido de un sonido de onda de pulso entrando y saliendo. Entre más alto vayas en la escala, será más notorio el ruido a 30 Hz. Yo grabé la nota do5 (C5) mientras reproducía dicho instrumento y lo puse en Audacity con fines científicos.

La primera pista es el audio directo del Famitracker. La segunda es una onda cuadrada a 30 Hz que generé en Audacity con fines ilustrativos. Se puede ver claramente al do5 comenzar y detenerse en perfecta sincronía con la onda cuadrada a 30 Hz que está debajo. La secuencia de encendido y apagado en la onda de pulso, de hecho, genera un equivalente muy burdo a una onda cuadrada; lo que, cuando se piensa, no es más que un cambio brusco en la polaridad. Hard minus, Hard plus. Hard on, Hard off.

Tengan en mente que este ruido a 30 Hz (como en la tasa de refresco de 60 Hz, ya que la onda de pulso tiene el volumen encendido cada dos ticks) se alcanzó con la velocidad estándar en el motor. Ahora ajusta el motor de velocidad a un valor personalizado e ingresa el valor 240 Hz. Reproduce la misma nota y deberías de oír un tono a 120 Hz debajo de tu do alto. Abre el instrumento de nuevo y vuelve a jugar con el teclado. Deberías de notar que en las notas si ocurre una sincronización interesante. En afinación estándar si2 (B2) es equivalente a 123.47 Hz, por lo que si tocas un si bajo con la misma configuración de volumen que genera el tono extra de 120 Hz, entonces la nota de 123 Hz y el tono extra de 120 Hz se sincronizarán hacia adentro y hacia afuera de cada una. Esto generará un sonido aproximado a dos ondas de pulso ligeramente desafinadas (lo que en esencia son), pero todo esto utilizando solo un canal Pulse.

Aquí hay una forma de onda grabada en Audacity y un clip de sonido de si más el tono extra de 120 Hz tocados en diferentes octavas.

¿No es genial? Ahora consideren si esto fuera «solo» a 240 Hz, con una secuencia simple de encendido y apagado del volumen. Solo imaginen que pudiesen hacer esto con el rango completo del motor de velocidad, utilizando secuencias más complejas y añadiendo la combinación del duty cycle, arpegios e inclusive utilizar expansiones. Es correcto, aún estamos muy lejos de alcanzar la maestría en estas técnicas, misma de la que Chibi Tech hace gala, pero esto es solo lo básico: utilizar la velocidad de los ticks para generar osciladores extra con un solo canal.

¿Qué hay del LSDj?

Es cierto, me he desviado a un limbo teórico de nuevo y he vuelto a olvidar hablar sobre el LSDj. O, ¿de verdad lo he hecho? ¡Ahora que la teoría está fuera de nuestro camino, puedo hablar en esta segunda parte del artículo solamente de la aplicación práctica e intentar algunas locas ideas en esta versión con el tempo multiplicado por cuatro! Si aún tienes la licencia de tu LSDj este enlace debería llevarte directo a ella.

Dejemos las advertencias a un lado. LSDj no es el Famitracker, el Gameboy no es una NES. Ambos presentan capacidad para manejar el PSG y el PCM, ambos fueron —en mayor o menor medida— moldeados para ser similares, pero no son iguales. Con Famitracker puedes elegir tu motor de velocidad con precisión en los Hertz y no hay muchas probabilidades de que se te cuelgue el programa, inclusive trabajando con las configuraciones más altas.

Con LSDj la velocidad de los ticks será determinada por el ajuste de tempo, así que calcular su frecuencia en Hertz es mucho menos preciso. Podrías tratar de ignorar el tempo, multiplicado por 0.4, pero el LSDj va a la deriva un poco, por lo que solo será un indicativo. Esto quiere decir que los ticks por defecto del LSDj estarán en intervalos de 16 Hz a un tempo de 40 y a 102 a un tempo de 255. En la versión 4x, harán intervalos de 128 Hz (tempo: 80, velocidad real: 320) a 408 Hz (tempo: 255, velocidad real: 1020). Tan alto como lo hace la NES.

Podrán ver un montón de pantallas como esta si no son cuidadosos :3. Usen un emulador.

Tampoco hay que olvidar que las canciones que ocupen mucho CPU a más de 200 BPM harán que un DMG avance lentamente hasta que se detenga. Usar una versión que multiplica el tempo por cuatro esta fuera de cuestión en un Gameboy ladrillo. Si tratas de experimentar con esta versión yo te recomendaría que uses o un BGB (para preservar tu equipo de daños) o, AL MENOS, un Gameboy Color. Este es un software para hacer overclocking. El CPU no irá más rápido, pero el LSDj sí. Prepárense para que el programa se cuelgue muchas veces de todas maneras.

Antes de que regrese con un puñado de extraños ejemplos de sonidos de equipos con overclock en la siguiente entrega, ¿por qué no tratan de rehacer el ejemplo del Famitracker, pero en un Gameboy a ver qué pasa? Es una versión un tanto temperamental, así que siéntanse como en casa con sus limitaciones, ya que esto será crucial. Spoilers: La COLUMNA DE VOLUMEN en las tables será su amiga.

Los dejaré trabajar en ello por ahora y volveré muy pronto.

¡Nos vemos del otro lado!

Dig this article? Then consider supporting us on Patreon!