util: Convert midi note to frequency.

master
J. David Lee 2019-12-02 20:47:40 +01:00
parent 189cdfa07d
commit a5b5cce493
2 changed files with 39 additions and 0 deletions

8
lib/util/notefreq.go Normal file
View File

@ -0,0 +1,8 @@
package util
import "math"
// Return the frequency of a given MIDI note number.
func NoteFreq(n int) float64 {
return (math.Pow(2, (float64(n)-69)/12)) * 440
}

31
lib/util/notefreq_test.go Normal file
View File

@ -0,0 +1,31 @@
package util
import (
"fmt"
"testing"
)
func TestNoteFreq(t *testing.T) {
type TestCase struct {
In int
Out float64
}
testCases := []TestCase{
{108, 4186.01},
{81, 880},
{69, 440},
{58, 233.08},
{57, 220},
{56, 207.65},
{55, 196},
{36, 65.41},
}
for _, tc := range testCases {
out := NoteFreq(tc.In)
if fmt.Sprintf("%.2f", out) != fmt.Sprintf("%.2f", tc.Out) {
t.Fatalf("%v != %v", out, tc.Out)
}
}
}