Last active
December 14, 2017 02:01
-
-
Save PSingletary/7ebb2d3b223d2569fcd3e9b4c01f8d2c to your computer and use it in GitHub Desktop.
Powershell music - http://blogs.msdn.com/b/powershell/archive/2006/12/21/jingle.aspx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#http://blogs.msdn.com/b/powershell/archive/2006/12/21/jingle.aspx | |
######################################################################################## | |
function Play([int] $freq, [int] $duration) | |
{ | |
[console]::Beep($freq, $duration); | |
} | |
function GetNoteFreq([string]$note) | |
{ | |
# n is the number of half steps from the fixed note. | |
$note -match '([A-G#]{1,2})(\d+)' | out-null | |
$octave = ([int] $matches[2]) - 4; | |
$n = $octave * 12 + ( GetHalfStepsFromA $matches[1] ); | |
$freq = $f0 * [math]::Pow($a, $n); | |
return $freq; | |
} | |
function GetHalfStepsFromA([string] $note) | |
{ | |
switch($note) | |
{ | |
'A' { 0 } | |
'A#' { 1 } | |
'Bb' { 1 } | |
'B' { 2 } | |
'C' { 3 } | |
'C#' { 4 } | |
'Db' { 4 } | |
'D' { 5 } | |
'D#' { 6 } | |
'Eb' { 6 } | |
'E' { 7 } | |
'F' { 8 } | |
'F#' { 9 } | |
'Gb' { 9 } | |
'G' { 10 } | |
'G#' { 11 } | |
'Ab' { 11 } | |
} | |
} | |
$notes = write-output ` | |
4A4 4A4 2A4 4A4 4A4 2A4 4A4 4C4 4F3 8G3 1A4 ` | |
4Bb4 4Bb4 4Bb4 8Bb4 4Bb4 4A4 4A4 8A4 8A4 4A4 4G3 4G3 4A4 2G3 2C4 ` | |
4A4 4A4 2A4 4A4 4A4 2A4 4A4 4C4 4F3 4G3 1A4 4Bb4 4Bb4 4Bb4 4Bb4 ` | |
4Bb4 4A4 4A4 8A4 8A4 4C4 4C4 4Bb4 4G3 1F3 4C3 4A4 4G3 4F3 2C3 8C3 8C3 ` | |
4C3 4A4 4G3 4F3 1D3 4D3 4Bb4 4A4 4G3 '1E3' 4C4 4C4 4Bb4 4G3 ` | |
1A4 4C3 4A4 4G3 4F3 1C3 4C3 4A4 4G3 4F3 1D3 ` | |
4D3 4Bb3 4A4 4G3 4C4 4C4 4C4 8C4 8C4 4D4 4C4 4Bb4 4G3 4F3 2C4 4A4 4A4 2A4 ` | |
4A4 4A4 2A4 4A4 4C4 4C3 8G3 1A4 4Bb4 4Bb4 4Bb4 8Bb4 4Bb4 4A4 4A4 8A4 8A4 ` | |
4A4 4G3 4G3 4A4 2G3 2C4 4A4 4A4 2A4 4A4 4A4 2A4 4A4 4C4 4F3 8G3 ` | |
1A4 4Bb4 4Bb4 4Bb4 4Bb4 4Bb4 4A4 4A4 8A4 8A4 4C4 4C4 4Bb4 4G3 1F3 | |
# | |
# Note is given by fn=f0 * (a)^n | |
# a is the twelth root of 2 | |
# n is the number of half steps from f0, positive or negative. | |
# f0 used here is A4 at 440 Hz | |
# | |
$f0 = 440; | |
$a = [math]::pow(2,(1/12)); # Twelth root of 2 | |
$StandardDuration = 1000; | |
foreach($note in $notes) | |
{ | |
$note -match '(\d)(.+)' | out-null | |
$duration = $StandardDuration / ([int] $matches[1]); | |
$playNote = $matches[2]; | |
$freq = GetNoteFreq $playNote; | |
write-host $playNote; | |
Play $freq $duration | |
start-sleep -milli 50 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment