Last Updated or created 2023-01-05
I want to take simple ABC Music notation tunes and convert these to animations which shows you which keys to press and to push or pull.
This is a work in progress.
Script is using ImageMagick and ffmpeg
I started this in bash, and i should rewrite this in python.
Bash script which generates the images
#!/bin/bash
convert -size 800x600 canvas:white white.png
x=55
y=55
draw=""
for xx in $(seq 1 6); do
for yy in $(seq 1 5); do
startx=$(( $x * $xx + 100))
starty=$(( $y * $yy + 200))
if [ $xx -gt 3 ] ; then startx=$(($startx + 200)) ;fi
draw="$draw -draw \"circle $startx,$starty $(( $startx - 10)),$(( $starty - 10 ))\""
done
done
echo convert $draw white.png draw_circle.png | bash
for xx in $(seq 1 6); do
for yy in $(seq 1 5); do
startx=$(( $x * $xx + 100))
starty=$(( $y * $yy + 200))
if [ $xx -gt 3 ] ; then startx=$(($startx + 200)) ;fi
convert -fill white -stroke black $draw -draw "circle $startx,$starty $(( $startx - 10)),$(( $starty - 10 ))" draw_circle.png $xx-$yy.png
convert -draw "rectangle 300,50 500,100" $xx-$yy.png push-$xx-$yy.png
convert -draw "rectangle 150,50 650,100" $xx-$yy.png pull-$xx-$yy.png
done
done
Example movie generated using random notes/length pause
for f in $(seq 1 50) ; do pushpull=$(shuf -n1 -e push pull) row=$(shuf -n1 -e 1 2 2 2 2 2 3 4 4 5 5 5 6) col=$(shuf -n1 -e 1 1 1 2 2 3) pauze=$(shuf -n1 -e 0 0 0 0 0 0 0 0 1 ) length=$(shuf -n1 -e 1 1 1 1 2 2 3 4) file="$pushpull-$row-$col.png" if [ $pauze == "1" ]; then file="draw_circle.png" fi for f in $(seq 1 $lenght) ; do echo "file $file" echo "duration 0.5" done done
list to mp4
ffmpeg -f concat -i list -vf fps=10 -pix_fmt yuv420p test.mp4
Above movie shows left and right hand. Keys to press.
And the bar above represents PULL/PUSH
Todo/In progress:
- abc parser ( started )
- Push/Pull as text in above movie also note to play??
- Rewrite to python