Fretboard — Digitacoes e Visualizacao¶
O modulo Fretboard permite gerar digitacoes realisticas de acordes e visualizar escalas, notas e campos harmonicos para instrumentos de cordas com trastes.
Instrumentos disponiveis¶
from gingo import Fretboard
# Instrumentos padrao
violao = Fretboard.violao() # 6 cordas, EADGBE, 19 trastes
cav = Fretboard.cavaquinho() # 4 cordas, DGBD, 17 trastes
band = Fretboard.bandolim() # 4 cordas, GDAE, 17 trastes
# Informacoes do instrumento
print(violao.num_strings()) # 6
print(violao.num_frets()) # 19
print(violao.tuning().name) # "standard"
Digitacoes de acordes¶
O metodo fingering() gera a digitacao otima para um acorde usando um algoritmo baseado no sistema CAGED. O algoritmo considera span, posicao, numero de dedos, cordas soando, deteccao de pestana e conforto fisico.
from gingo import Fretboard, Chord
violao = Fretboard.violao()
# Digitacao padrao (melhor posicao)
f = violao.fingering(Chord("CM"))
print(f.chord_name) # "CM"
print(f.base_fret) # 1
print(f.barre) # 0 (sem pestana)
# Detalhe de cada corda
for s in f.strings:
print(f" Corda {s.string}: traste={s.fret}, acao={s.action}")
# Acorde com pestana
f = violao.fingering(Chord("FM"))
print(f.barre) # 1 (pestana no traste 1)
# Digitacao em posicao especifica
f = violao.fingering(Chord("CM"), position=5)
Acoes de corda (StringAction)¶
| Valor | Descricao |
|---|---|
Open |
Corda solta (sem dedo) |
Fretted |
Corda pressionada em um traste |
Muted |
Corda abafada (sem som) |
Posicoes de escalas¶
from gingo import Fretboard, Scale
violao = Fretboard.violao()
# Todas as posicoes da escala no braco
posicoes = violao.scale_positions(Scale("C", "major"), 0, 12)
for p in posicoes[:5]:
print(f" Corda {p.string}, traste {p.fret}: {p.note} (MIDI {p.midi})")
Posicoes de notas¶
from gingo import Fretboard, Note
violao = Fretboard.violao()
# Todas as posicoes de C no braco
posicoes = violao.positions(Note("C"))
for p in posicoes:
print(f" Corda {p.string}, traste {p.fret}: {p.note}")
# Posicao especifica
pos = violao.position(1, 5) # Corda 1, traste 5
print(f"{pos.note} (MIDI {pos.midi})") # A (MIDI 69)
Visualizacao SVG¶
O FretboardSVG renderiza diagramas SVG de alta qualidade.
Diagrama de acorde¶
from gingo import Fretboard, FretboardSVG, Chord
violao = Fretboard.violao()
# Chord box vertical (padrao)
svg = FretboardSVG.chord(violao, Chord("Am"))
FretboardSVG.write(svg, "am_chord.svg")
# Digitacao especifica
f = violao.fingering(Chord("FM"))
svg = FretboardSVG.fingering(violao, f)
Escala no braco¶
from gingo import Fretboard, FretboardSVG, Scale
violao = Fretboard.violao()
# Escala horizontal (padrao)
svg = FretboardSVG.scale(violao, Scale("C", "major"), 0, 12)
# Trecho especifico
svg = FretboardSVG.scale(violao, Scale("A", "minor pentatonic"), 5, 12)
Campo harmonico¶
from gingo import Fretboard, FretboardSVG, Field, Layout
violao = Fretboard.violao()
# Campo completo (layout vertical)
svg = FretboardSVG.field(violao, Field("C", "major"))
# Layout em grid
svg = FretboardSVG.field(violao, Field("G", "major"), Layout.Grid)
# Layout horizontal
svg = FretboardSVG.field(violao, Field("D", "major"), Layout.Horizontal)
Progressao¶
from gingo import Fretboard, FretboardSVG, Field, Layout
violao = Fretboard.violao()
svg = FretboardSVG.progression(
violao, Field("C", "major"),
["I", "V", "vi", "IV"],
Layout.Horizontal
)
FretboardSVG.write(svg, "i_v_vi_iv.svg")
Notas e posicoes customizadas¶
from gingo import Fretboard, FretboardSVG, Note
violao = Fretboard.violao()
# Todas as posicoes de uma nota
svg = FretboardSVG.note(violao, Note("C"))
# Posicoes customizadas com titulo
posicoes = violao.scale_positions(Scale("A", "minor pentatonic"), 5, 12)
svg = FretboardSVG.positions(violao, posicoes, "Am Pentatonic (pos. 5)")
# Braco completo
svg = FretboardSVG.full(violao)
Orientacao e lateralidade¶
Todos os metodos de FretboardSVG suportam dois parametros opcionais:
- Orientation:
Horizontal(vista do braco) ouVertical(chord box) - Handedness:
RightHanded(destro) ouLeftHanded(canhoto)
from gingo import (
Fretboard, FretboardSVG, Chord, Scale,
Orientation, Handedness
)
violao = Fretboard.violao()
# Acorde horizontal, canhoto
svg = FretboardSVG.chord(violao, Chord("Am"), 0,
Orientation.Horizontal, Handedness.LeftHanded)
# Escala vertical, destro
svg = FretboardSVG.scale(violao, Scale("C", "major"), 0, 12,
Orientation.Vertical, Handedness.RightHanded)
Defaults por metodo¶
| Metodo | Orientacao | Lateralidade |
|---|---|---|
chord(), fingering() |
Vertical | RightHanded |
scale(), note(), positions() |
Horizontal | RightHanded |
field(), progression(), full() |
Vertical | RightHanded |
Como funciona a lateralidade¶
A lateralidade so espelha o eixo perpendicular as cordas:
- Horizontal: eixo X (trastes) muda, eixo Y (cordas) mantem
- Vertical: eixo X (cordas) muda, eixo Y (trastes) mantem
CLI¶
# Digitacao de acorde
gingo fretboard chord CM
gingo fretboard chord Am7 --svg am7.svg
# Escala
gingo fretboard scale "C major"
gingo fretboard scale "A minor pentatonic" --svg scale.svg
# Campo harmonico
gingo fretboard field "C major" --svg field.svg
# Canhoto
gingo fretboard chord Am --left
# Orientacao horizontal
gingo fretboard chord Am --horizontal
Como visualizar SVGs¶
# Opcao 1: Salvar e abrir no navegador
import subprocess
FretboardSVG.write(svg, "diagrama.svg")
subprocess.Popen(["xdg-open", "diagrama.svg"]) # Linux
# subprocess.Popen(["open", "diagrama.svg"]) # macOS
# Opcao 2: Jupyter notebook
from IPython.display import SVG, display
display(SVG(data=svg))