Useless.psm1

$Tone = @{
    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
    C3 = 130
    Db3 = 138
    D3 = 146
    Eb3 = 155
    E3 = 164
    F3 = 174
    Gb3 = 185
    G3 = 196
    Ab3 = 207
    A3 = 220
    Bb3 = 233
    B3 = 246 
    C4 = 261
    Db4 = 277
    D4 = 293
    Eb4 = 311
    E4 = 329
    F4 = 349
    Gb4 = 369
    G4 = 392
    Ab4 = 415
    A4 = 440
    Bb4 = 466
    B4 = 493
    C5 = 523
    Db5 = 544
    D5 = 587
    Eb5 = 622
    E5 = 659
    F5 = 698
    Gb5 = 739
    G5 = 783
    Ab5 = 830
    A5 = 880
    Bb5 = 932
    B5 = 987 
    C6 = 1046
    Db6 = 1108
    D6 = 1174
    Eb6 = 1244
    E6 = 1318
    F6 = 1396
    Gb6 = 1479
    G6 = 1567
    Ab6 = 1661
    A6 = 1760
    Bb6 = 1864
    B6 = 1975
    C7 = 2093
    Db7 = 2217
    D7 = 2349
    Eb7 = 2489
    E7 = 2637
    F7 = 2794
    Gb7 = 2960
    G7 = 3136
    Ab7 = 3322
    A7 = 3520
    Bb7= 3729
    B7 = 3951
}

$Duration = @{
    WHOLE     = 1600
    HALF      = 800
    QUARTER   = 400
    EIGHTH    = 200
    SIXTEENTH = 100
}


function Play-Song
{
    [CmdletBinding()]
    param(
        [hashtable[]]$Melody
    )
    
    foreach($Note in $Melody)
    {
        if($Note.Tone -eq $Tone.Rest)
        {
            Start-Sleep -Milliseconds $Note.duration
        }
        else
        {
            [console]::Beep($Note.Tone, $Note.Duration);
        }
    }
}

function Play-JingleBells
{
    $JingleBells = @(
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.Half
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.Half
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.G5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.C5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.D5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.C4
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.D4
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E4
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.F5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.F5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.F5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.F5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.D5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.D5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.E5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.D5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.G5
        Duration = $Duration.HALF
    },
    @{
        Tone = $Tone.REST
        Duration = $Duration.HALF
    }        
)
Play-Song $JingleBells
}