Category Archives: Music

Working on my Autoharp

I’m missing some chords on my autoharp, so i took it apart and refitted it using simular felt.

Cutting places with a penknife and placing new parts.

C E G – Cmaj
A C D F# – D7
B D G – Gmaj
B E G – Emin

A C E – Amin
B D F# – Bmin
B D F G – G dom seventh
A C# E G – A dom seventh

A D F# – Dmaj
A C F – Fmaj
A D F – Dmin
A C# F# – F sharp minor / G flat minor

Personal BWW music files search engine.

I’ve a lot of bagpipe writer music files, many are the same tune but a little different.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
find -type f | egrep -i "bww$|bmw$" | wc -l
34565
find -type f | egrep -i "bww$|bmw$" | wc -l 34565
find -type f | egrep -i "bww$|bmw$" | wc -l
34565

Most contain information about composers, complete title, arrangements and information about harmony and seconds/thirds/whatever.

So I made a PHP search script and a BASH indexer.
(This is NOT a safe script to use servers with internet access)

PHP

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Strict Search: <form method="post" action="?"><input type="Text" name="words" size=40 value=""><input type="Submit" name="submit" value="search"></form>
Fuzzy Search: <form method="post" action="?"><input type="Text" name="words2" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form>
Parsons Search: <form method="post" action="?"><input type="Text" name="words3" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form>
<P><PRE>
<?PHP
if ($_POST['words']) {
$words = preg_replace("(\r\n|\n|\r)", "", $_POST['words']);
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list |/bin/grep -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g' ";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
if ($_POST['words2']) {
$words=$_POST['words2'];
$words2key=$_POST['words2key'];
$words = preg_replace("(\r\n|\n|\r)", "", $words);
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
if ($_POST['words3']) {
$words=$_POST['words3'];
$words2key=$_POST['words2key'];
$words = preg_replace("(\r\n|\n|\r)", "", $words);
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list.parsons |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
?>
</PRE>
Strict Search: <form method="post" action="?"><input type="Text" name="words" size=40 value=""><input type="Submit" name="submit" value="search"></form> Fuzzy Search: <form method="post" action="?"><input type="Text" name="words2" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form> Parsons Search: <form method="post" action="?"><input type="Text" name="words3" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form> <P><PRE> <?PHP if ($_POST['words']) { $words = preg_replace("(\r\n|\n|\r)", "", $_POST['words']); $words = preg_replace("/[^0-9a-z]/i",'', $words); $command = "/bin/cat /var/www/html/findbww/bww.list |/bin/grep -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g' "; $blah=shell_exec($command); $blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah); print $blah; } if ($_POST['words2']) { $words=$_POST['words2']; $words2key=$_POST['words2key']; $words = preg_replace("(\r\n|\n|\r)", "", $words); $words = preg_replace("/[^0-9a-z]/i",'', $words); $command = "/bin/cat /var/www/html/findbww/bww.list |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'"; $blah=shell_exec($command); $blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah); print $blah; } if ($_POST['words3']) { $words=$_POST['words3']; $words2key=$_POST['words2key']; $words = preg_replace("(\r\n|\n|\r)", "", $words); $words = preg_replace("/[^0-9a-z]/i",'', $words); $command = "/bin/cat /var/www/html/findbww/bww.list.parsons |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'"; $blah=shell_exec($command); $blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah); print $blah; } ?> </PRE>
Strict Search: <form method="post" action="?"><input type="Text" name="words" size=40 value=""><input type="Submit" name="submit" value="search"></form>
Fuzzy Search: <form method="post" action="?"><input type="Text" name="words2" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form>
Parsons Search: <form method="post" action="?"><input type="Text" name="words3" size=40 value=""><input type="Submit" name="submit" value="search">Fuzzy-ness<input type="Text" name="words2key" size=1 value="3"></form>

