util: Convert midi note to frequency.
parent
189cdfa07d
commit
a5b5cce493
|
@ -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
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue