Reto
Dada la tablatura de guitarra, debe generar la canción representada por la pestaña. Esto puede ser para los altavoces de su computadora o para un archivo de audio (.wav, .mp3, .midi, .aiff, etc.). También habrá una segunda entrada para el tiempo.
Las pestañas pueden ingresarse a través de un archivo o directamente a STDIN. La pestaña estará en formato ASCII .
Especulación
Todas las pestañas son para 6 guitarras de seis cuerdas con afinación E estándar: E2 (82.41 Hz), A2 (110.00 Hz), D3 (146.83 Hz), G3 (196.00 Hz), B3 (246.94 Hz), E4 (329.63 Hz).
Las únicas técnicas (además de la recolección normal) que debe atender son:
- Flexión (siempre será una curva de medio tono)
- Martillando en
- Quitándose
- Deslizarse hacia arriba / abajo
Como no puede sintetizar el sonido de una cuerda silenciada, trátelo x
como a -
.
Al doblar, devuelva la transición completa de sin doblar a cuerda para doblar a sin doblar nuevamente.
La segunda entrada será el tiempo que cada símbolo en la pestaña representa en segundos. Por ejemplo:
Para entrada:
e|---
B|---
G|---
D|---
A|---
E|---
Con el tiempo 0.5
, debido a que hay 3
columnas de símbolos (pero sin notas), el archivo de audio emitido es ( 3*0.5=1.5
) 1.5
segundos de silencio.
Pestañas de ejemplo
1 - The Weight (Jack White, Jimmy Page + The Edge edition)
e|----3-----3---3----2---------3--------------------|
B|----3-----3---3----3--1-1----3--------------------|
G|----0-----0---0----2--0-0----0--------------------|
D|----0-----0---2-------2-2----0--------------------|
A|----2-----0---2-------3-3----2--------------------|
E|----3-----2---x----2--x-x----3--------------------|
2 - Huele a espíritu adolescente
e|--------------|---------------|-------------|-------------|
B|--------------|---------------|-------------|-------------|
G|-----8h10-----|-8-8b----6--5--|-6--5--------|-------------|
D|-10--------6--|---------------|-------8-6-8-|-8b----6--5--|
A|--------------|---------------|-------------|-------------|
E|--------------|---------------|-------------|-------------|
3 - Bandera Spangled Star
e|---0-------2-5---9-7-5-----------9-7-5-4-2-4-5------|
B|-----2---2-------------2-4-5---5---------------5-2--|
G|-------2-------------------------------------------2|
D|----------------------------------------------------|
A|----------------------------------------------------|
E|----------------------------------------------------|
fuente
Respuestas:
MATLAB
Esto es algo inacabado. Utilicé un método rápido y sucio para hacer el audio lo más fácil posible. El método que utilicé dificultó la implementación de la flexión / martilleo (nunca antes había escuchado esas palabras en este contexto).
Dicho todo esto, este script se leerá en un archivo de texto llamado "inputs.txt" que contiene la pestaña ascii según sea necesario y reproducirá la canción.
Aquí hay un enlace al sonido de la primera entrada de prueba.
Aquí hay un enlace al sonido de la tercera entrada de prueba. (¿Bandera estrellada o camión de helados?)
La segunda entrada de prueba sonaba bastante malo para mí, pero que puede ser debido a que utiliza una gran cantidad de
b
s yh
s que las secuencias de comandos omite.Como puede escuchar, la salida no tiene la misma calidad que el original. Suena como si hubiera un metrónomo tocando en el fondo. Creo que estas canciones tienen carácter.
fuente
Python 3
Tuve que probar este.
Esto convierte una pestaña en un archivo midi como lo toca un piano. No tengo idea de cómo doblar una cuerda en un piano, por lo que no puede hacer eso, pero los martillos y los pull-off son sencillos.
Generé los archivos de prueba de esta manera: ¿
$ python3 tab.py The-weight.txt 0.14
dónde0.14
está la duración de una sola nota en segundos?El código también está en github, https://github.com/Mattias1/ascii-tab , donde también cargué el resultado de los ejemplos proporcionados por el OP. También lo probé en algunas de mis pestañas. Es bastante extraño escuchar tocar un piano, pero no está mal.
Ejemplos:
Agregué algunos enlaces directos, pero no estoy seguro de cuánto tiempo se quedan, así que también conservaré los enlaces de descarga anteriores.
Y la pestaña de la melodía de Matty (mi favorita) a continuación:
fuente
2/3
de esos 'latidos' son, de hecho, guiones.Java Script
Nota: Utiliza el kit de audio de desarrollo web; Esto está muy lejos de IE's League; Probado en Google Chrome
Puedes poner las pestañas en el área de texto. Es decir, podrías poner la melodía de Matty en la publicación de Matty en el área de texto (con las letras sobre las notas) y aún se analizará correctamente.
Haga clic para ejecutar el programa
JavaScript:
¿Puedes identificar esta canción?
fuente
| / b h p
. ¿Por qué no hacer un pequeño análisis de cadenas para reemplazarlos-
? Eso sonará bastante bien y funciona. (Y tal vez dividir en líneas nuevas usando un cuadro de entrada). Eso hará que este sea un guión divertido para jugar.Java
Este programa convierte una tablatura a formato WAV de 16 bits.
En primer lugar, escribí un montón de código de análisis de tablaturas. No estoy seguro de si mi análisis es completamente correcto, pero creo que está bien. Además, podría usar más validación para los datos.
Después de eso, hice el código para generar el audio. Cada cadena se genera por separado. El programa realiza un seguimiento de la frecuencia actual, amplitud y fase. Luego genera 10 sobretonos para la frecuencia con amplitudes relativas inventadas, y los suma. Finalmente, las cadenas se combinan y el resultado se normaliza. El resultado se guarda como audio WAV, que elegí por su formato ultra simple (no se usan bibliotecas).
Es "compatible" con martillar (
h
) y tirar (p
) al ignorarlos, ya que realmente no tuve tiempo para hacerlos sonar muy diferentes. Sin embargo, el resultado suena un poco como una guitarra (pasé algunas horas analizando mi guitarra en Audacity).Además, admite flexión (
b
), liberación (r
) y deslizamiento (/
y\
, intercambiable).x
se implementa como silenciar la cadena.Puede intentar ajustar las constantes al comienzo del código. Especialmente la reducción a
silenceRate
menudo conduce a una mejor calidad.Resultados de ejemplo
El código
Quiero advertir a los principiantes de Java: no intentes aprender nada de este código, está terriblemente escrito. Además, se escribió rápidamente y en 2 sesiones y no se debe volver a utilizar, por lo que no tiene comentarios. (Podría agregar algo más tarde: P)
fuente