<P><PRE>
<?PHP
if ($_POST['words']) {
$words = preg_replace("(\r\n|\n|\r)", "", $_POST['words']); 
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list |/bin/grep -i $words | sed 's/*\w\+//' | sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g' ";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
if ($_POST['words2']) {
$words=$_POST['words2'];
$words2key=$_POST['words2key'];
$words = preg_replace("(\r\n|\n|\r)", "", $words); 
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' |  sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
if ($_POST['words3']) {
$words=$_POST['words3'];
$words2key=$_POST['words2key'];
$words = preg_replace("(\r\n|\n|\r)", "", $words); 
$words = preg_replace("/[^0-9a-z]/i",'', $words);
$command = "/bin/cat /var/www/html/findbww/bww.list.parsons |/usr/bin/agrep -$words2key -i $words | sed 's/*\w\+//' |  sed 's/\\/private\\/Private\\/Henri\\/save\\/move\\/cds-uitzoeken\\///g'";
$blah=shell_exec($command);
$blah=str_replace("$words", "<b><font color=red>$words</font></b>",$blah);
print $blah;
}
?>
</PRE>

Bash indexer (uses agrep)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/bin/bash
[ `find /FULLPATH/Music/Bagpipe-music-writer/ -type f | wc -l` -eq 0 ] && exit
cd /var/www/html/findbww
: > bww.list
: > bww.list.parsons
locate -i bww | egrep -i "\.bww$" |grep -v html.bww| while read tunepath; do
tune=$(basename "$tunepath")
keywords=$(cat "$tunepath" | egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }'
| grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015")
parsons=$(./parsons "$tunepath")
echo "$tunepath,$tune,$keywords" >> bww.list
echo "$tunepath,$parsons" >> bww.list.parsons
done
locate -i bwm | egrep -i "\.bwm$" |grep -v html.bwm| while read tunepath; do
tune=$(basename "$tunepath")
keywords=$(cat "$tunepath" | egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }'
| grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015")
parsons=$(./parsons "$tunepath")
echo "$tunepath,$tune,$keywords" >> bww.list
echo "$tunepath,$parsons" >> bww.list.parsons
done
chown www-data bww.list*
#!/bin/bash [ `find /FULLPATH/Music/Bagpipe-music-writer/ -type f | wc -l` -eq 0 ] && exit cd /var/www/html/findbww : > bww.list : > bww.list.parsons locate -i bww | egrep -i "\.bww$" |grep -v html.bww| while read tunepath; do tune=$(basename "$tunepath") keywords=$(cat "$tunepath" | egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }' | grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015") parsons=$(./parsons "$tunepath") echo "$tunepath,$tune,$keywords" >> bww.list echo "$tunepath,$parsons" >> bww.list.parsons done locate -i bwm | egrep -i "\.bwm$" |grep -v html.bwm| while read tunepath; do tune=$(basename "$tunepath") keywords=$(cat "$tunepath" | egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }' | grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015") parsons=$(./parsons "$tunepath") echo "$tunepath,$tune,$keywords" >> bww.list echo "$tunepath,$parsons" >> bww.list.parsons done chown www-data bww.list*
#!/bin/bash
[ `find /FULLPATH/Music/Bagpipe-music-writer/ -type f  | wc -l` -eq 0 ] && exit
cd /var/www/html/findbww
: > bww.list
: > bww.list.parsons
locate -i bww |  egrep -i "\.bww$" |grep -v html.bww|  while read tunepath; do
tune=$(basename "$tunepath")
keywords=$(cat "$tunepath" |  egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }' 
| grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015")
parsons=$(./parsons "$tunepath")
echo "$tunepath,$tune,$keywords" >> bww.list
echo "$tunepath,$parsons" >> bww.list.parsons
done

locate -i bwm |  egrep -i "\.bwm$" |grep -v html.bwm|  while read tunepath; do
tune=$(basename "$tunepath")
keywords=$(cat "$tunepath" |  egrep -vi "FontSizes|FrequencyMappings|GracenoteDurations|InstrumentMappings|MIDINoteMappings|TuneFormat|VariationTempo|TuneTempo|Bagpipe Reader" | awk -F',\\(' '{ print $1 }' 
| grep -v \"\" | grep -v ^! | grep -v "Converted from" | grep ^\" |tr '\n' ','| tr -d "\015")
parsons=$(./parsons "$tunepath")
echo "$tunepath,$tune,$keywords" >> bww.list
echo "$tunepath,$parsons" >> bww.list.parsons
done
chown www-data bww.list*

Converting for parsons code.
See https://www.henriaanstoot.nl/2022/03/23/20-years-www-pipetunesearch-org/
and https://en.wikipedia.org/wiki/Parsons_code

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/bin/bash
echo -n "\""
for f in `cat "$1"` ;do echo "$f" | tr -cd "[A-HL]_[0-9]" ; echo ; done | grep -v '^$' |grep _ > /tmp/parsons
let count=0
for f in `cat /tmp/parsons| tr -cd "[A-HL] \n"` ;do
if [ "$f" = "LG" ] ; then g=0; fi
if [ "$f" = "LA" ] ; then g=1; fi
if [ "$f" = "B" ] ; then g=2; fi
if [ "$f" = "C" ] ; then g=3; fi
if [ "$f" = "D" ] ; then g=4; fi
if [ "$f" = "E" ] ; then g=5; fi
if [ "$f" = "F" ] ; then g=6; fi
if [ "$f" = "HG" ] ; then g=7; fi
if [ "$f" = "HA" ] ; then g=8; fi
if [ $count -eq 0 ] ;then
echo -n "*";
((count++))
last=$g
else
if [ "2$g" -eq "2$last" ] ; then echo -n "r" ; fi
if [ "2$g" -lt "2$last" ] ; then echo -n "d" ; fi
if [ "2$g" -gt "2$last" ] ; then echo -n "u" ; fi
last=$g
fi
done
echo "\""
#!/bin/bash echo -n "\"" for f in `cat "$1"` ;do echo "$f" | tr -cd "[A-HL]_[0-9]" ; echo ; done | grep -v '^$' |grep _ > /tmp/parsons let count=0 for f in `cat /tmp/parsons| tr -cd "[A-HL] \n"` ;do if [ "$f" = "LG" ] ; then g=0; fi if [ "$f" = "LA" ] ; then g=1; fi if [ "$f" = "B" ] ; then g=2; fi if [ "$f" = "C" ] ; then g=3; fi if [ "$f" = "D" ] ; then g=4; fi if [ "$f" = "E" ] ; then g=5; fi if [ "$f" = "F" ] ; then g=6; fi if [ "$f" = "HG" ] ; then g=7; fi if [ "$f" = "HA" ] ; then g=8; fi if [ $count -eq 0 ] ;then echo -n "*"; ((count++)) last=$g else if [ "2$g" -eq "2$last" ] ; then echo -n "r" ; fi if [ "2$g" -lt "2$last" ] ; then echo -n "d" ; fi if [ "2$g" -gt "2$last" ] ; then echo -n "u" ; fi last=$g fi done echo "\""
#!/bin/bash
echo -n "\""
for f in `cat "$1"` ;do echo "$f" |  tr -cd "[A-HL]_[0-9]" ; echo  ; done | grep -v '^$' |grep _ > /tmp/parsons
let count=0
for f in `cat /tmp/parsons| tr -cd "[A-HL] \n"` ;do
  if [ "$f" = "LG" ] ; then g=0; fi
  if [ "$f" = "LA" ] ; then g=1; fi
  if [ "$f" = "B" ] ; then g=2; fi
  if [ "$f" = "C" ] ; then g=3; fi
  if [ "$f" = "D" ] ; then g=4; fi
  if [ "$f" = "E" ] ; then g=5; fi
  if [ "$f" = "F" ] ; then g=6; fi
  if [ "$f" = "HG" ] ; then g=7; fi
  if [ "$f" = "HA" ] ; then g=8; fi
 if [ $count -eq 0 ] ;then 
  echo -n "*"; 
  ((count++))
  last=$g
 else
 if [ "2$g" -eq "2$last" ] ; then echo -n "r" ; fi
 if [ "2$g" -lt "2$last" ] ; then echo -n "d" ; fi
 if [ "2$g" -gt "2$last" ] ; then echo -n "u" ; fi
 last=$g
fi
done
echo "\""

Just place all files in a directory on a php enabled webserver.
The bash script is being run daily.
(parsons bash script is called from this main script)
These will generate 2 files
One with the filename and all useful text like composers.
And a file with the filename and the parsons code.
Example:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
11th of September, The.bww,"*udduddudduddudurrdudrrdudduddudrrduuuuududurrdudrrurrdududurrdudrrduddudurrduudduddudduddududdurdudrurdduddududr
urduuudrduddurdudrudrurduududdurdudrurdduddururdududduddudduddudruddudruddudduddudruddruududududududrudurddrududruddudrudduddudurddrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrud
rrudrrudrrudrrudrrudrrudrrudrrudrrudrruuduuduuduuduuduuudrduuduurduuduuurdrduuduuduuuduurduuduuduuduuduu"
11th of September, The.bww,"*udduddudduddudurrdudrrdudduddudrrduuuuududurrdudrrurrdududurrdudrrduddudurrduudduddudduddududdurdudrurdduddududr urduuudrduddurdudrudrurduududdurdudrurdduddururdududduddudduddudruddudruddudduddudruddruududududududrudurddrududruddudrudduddudurddrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrud rrudrrudrrudrrudrrudrrudrrudrrudrrudrruuduuduuduuduuduuudrduuduurduuduuurdrduuduuduuuduurduuduuduuduuduu"
11th of September, The.bww,"*udduddudduddudurrdudrrdudduddudrrduuuuududurrdudrrurrdududurrdudrrduddudurrduudduddudduddududdurdudrurdduddududr
urduuudrduddurdudrudrurduududdurdudrurdduddururdududduddudduddudruddudruddudduddudruddruududududududrudurddrududruddudrudduddudurddrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrud
rrudrrudrrudrrudrrudrrudrrudrrudrrudrruuduuduuduuduuduuudrduuduurduuduuurdrduuduuduuuduurduuduuduuduuduu"

Example screenshots

Sun in the stream on my Uilleann Pipes

Irmgard told me a week ago she liked “Sun in the stream” by Enya.
I found a midi file a while ago, which i edited to get the accompaniment part only, without the melody line.

I played this after 4 times practicing, and learning to use some extra keys on the chanter while doing so.

I played the midi file on my Yamaha QY-100 sequencer.

Holes and keys on a Uilleann Pipe Chanter

Merry xmas and a happy 2018

Joe Mooney Summer School

UPDATE: 20230426 – Book with info

While on holiday in Ireland, Coline, Monique and i went to the Joe Mooney Summer School of Traditional Irish Music, Song & Dance.

Every July Drumshanbo plays host to the award winning Joe Mooney Summer School, a week long festival of traditional Irish music, song and dance named after the man who did so much to promote the cause of Leitrim and his beloved town. The committee continue to emulate his high ideals, endeavouring to promote Leitrim’s heritage of traditional music while handing on the best traditions of the past to future generations.

While being in Ireland from 9-27 Juli, we drove around and visited many places.

One week was reserved for attending the Summer School in Drumshanbo, Leitrim.

Coline followed the Flute Course, Monique Bodhran and I Uilleann Pipes.

I was being taught by Brain McNamara.

Internationally respected as a performer and tutor, Brian McNamara hails from a musically rich rural region (County Leitrim) of Ireland which has produced notable musicians past and present and which has been prominently associated with the preservation and performance of Irish Traditional Music.

During daytime there were lessons, and concerts in the evening.
We learned a lot!

Some evening practising by the lake

Tunes i’ve learned from Brian are:

  • Gander at the Pratie Hole
  • Honeymoon
  • Kitty goes a milking
  • O’Sullivans March

Beautiful interpretation of the tune “Battle of Cnoc na ndos”

UPDATE: 20230426 – Book with info

While flipping through some books i own about piping i found this little book: “The Man & his Music” An Anthology of the writings of Breandan Breathnach. ISBN: 09509743

Portable Squeeze Server

Update : https://www.henriaanstoot.nl/2022/05/26/portable-logitech-media-server-again/


Below is a picture of my mobile LMS server i used in my car.
I only had radio and a CD player, i’m not a radio man .. folk, pipes and audiobooks


At the time i was working for Dutch Railways, imagine me walking with this blinky leds thingy, though the railway station …

It consisted of a dual port usb charger, a usb hub to power the drive, the rpi wasn’t strong enough. Thumbdrives where small in capacity, so i had to use a spinning disk harddrive.
It was only a raspberry 1, in a case i had designed and lasercutted at Fablab Utrecht.

Now you can get rid of the Usb hub and harddrive using a small but with large capacity sdcards.

I could charge the thing in my car, and when i got home, it would connect to my home wifi network, sync-ed my MP3’s and turn off.

Passing places and The Road East.

Did a simple recording on one of our practice sessions.

Two tunes by Fred Morrison.

Fred Morrison was born and raised near Glasgow, but it’s the celebrated Gaelic piping tradition of his father’s native South Uist, in the outer Hebrides, that forms the bedrock of his intensely expressive, uniquely adventurous style.

We’ve been to South Uist in 2022, there are many passing places in the North and on the Isles.
But the tune Passing Places was writting because Fred was commisioned to produce a soundtrack for a film/documentary about the Hebrides.
The tune “The Road East” was written on a car journey from Glasgow to Edinburgh.

This is my low D whistle, I also want to play this on our Irish Flute.

Fixing a accordeon

In our folkband i play also the Accordeon.

I only know a few songs on this, but i needed to learn at least one to play in our band. This is in honour of my mother who alway encouraged us to play musical instruments.

This accordeon was het one she and her sisters learned to play on when they where young.

In 40+ years some things needed replacing!