@@ -43,7 +43,7 @@ Tiers auto-select based on platform, or override with `#define GINGODUINO_TIER N
4343- Harmonic field analysis with T/S/D functions and roles (+ deduce from notes/chords)
4444- Harmonic tree (directed graph, major/minor, classical + jazz traditions)
4545- Progression analysis: identify, deduce (ranked), predict (next branch)
46- - Fretboard engine: violao, cavaquinho, bandolim, ukulele with fingering scoring
46+ - Fretboard engine: guitar/ violao, cavaquinho, mandolin/ bandolim, ukulele; alternate tunings (Drop D, Open G, DADGAD); common chords, open-position fingerings
4747- Musical events (note, chord, rest) and sequences with tempo/time signature
4848- Real-time harmonic monitor with chord/field detection and per-note context
4949- MIDI 1.0 parser (running status, SysEx) and stateless dispatcher
@@ -52,7 +52,7 @@ Tiers auto-select based on platform, or override with `#define GINGODUINO_TIER N
5252- Chord comparison: 17 dimensions including Neo-Riemannian transforms and Forte vectors
5353- Fixed-size arrays, no dynamic allocation, PROGMEM support
5454- Compatible with Arduino IDE, PlatformIO, and ESP-IDF
55- - 384 native tests passing
55+ - 409 native tests passing
5656
5757### Installation
5858
@@ -200,23 +200,45 @@ field.signature(); // 0
200200
201201#### GingoFretboard
202202```cpp
203- GingoFretboard guitar = GingoFretboard::violao(); // 6 strings, 19 frets
204- // Also: ::cavaquinho(), ::bandolim(), ::ukulele()
203+ // Standard instruments
204+ GingoFretboard guitar = GingoFretboard::guitar(); // 6 strings, E A D G B E
205+ GingoFretboard viol = GingoFretboard::violao(); // same tuning, Portuguese alias
206+ // Also: ::cavaquinho(), ::mandolin(), ::bandolim(), ::ukulele()
205207
206- guitar.noteAt(0, 5); // GingoNote("A") — string 0, fret 5
207- guitar.midiAt(0, 0); // 40 (E2)
208+ // Alternate tunings
209+ GingoFretboard dd = GingoFretboard::dropD(); // D A D G B E
210+ GingoFretboard og = GingoFretboard::openG(); // D G D G B D
211+ GingoFretboard dg = GingoFretboard::dadgad(); // D A D G A D
212+
213+ // Retune a single string
214+ guitar.setString(0, 38); // lower string 0 to D2 (drop D by hand)
215+
216+ // Note / MIDI lookup
217+ guitar.noteAt(0, 5); // GingoNote("A") — string 0, fret 5
218+ guitar.midiAt(0, 0); // 40 (E2)
208219
209220GingoFretPos positions[48];
210221guitar.positions(GingoNote("E"), positions, 48);
211222guitar.scalePositions(scale, positions, 48, 0, 4);
212223
224+ // Fingerings
213225GingoFingering fg;
214- guitar.fingering(GingoChord("CM"), 0, fg); // best fingering at position 0
226+ guitar.fingering(GingoChord("CM"), 0, fg); // fingering at position 0
215227
216228GingoFingering fgs[5];
217- guitar.fingerings(GingoChord("CM"), fgs, 5); // up to 5 fingerings
229+ guitar.fingerings(GingoChord("CM"), fgs, 5); // up to 5 fingerings, sorted by score
230+
231+ // Open-position shapes only (open string + frets 1-4)
232+ GingoFingering opens[5];
233+ guitar.openFingerings(GingoChord("GM"), opens, 5);
234+ guitar.isOpenFingering(opens[0]); // true
235+
236+ // Common chords for a scale (best fingering per degree)
237+ GingoFingering ccs[7];
238+ guitar.commonChords(GingoScale("G", SCALE_MAJOR), ccs, 7);
239+ // ccs[]: GM, Am, Bm, CM, DM, Em, F#dim — sorted by field degree
218240
219- GingoFretboard capo2 = guitar.capo(2); // transposed fretboard
241+ GingoFretboard capo2 = guitar.capo(2); // transposed fretboard
220242```
221243
222244#### GingoEvent & GingoSequence (Tier 3)
@@ -478,7 +500,7 @@ Tiers auto-detectados por plataforma, ou force com `#define GINGODUINO_TIER N`.
478500- Analise de campo harmonico com funcoes T/S/D e roles (+ deduce a partir de notas/acordes)
479501- Arvore harmonica (grafo dirigido, major/minor, tradicoes classica + jazz)
480502- Analise de progressao: identify, deduce (ranked), predict (proximo branch)
481- - Engine de braco: violao, cavaquinho, bandolim, ukulele com scoring de digitacao
503+ - Engine de braco: guitar/ violao, cavaquinho, mandolin/ bandolim, ukulele; afinacoes alternativas (Drop D, Open G, DADGAD); acordes comuns, digitacoes em primeira posicao
482504- Eventos musicais (nota, acorde, pausa) e sequencias com tempo/compasso
483505- Monitor harmonico em tempo real com deteccao de acordes/campos e contexto por nota
484506- Parser MIDI 1.0 (running status, SysEx) e dispatcher stateless
@@ -487,7 +509,7 @@ Tiers auto-detectados por plataforma, ou force com `#define GINGODUINO_TIER N`.
487509- Comparacao de acordes: 17 dimensoes incluindo transformacoes Neo-Riemannian e vetores Forte
488510- Arrays de tamanho fixo, sem alocacao dinamica, suporte PROGMEM
489511- Compativel com Arduino IDE, PlatformIO e ESP-IDF
490- - 384 testes nativos passando
512+ - 409 testes nativos passando
491513
492514### Instalacao
493515
0 commit comments