Repository navigation
FrequencyToLetter
James Brundage edited this page Oct 23, 2026
·
1 revision
The shortest path between frequency to friendly note is thru MIDI
MIDI gives us a linear scale starting at 21 (A0) to 108 (C8).
Thus we can map a frequency to a friendly note by:
- Converting Frequency to MIDI
- Rounding
- Subtracting 21
- Looking up the value
Parameters
The frequency.
| required | type | position | pipeline | wildcard | aliases |
|---|---|---|---|---|---|
| false | Double | 1 | false | false |
View Source
<#
.SYNOPSIS
Frequency to Letter
.DESCRIPTION
Converts a Frequency to a Letter Note.
.NOTES
The shortest path between frequency to friendly note is thru MIDI
MIDI gives us a linear scale starting at 21 (A0) to 108 (C8).
Thus we can map a frequency to a friendly note by:
* Converting Frequency to MIDI
* Rounding
* Subtracting 21
* Looking up the value
.LINK
https://en.wikipedia.org/wiki/MIDI_tuning_standard
.LINK
https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Simple_synth
#>
param(
# The frequency.
[double]
$Frequency = 440
)
# The 88 keys in the MIDI standard.
$midi88 = @(
'A0','A#0','B0',
'C1','C#1','D1','D#1','E1','F1','F#1','G1','G#1','A1','A#1','B1',
'C2','C#2','D2','D#2','E2','F2','F#2','G2','G#2','A2','A#2','B2',
'C3','C#3','D3','D#3','E3','F3','F#3','G3','G#3','A3','A#3','B3',
'C4','C#4','D4','D#4','E4','F4','F#4','G4','G#4','A4','A#4','B4',
'C5','C#5','D5','D#5','E5','F5','F#5','G5','G#5','A5','A#5','B5',
'C6','C#6','D6','D#6','E6','F6','F#6','G6','G#6','A6','A#6','B6',
'C7','C#7','D7','D#7','E7','F7','F#7','G7','G#7','A7','A#7','B7',
'C8'
)
# Compute our note
$midiNote = 69 + 12 * [Math]::Log($Frequency / 440, 2)
# Round it
$rounded = [Math]::Round($midiNote)
# If the rounded note is within the 88 key range
if ($rounded -ge 21 -and $rounded -le (21 + 88)) {
# output the rounded letter note.
return $midi88[$rounded - 21]
}
If you like making waves, please star this repo and consider sponsoring