package audio

import "math"

// Converts note name to frequency in Hz
func noteToFreq(note string) float64 {
	noteFreqs := map[string]float64{
		"C":  16.35,
		"C#": 17.32,
		"D":  18.35,
		"D#": 19.45,
		"E":  20.60,
		"F":  21.83,
		"F#": 23.12,
		"G":  24.50,
		"G#": 25.96,
		"A":  27.50,
		"A#": 29.14,
		"B":  30.87,
	}

	if len(note) < 2 {
		return 440.0
	}

	noteName := note[:1]
	if len(note) > 2 && (note[1] == '#' || note[1] == 'b') {
		noteName = note[:2]
	}

	octave := 4
	if len(note) > 1 {
		if note[len(note)-1] >= '0' && note[len(note)-1] <= '9' {
			octave = int(note[len(note)-1] - '0')
		}
	}

	baseFreq, exists := noteFreqs[noteName]
	if !exists {
		return 440.0
	}

	return baseFreq * math.Pow(2, float64(octave))
}
