play file | tempo [pitch1 duration1] [pitch2 duration2]...
From syntax above we can create boot tunes via two ways. The easy way is create tune via GRUB_INIT_TUNE parameter in file: /etc/default/grub. In this file, we can fill this parameter with tempo, frequency, and duration of the tunes like this one:
GRUB_INIT_TUNE="480 900 2 1000 2 800 2 400 2 600 3"
We can find more tune example from internet like in this forum.
After that, save the file and update grub2 configuration with command sudo update-grub via terminal. Reboot to hearing test this tunes.
The hard way is create binary file that contain value of parameter GRUB_INIT_TUNE. According to Grub Manual, the file format is first the tempo as an unsigned 32bit little-endian number, then pairs of unsigned 16bit little-endian numbers for pitch and duration pairs.
So, to make this binary file, we must convert parameter values into hexadecimal numbers with format following to the grub manual. I had made a script to convert those parameter numbers into 32bit little-endian format, and save the result into binary file.
#!/bin/sh if [ $# -lt 4 ]; then echo "Usage: $0 savefile tempo freq dur [freq dur freq dur...]" >&2 exit 1 fi file=$1; shift tempo=$1; shift a=`printf "%0.8x" $tempo)` echo -en "\x${a:6:2}\x${a:4:2}\x${a:2:2}\x${a:0:2}" > $file while [ -n "$*" ]; do freq=$1; shift [ $freq -eq 0 ] && freq=1 dur=$1 ; shift a=`printf "%0.4x" $freq)` echo -en "\x${a:2:2}\x${a:0:2}" >> $file a=`printf "%0.4x" $dur)` echo -en "\x${a:2:2}\x${a:0:2}" >> $file done hexdump -Cv $fileExample operation using script above (name of script ex.: tunehex) is:
./tunehex tune.bin 480 900 2 1000 2 800 2 400 2 600 3Copy this file to boot folder:
sudo cp tune.bin /bootEdit file /etc/default/grub and make sure parameter GRUB_INIT_TUNE is commented.
And also edit file /etc/grub.d/00_header and add line in section "Play an initial tune" like this one:
# Play an initial tune if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then echo "play ${GRUB_INIT_TUNE}" else echo "play /boot/tune.bin" fiDon't forget to update grub with update-grub command. And final step is make a cup of coffee and reboot computer to listening this tunes.
NOTE: This tunes can only be heared on old PC or laptop that has 4-pin internal speaker (usually has a tune at BIOS boot time).
Must-۩o 2019
I've got C in english.