The holiday season is here, and what better way to spread some Christmas cheer than by combining coding with some festive fun? Today, I’ll show you how you can use PowerShell to play the iconic Christmas tune, “Jingle Bells.”
PowerShell isn’t just a powerful tool for automation and management; with a little creativity, it can also bring a smile to your face. Here’s how you can create a simple script to play the “Jingle Bells” melody using PowerShell’s built-in Beep
functionality.
The Script
Below is the full script for playing “Jingle Bells” using PowerShell:
# Define the frequencies for musical notes
$notes = @{
"B3" = 247; # B3
"C4" = 262; # C4
"D4" = 294; # D4
"E4" = 330; # E4
"F4" = 349; # F4
"G4" = 392; # G4
"A4" = 440; # A4
"B4" = 494; # B4
"REST" = 0 # Pause
}
# Jingle Bells Chorus (Note, Duration in ms)
$melody = @(
# Jingle Bells, Jingle Bells
@{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=800},
@{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=800},
# Jingle all the way
@{Note="E4"; Duration=400}, @{Note="G4"; Duration=400}, @{Note="C4"; Duration=400}, @{Note="D4"; Duration=400},
@{Note="E4"; Duration=1600},
# Oh what fun it is to ride
@{Note="F4"; Duration=400}, @{Note="F4"; Duration=400}, @{Note="F4"; Duration=400}, @{Note="F4"; Duration=400},
@{Note="F4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=400},
# In a one-horse open sleigh, hey!
@{Note="E4"; Duration=400}, @{Note="D4"; Duration=400}, @{Note="D4"; Duration=400}, @{Note="E4"; Duration=400},
@{Note="D4"; Duration=800},
@{Note="G4"; Duration=800},
# Repeat of the chorus
# Jingle Bells, Jingle Bells
@{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=800},
@{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=800},
# Jingle all the way
@{Note="E4"; Duration=400}, @{Note="G4"; Duration=400}, @{Note="C4"; Duration=400}, @{Note="D4"; Duration=400},
@{Note="E4"; Duration=1600},
# Oh what fun it is to ride
@{Note="F4"; Duration=400}, @{Note="F4"; Duration=400}, @{Note="F4"; Duration=400}, @{Note="F4"; Duration=400},
@{Note="F4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=400}, @{Note="E4"; Duration=400},
# In a one-horse open sleigh!
@{Note="G4"; Duration=400}, @{Note="G4"; Duration=400}, @{Note="F4"; Duration=400}, @{Note="D4"; Duration=400},
@{Note="C4"; Duration=1600}
)
# Function to play a note
function Play-Note
{
param (
[string]$Note,
[int]$Duration
)
$freq = $notes[$Note]
if($freq -eq 0)
{
Start-Sleep -Milliseconds $Duration
}
else
{
[Console]::Beep($freq, $Duration)
}
}
# Play the melody
$melody | ForEach-Object -Process {
Play-Note -Note $_.Note -Duration $_.Duration
}
How It Works
- Defining Notes: The
$notes
hashtable maps musical notes to their corresponding frequencies in Hertz. These frequencies allow theBeep
method to generate sound for specific notes. - The Melody: The
$melody
array defines each note and its duration in milliseconds. - The Function: The
Play-Note
function takes a note and duration as input, playing the sound with[Console]::Beep
or pausing for a rest. - Playing the Song: The script iterates through the
$melody
array and plays each note sequentially.
Running the Script
Save the script to a .ps1
file, then open PowerShell and execute it. Make sure you have sufficient privileges to run scripts by setting the execution policy:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
I hope this script brings a little joy to your day and inspires you to experiment with PowerShell beyond its traditional use. Whether you’re coding or just enjoying the holidays, may your season be filled with happiness and cheer.
Happy Holidays and Merry Christmas!