Last Updated or created 2024-03-07
I’ve a lot of bagpipe writer music files, many are the same tune but a little different.
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
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)
#!/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
#!/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:
11th of September, The.bww,"*udduddudduddudurrdudrrdudduddudrrduuuuududurrdudrrurrdududurrdudrrduddudurrduudduddudduddududdurdudrurdduddududr urduuudrduddurdudrudrurduududdurdudrurdduddururdududduddudduddudruddudruddudduddudruddruududududududrudurddrududruddudrudduddudurddrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrudrrud rrudrrudrrudrrudrrudrrudrrudrrudrrudrruuduuduuduuduuduuudrduuduurduuduuurdrduuduuduuuduurduuduuduuduuduu"
Example screenshots

