Saltar al contenido

Generando diagramas de acordes de ukelele

Este equipo de especialistas pasados muchos días de trabajo y de recopilar de datos, hemos dado con la solución, queremos que resulte de utilidad para tu proyecto.

Solución:

Editar: Aquí hay una mejor drawukulelechord macro usando TikZ.

  • los drawukulelechord macro dibuja un acorde de ukelele. Su argumento obligatorio es una lista de cuatro números (para cuatro cadenas): -1 (string no se reproduce), 0 (abierto string), 1 y superior (posición del dedo para este string). El argumento opcional se puede utilizar para cambiar la escala (predeterminado: x=2ex y y=2ex).

  • los defineukulelechord macro permite asociar un nombre (primer argumento) y una lista para usar con drawukulelechord (segundo argumento).

  • los ukulelechord macro dibuja un acorde de ukelele con nombre (predefinido por defineukulelechord).

Puede descomentar o comentar la línea con % opened string dibujar explícitamente o no un abierto string.

ingrese la descripción de la imagen aquí

documentclassstandalone
usepackageetoolbox
usepackagetikz
newcommanddrawukulelechord[2][]%
  edefchord#2%
  begintikzpicture[x=2ex,y=2ex,line cap=round,line width=.4pt,
    baseline=(current bounding box.center),#1]
    draw[line width=.6pt] (1,0) -- (4,0);
    foreach d in 1,...,4draw (1,-d) -- (4,-d);
    foreach d[count=p] in chord 
      draw (p,0) -- (p,-4.5);
      ifdefstringd-1
        draw (p,.25) +(-.125,-.125) -- +(.125,.125)
        +(-.125,.125) -- +(.125,-.125);
      
        ifdefstringd0
          draw (p,.25) circle(.125); % opened string
        
          fill (p,.5-1*d) circle(.25);
        
      
    
    path[use as bounding box] (0.5,.5) rectangle (4.5,-5);
  endtikzpicture%

makeatletter
newcommanddefineukulelechord[2]%
  csdef@[email protected]
#1drawukulelechord#2% newcommandukulelechord[1]% ifcsdef@[email protected]#1% csuse@[email protected]#1% % GenericErrorUndefined ukulele chord '#1'% % makeatother defineukulelechordA maj2,1,0,0 defineukulelechordA 62,1,2,0 defineukulelechordG sharp maj5,3,4,3 defineukulelechordA flat maj5,3,4,3 defineukulelechordG sharp 61,3,1,3 begindocument begintabularrcc & maj & 6 \ A & ukulelechordA maj & ukulelechordA 6 \ G$sharp$/A$flat$ & ukulelechordG sharp maj & ukulelechordG sharp 6 \ Test & drawukulelechord-1,0,1,2 & drawukulelechord2,-1,-1,-1 endtabular enddocument

El paquete guitarchordschemes se puede utilizar para esto, al menos con v0.7. A partir de dicha versión permite configurar el string número y para rotar el esquema.

En el siguiente ejemplo también utilizo el chords biblioteca de la leadsheets paquete para la composición tipográfica de los nombres de los acordes. Esto es solo por conveniencia y no es una parte esencial del ejemplo.

ingrese la descripción de la imagen aquí

documentclassarticle
usepackage[T1]fontenc
usepackage[margin=2cm]geometry

usepackageguitarchordschemes
% the `chords' library of the leadsheets package provides the convenient
% writechord macro; we don't any other functionality  of said package so we
% use the `chords' option:
usepackage[chords]leadsheets

usepackagearray

% guitarchordschemes setup:
setchordscheme
  strings = 4 ,
  chord-frets = 5 ,
  tuning = ,,, ,
  rotate = -90 ,
  x-unit = 1.333mm , y-unit = 2mm ,
  finger-radius = .25 ,
  line-width = .6pt ,
  restrict-bounding-box


begindocument

begintabularl*13c
  & ma & 6 & 7 & 9 & maj7 & mi & mi6 & mi7 & mi9 & sus2 & sus4 & aug & dim \
  writechordA &
  chordscheme[ finger = 2/4,1/3 ] &
  chordscheme[ finger = 2/4,1/3,2/2 ] &
  chordscheme[ finger = 1/3 ] &
  chordscheme[ finger = 1/3,2/1 ] &
  chordscheme[ finger = 1/4,1/3 ] &
  chordscheme[ finger = 2/4 ] &
  chordscheme[ finger = 2/4,2/2 ] &
  chordscheme &
  chordscheme[ finger = 2/4,2/1 ] &
  chordscheme[ finger = 2/4,4/3,5/2,2/1 ] &
  chordscheme[ finger = 2/4,2/3 ] &
  chordscheme[ finger = 2/4,1/3,1/2 ] &
  chordscheme[ finger = 2/4,3/3,2/2,3/1 ] \
  writechordA#slashwritechordBb &
  chordscheme[ finger = 3/4,2/3,1/2,1/1 ] &
  chordscheme[ finger = 2/3,1/2,1/1 ] &
  chordscheme[ finger = 1/4,2/3,1/2,1/1 ] &
  chordscheme[ finger = 1/4,2/3,1/2,3/1 ] &
  chordscheme[ finger = 3/4,2/3,1/2 ] &
  chordscheme[ finger = 3/4,1/3,1/2,1/1 ] &
  chordscheme[ finger = 3/4,1/3,3/2,1/1 ] &
  chordscheme[ finger = 1/4,1/3,1/2,1/1 ] &
  chordscheme[ finger = 3/4,1/3,1/2,3/1 ] &
  chordscheme[ finger = 3/4,1/2,1/1 ] &
  chordscheme[ finger = 3/4,3/3,1/2,1/1 ] &
  chordscheme[ finger = 3/4,2/3,2/2,1/1 ] &
  chordscheme[ finger = 1/3,1/1 ] \
  writechordB &
  chordscheme[ finger = 4/4,3/3,2/2,2/1 ] &
  chordscheme[ finger = 1/4,3/3,2/2,2/1 ] &
  chordscheme[ finger = 2/4,3/3,2/2,2/1 ] &
  chordscheme[ finger = 2/4,3/3,2/2,4/1 ] &
  chordscheme[ finger = 4/4,3/3,2/2,1/1 ] &
  chordscheme[ finger = 4/4,2/3,2/2,2/1 ] &
  chordscheme[ finger = 1/4,2/3,2/2,2/1 ] &
  chordscheme[ finger = 2/4,2/3,2/2,2/1 ] &
  chordscheme[ finger = 4/4,2/3,2/2,4/1 ] &
  chordscheme[ finger = 4/4,1/3,2/2,2/1 ] &
  chordscheme[ finger = 4/4,4/3,2/2,2/1 ] &
  chordscheme[ finger = 3/3,3/2,2/1 ] &
  chordscheme[ finger = 1/4,2/3,1/2,2/1 ] \
  writechordC &
  chordscheme[ finger = 3/1 ] &
  chordscheme &
  chordscheme[ finger = 1/1 ] &
  chordscheme[ finger = 2/3,1/1 ] &
  chordscheme[ finger = 2/1 ] &
  chordscheme[ finger = 3/3,3/2,3/1 ] &
  chordscheme[ finger = 3/3,3/2 ] &
  chordscheme[ finger = 3/4,3/3,3/2,3/1 ] &
  chordscheme[ finger = 5/4,3/3,3/2,5/1 ] &
  chordscheme[ finger = 2/3,3/2,3/1 ] &
  chordscheme[ finger = 1/2,3/1 ] &
  chordscheme[ finger = 1/4,3/1 ] &
  chordscheme[ finger = 2/4,3/3,2/2,3/1 ] \
  writechordC#slashwritechordDb &
  chordscheme[ finger = 1/4,1/3,1/2,4/1 ] &
  chordscheme[ finger = 1/4,1/3,1/2,1/1 ] &
  chordscheme[ finger = 1/4,1/3,1/2,2/1 ] &
  chordscheme[ finger = 1/4,3/3,1/2,2/1 ] &
  chordscheme[ finger = 1/4,1/3,1/2,3/1 ] &
  chordscheme[ finger = 5/4,3/3,3/2,3/1 ] &
  chordscheme[ finger = 1/4,4/3,4/2,1/1 ] &
  chordscheme[ finger = 1/4,4/3,4/2,2/1 ] &
  chordscheme[ finger = 1/4,3/3,4/1 ] &
  chordscheme[ finger = 1/4,3/3,4/2,4/1 ] &
  chordscheme[ finger = 1/4,1/3,2/2,4/1 ] &
  chordscheme[ finger = 2/4,1/3,1/2 ] &
  chordscheme[ finger = 1/3,1/1 ] \
  writechordD &
  chordscheme[ finger = 2/4,2/3,2/2 ] &
  chordscheme[ finger = 2/4,2/3,2/2,2/1 ] &
  chordscheme[ finger = 2/4,2/3,2/2,3/1 ] &
  chordscheme[ finger = 2/4,4/3,2/2,3/1 ] &
  chordscheme[ finger = 2/4,2/3,2/2,4/1 ] &
  chordscheme[ finger = 2/4,2/3,1/2 ] &
  chordscheme[ finger = 2/4,2/3,1/2,2/1 ] &
  chordscheme[ finger = 2/4,2/3,1/2,3/1 ] &
  chordscheme[ finger = 2/4,4/3,1/2,5/1 ] &
  chordscheme[ finger = 2/4,2/3 ] &
  chordscheme[ finger = 2/3,3/2 ] &
  chordscheme[ finger = 3/4,2/3,2/2,1/1 ] &
  chordscheme[ finger = 1/4,2/3,1/2,2/1 ] \
  writechordD#slashwritechordEb &
  chordscheme[ finger = 3/3,3/2,1/1 ] &
  chordscheme[ finger = 3/4,3/3,3/2,3/1 ] &
  chordscheme[ finger = 3/4,3/3,3/2,4/1 ] &
  chordscheme[ finger = 1/3,1/2,1/1 ] &
  chordscheme[ finger = 3/4,3/3,3/2,5/1 ] &
  chordscheme[ finger = 3/4,3/3,2/2,1/1 ] &
  chordscheme[ finger = 3/4,2/2,1/1 ] &
  chordscheme[ finger = 3/4,1/3,2/2,1/1 ] &
  setchordscheme chord-frets = 6 chordscheme[ finger = 3/4,5/3,2/2,6/1 ] &
  chordscheme[ finger = 3/4,3/3,1/2,1/1 ] &
  chordscheme[ finger = 1/4,3/3,4/2,1/1 ] &
  chordscheme[ finger = 3/3,3/2,2/1 ] &
  chordscheme[ finger = 2/4,3/3,2/2,3/1 ] \
  writechordE &
  chordscheme[ finger = 4/4,4/3,4/2,2/1 ] &
  chordscheme[ finger = 1/4,1/3,2/1 ] &
  chordscheme[ finger = 1/4,2/3,2/1 ] &
  chordscheme[ finger = 1/4,2/3,2/2,2/1 ] &
  chordscheme[ finger = 1/4,3/3,2/1 ] &
  chordscheme[ finger = 4/3,3/2,2/1 ] &
  chordscheme[ finger = 4/4,4/3,3/2,4/1 ] &
  chordscheme[ finger = 2/3,2/1 ] &
  chordscheme[ finger = 4/3,2/2,2/1 ] &
  chordscheme[ finger = 4/4,4/3,2/2,2/1 ] &
  chordscheme[ finger = 2/4,4/3,5/2,2/1 ] &
  chordscheme[ finger = 1/4,3/1 ] &
  chordscheme[ finger = 2/3,2/1 ]
endtabular

enddocument

Agregando a la brillante respuesta de Paul, recomiendo usar lilyglyphs. He creado algunos comandos (con la ayuda del creador de lilyglyphs) para que sea menos engorroso ingresar símbolos de acordes.

producción

documentclassarticle
usepackagefontspec
usepackagetikz
usepackagelilyglyphs
usepackagexspace

newcommandtinysharpx[1][0.10ex]hspace*#1sharp[scale=.65,raise=.1]hspace*#1
newcommandtinyflatx[1][0.10ex]hspace*#1flat[scale=.6,raise=.1]hspace*#1
newcommandflatx[1][0.18ex]hspace*#1flathspace*#1
newcommandsharpx[1][0.18ex]hspace*#1sharphspace*#1

newcommandbigchord[4](text#1^#2mkern-3murelax(mathoplimitsmkern-3murelax^#3_#4))
newcommandchord[2](text#1^#2)

newcommandaflatA(flatx)xspace
newcommandbflatB(flatx)xspace
newcommandcflatC(flatx)xspace
newcommanddflatD(flatx)xspace
newcommandeflatE(flatx)xspace
newcommandfflatF(flatx)xspace
newcommandgflatG(flatx)xspace

newcommandaflatmA(flatx)mxspace
newcommandbflatmB(flatx)mxspace
newcommandcflatmC(flatx)mxspace
newcommanddflatmD(flatx)mxspace
newcommandeflatmE(flatx)mxspace
newcommandfflatmF(flatx)mxspace
newcommandgflatmG(flatx)mxspace

newcommandaissA(sharpx)xspace
newcommandbissB(sharpx)xspace
newcommandcissC(sharpx)xspace
newcommanddissD(sharpx)xspace
newcommandeissE(sharpx)xspace
newcommandfissF(sharpx)xspace
newcommandgissG(sharpx)xspace

newcommandaissmA(sharpx)mxspace
newcommandbissmB(sharpx)mxspace
newcommandcissmC(sharpx)mxspace
newcommanddissmD(sharpx)mxspace
newcommandeissmE(sharpx)mxspace
newcommandfissmF(sharpx)mxspace
newcommandgissmG(sharpx)mxspace

newcommandukulelechord[2][]%
  begintikzpicture[x=3mm,y=3mm,line cap=round,line width=.4pt,
    baseline=(current bounding box.center),#1]
    draw[line width=.6pt] (1,0) -- (4,0);
    foreach d in 1,...,4draw (1,-d) -- (4,-d);
    foreach d[count=p] in #2
      draw (p,0) -- (p,-4.5);
      ifnumd>0 fill (p,.5-1*d) circle(.8mm); fi
    
    path[use as bounding box] (0.5,.3) rectangle (4.5,-5);
  endtikzpicture%

begindocument
begintabularrcc
  &maj& 6 \
  A & ukulelechord2,1,0,0 & ukulelechord2,1,2,0 \
  giss/aflat & ukulelechord5,3,4,5 & ukulelechord1,3,1,3 \
endtabular
enddocument

Aquí puedes ver las comentarios y valoraciones de los usuarios

Nos puedes añadir valor a nuestro contenido asistiendo con tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *