<#
.SYNOPSIS
        Plays Jingle Bells
.DESCRIPTION
        This PowerShell script plays the famous Jingle Bells song.
.EXAMPLE
        PS> ./play-jingle-bells.ps1
	(listen and enjoy)
.LINK
        https://github.com/fleschutz/PowerShell
.NOTES
	Author: Markus Fleschutz | License: CC0
#>

$Notes = New-Object -TypeName psobject -Property @{
    REST    = 0
    GbelowC = 196
    A       = 220
    Asharp  = 233
    B       = 247
    C       = 262
    Csharp  = 277
    D       = 294
    Dsharp  = 311
    E       = 330
    F       = 349
    Fsharp  = 370
    G       = 392
    Gsharp  = 415
    AA      = 440
    AAsharp = 466
    BB      = 493
    CC      = 523
    CCsharp = 554
    DD      = 587
    DDsharp = 622
    EE      = 659
    FF      = 698
    FFsharp = 740
    GG      = 784
    GGsharp = 830
    }
$Duration = New-Object -TypeName psobject -Property @{
    WHOLE     = 1600
    HALF      = 800
    QUARTER   = 400
    EIGHTH    = 200
    SIXTEENTH = 100
    }

try {
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.C, $Duration.HALF   )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.D, $Duration.HALF   )
	Start-Sleep -m $Duration.EIGHTH
	[System.Console]::Beep($Notes.D, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.E, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.E, $Duration.HALF)
	Start-Sleep -m $Duration.EIGHTH
	[System.Console]::Beep($Notes.E, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.C, $Duration.HALF   )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.C, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.D, $Duration.HALF   )
	Start-Sleep -m $Duration.QUARTER
	[System.Console]::Beep($Notes.D, $Duration.EIGHTH )
	[System.Console]::Beep($Notes.E, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.DD, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.HALF)
	[System.Console]::Beep($Notes.CC, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	Start-Sleep -m $Duration.EIGHTH
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.AA, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.HALF)
	[System.Console]::Beep($Notes.CC, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.AA, $Duration.HALF)
	Start-Sleep -m $Duration.EIGHTH
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.QUARTER)
	[System.Console]::Beep($Notes.AA, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.AA, $Duration.EIGHTH)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.CC, $Duration.QUARTER)
	[System.Console]::Beep($Notes.BB, $Duration.QUARTER)
	[System.Console]::Beep($Notes.G, $Duration.QUARTER)
	[System.Console]::Beep($Notes.F, $Duration.HALF)
	exit 0 # success
} catch {
	"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
	exit 1
}
