Skip to content

Commit 55fe0ed

Browse files
committed
tuning changes
1 parent a664d11 commit 55fe0ed

File tree

4 files changed

+101
-80
lines changed

4 files changed

+101
-80
lines changed

fingerboard.go

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2,87 +2,18 @@ package guitar
22

33
import (
44
"errors"
5-
"strings"
65
)
76

8-
type TuningType int
9-
10-
const (
11-
StandardTuning TuningType = iota
12-
)
13-
14-
type Tuning []Note
15-
16-
func (t *Tuning) NoteNames() []string {
17-
names := make([]string, len(*t))
18-
for i := range *t {
19-
names[i] = (*t)[i].Name
20-
}
21-
names[0] = strings.ToLower(names[0])
22-
return names
23-
}
24-
25-
func GetTuning(t TuningType) (Tuning, error) {
26-
switch t {
27-
case StandardTuning:
28-
return Tuning{
29-
{
30-
Name: "E",
31-
Octave: 4,
32-
Fret: 0,
33-
String: 0,
34-
},
35-
{
36-
Name: "B",
37-
Octave: 3,
38-
Fret: 0,
39-
String: 1,
40-
},
41-
{
42-
Name: "G",
43-
Octave: 3,
44-
Fret: 0,
45-
String: 2,
46-
},
47-
{
48-
Name: "D",
49-
Octave: 3,
50-
Fret: 0,
51-
String: 3,
52-
},
53-
{
54-
Name: "A",
55-
Octave: 2,
56-
Fret: 0,
57-
String: 4,
58-
},
59-
{
60-
Name: "E",
61-
Octave: 2,
62-
Fret: 0,
63-
String: 5,
64-
},
65-
}, nil
66-
default:
67-
return Tuning{}, errors.ErrUnsupported
68-
}
69-
}
70-
717
type FingerBoard struct {
728
tuning Tuning
739
frets int
7410
}
7511

76-
func NewFingerBoard(tuningType TuningType, frets int) (*FingerBoard, error) {
12+
func NewFingerBoard(tun Tuning, frets int) (*FingerBoard, error) {
7713
if frets < 0 {
7814
return nil, errors.New("frets value can not be negative")
7915
}
8016

81-
tun, err := GetTuning(tuningType)
82-
if err != nil {
83-
return nil, err
84-
}
85-
8617
return &FingerBoard{
8718
tuning: tun,
8819
frets: frets,

fingerboard_test.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,28 @@
11
package guitar
22

33
import (
4-
"errors"
54
"testing"
65

76
"github.com/stretchr/testify/assert"
87
)
98

109
func TestNewFingerBoard(t *testing.T) {
10+
standardTun, _ := GetTuning(StandardTuning, GuitarType)
1111
t.Run("valid frets", func(t *testing.T) {
12-
fb, err := NewFingerBoard(StandardTuning, 24)
12+
fb, err := NewFingerBoard(standardTun, 24)
1313
assert.NoError(t, err)
1414
assert.Equal(t, 24, fb.frets)
1515
})
1616

1717
t.Run("negative frets", func(t *testing.T) {
18-
_, err := NewFingerBoard(StandardTuning, -5)
18+
_, err := NewFingerBoard(standardTun, -5)
1919
assert.ErrorContains(t, err, "frets value can not be negative")
2020
})
21-
22-
t.Run("invalid tuning", func(t *testing.T) {
23-
_, err := NewFingerBoard(TuningType(99), 12)
24-
assert.ErrorIs(t, err, errors.ErrUnsupported)
25-
})
2621
}
2722

2823
func TestGetNotes(t *testing.T) {
29-
fb, _ := NewFingerBoard(StandardTuning, 24)
24+
standardTun, _ := GetTuning(StandardTuning, GuitarType)
25+
fb, _ := NewFingerBoard(standardTun, 24)
3026

3127
testCases := []struct {
3228
name string

tab_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
func TestWriteNotes(t *testing.T) {
10-
tun, _ := GetTuning(StandardTuning)
10+
tun, _ := GetTuning(StandardTuning, GuitarType)
1111
tuningNotes := tun.NoteNames()
1212

1313
testCases := []struct {

tuning.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package guitar
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"strings"
7+
)
8+
9+
type TuningType int
10+
11+
const (
12+
StandardTuning TuningType = iota
13+
)
14+
15+
type Tuning []Note
16+
17+
func (t *Tuning) NoteNames() []string {
18+
names := make([]string, len(*t))
19+
for i := range *t {
20+
names[i] = (*t)[i].Name
21+
}
22+
names[0] = strings.ToLower(names[0])
23+
return names
24+
}
25+
26+
func NewTuning(t []Note, instrument InstrumentType) (Tuning, error) {
27+
for i := range t {
28+
if !noteIsValid(t[i]) {
29+
return Tuning{}, fmt.Errorf("invalid note %+v", t[i])
30+
}
31+
}
32+
33+
switch instrument {
34+
case GuitarType:
35+
if len(t) != 6 {
36+
return Tuning{}, fmt.Errorf("invalid tuning for guitar! must be 6 notes")
37+
}
38+
default:
39+
return Tuning{}, fmt.Errorf("unsupported instrument")
40+
}
41+
42+
return append(Tuning{}, t...), nil
43+
}
44+
45+
func GetTuning(t TuningType, instrumentType InstrumentType) (Tuning, error) {
46+
switch instrumentType {
47+
case GuitarType:
48+
switch t {
49+
case StandardTuning:
50+
return Tuning{
51+
{
52+
Name: "E",
53+
Octave: 4,
54+
Fret: 0,
55+
String: 0,
56+
},
57+
{
58+
Name: "B",
59+
Octave: 3,
60+
Fret: 0,
61+
String: 1,
62+
},
63+
{
64+
Name: "G",
65+
Octave: 3,
66+
Fret: 0,
67+
String: 2,
68+
},
69+
{
70+
Name: "D",
71+
Octave: 3,
72+
Fret: 0,
73+
String: 3,
74+
},
75+
{
76+
Name: "A",
77+
Octave: 2,
78+
Fret: 0,
79+
String: 4,
80+
},
81+
{
82+
Name: "E",
83+
Octave: 2,
84+
Fret: 0,
85+
String: 5,
86+
},
87+
}, nil
88+
default:
89+
return Tuning{}, errors.ErrUnsupported
90+
}
91+
default:
92+
return Tuning{}, errors.ErrUnsupported
93+
}
94+
}

0 commit comments

Comments
 (0)