Mercurial > hg > sonic-visualiser
diff osc/demoscript.sh @ 73:e200055fe80b
* Add vertical zooming and snap-to-selection for OSC control;
add a demo script
author | Chris Cannam |
---|---|
date | Wed, 15 Nov 2006 18:22:26 +0000 |
parents | |
children | f81611bf11ed |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/osc/demoscript.sh Wed Nov 15 18:22:26 2006 +0000 @@ -0,0 +1,391 @@ +#!/bin/bash + +audio=$HOME/music +preferred=$audio/ogg/linux +list=audiofiles.txt +used=audiofiles-used.txt + +sv-command quit + +pick_file() +{ + count=`wc -l "$list" 2>/dev/null | awk '{ print $1 }'` + if [ ! -f "$list" ] || [ "$count" -eq "0" ] ; then + find "$audio" -name \*.ogg -print >> "$list" + find "$audio" -name \*.mp3 -print >> "$list" + find "$audio" -name \*.wav -print >> "$list" + find "$preferred" -name \*.ogg -print >> "$list" + find "$preferred" -name \*.mp3 -print >> "$list" + find "$preferred" -name \*.wav -print >> "$list" + count=`wc -l "$list" 2>/dev/null | awk '{ print $1 }'` + fi + while [ -z "$file" ]; do + index=$((RANDOM % $count)) + file=`tail +"$index" "$list" | head -1` + [ -f "$file" ] || continue + done + fgrep -v "$file" "$list" > "$list"_ && mv "$list"_ "$list" + echo "$file" +} + +load_a_file() +{ + file=`pick_file` + if ! sv-command open "$file"; then + pid="`pidof sonic-visualiser`" + if [ -z "$pid" ]; then + ( setsid ../sonic-visualiser & ) + sleep 2 + load_a_file + else + echo "ERROR: Unable to contact sonic-visualiser pid $pid" 1>&2 + exit 1 + fi + fi +} + +show_stuff() +{ + sv-command set overlays 2 + sv-command set zoomwheels 1 + sv-command set propertyboxes 1 +} + +hide_stuff() +{ + sv-command set overlays 0 + sv-command set zoomwheels 0 + sv-command set propertyboxes 0 +} + +reset() +{ + for pane in 1 2 3 4 5; do + for layer in 1 2 3 4 5 6 7 8 9 10; do + sv-command delete layer + done + sv-command delete pane + done + sv-command zoom default + sv-command add waveform + show_stuff +} + +scroll_and_zoom() +{ + sv-command set overlays 0 + sv-command set zoomwheels 0 + sv-command set propertyboxes 0 + sv-command setcurrent 1 1 + sv-command delete layer + sv-command setcurrent 1 1 + sv-command set layer Colour Red + sleep 1 + sv-command set pane Global-Zoom off + sv-command set pane Global-Scroll off + sv-command set pane Follow-Playback Scroll + for zoom in 950 900 850 800 750 700 650 600 550 512 450 400 350 300 256 192 160 128 96 64 48 32 24 16; do + sv-command zoom $zoom + sleep 0.1 + done +} + +play() +{ + sv-command play "$@" +} + +fade_in() +{ + sv-command set gain 0 + sleep 0.5 + play "$@" + for gain in 0.001 0.01 0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1; do + sv-command set gain $gain + sleep 0.1 + done +} + +fade_out() +{ + for gain in 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.05 0.01 0.001; do + sv-command set gain $gain + sleep 0.1 + done + stop + sv-command set gain 1 +} + +slow() +{ + for speed in -1 -10 -20 -30 -40 -50 -60 -70 -80 -100 -140 -200 -250 -300 -400 -500 -700 -800 -900 -1000; do + sv-command set speedup "$speed" + sleep 1 + done +} + +stop() +{ + sv-command stop "$@" + sv-command set speedup 0 +} + +quit() +{ + sv-command quit +} + +add_melodic_range_spectrogram() +{ + sv-command set propertyboxes 1 + sv-command add spectrogram + sv-command set layer Window-Size 4096 +# sv-command set layer Window-Overlap 4 + sv-command set layer Window-Overlap 3 + sv-command set layer Frequency-Scale Log + sv-command set layer Colour-Scale Meter +} + +zoom_in_spectrogram() +{ + sv-command zoomvertical 43 8000 + for x in 1 2 3 4 5 6; do + max=$((8000 - 1000*$x)) + sv-command zoomvertical 43 "$max" + sleep 0.1 + done + for x in 1 2 3 4 5; do + max=$((2000 - 100 * $x)) + sv-command zoomvertical 43 "$max" + sleep 0.1 + done +} + +zoom_in_spectrogram_further() +{ + for x in 1 2 3 4 5; do + sv-command zoomvertical in + done +} + +playback_bits() +{ + sv-command set pane Follow-Playback Scroll + sv-command jump 10 + sv-command setcurrent 1 2 + sv-command set layer Colour Blue + sleep 5 + hide_stuff + fade_in + sleep 10 + scroll_and_zoom + sleep 10 + slow + #sv-command set layer Normalize-Visible-Area on + for zoom in 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1; do + sv-command zoom $zoom + sleep 0.1 + done + sleep 8 + fade_out + done_playback_bits=1 +} + +spectrogram_bits() +{ + add_melodic_range_spectrogram + sv-command zoom 256 + sleep 10 + zoom_in_spectrogram + sleep 20 + + if [ -n "$done_playback_bits" ]; then + sv-command setcurrent 1 + sv-command zoom out + sv-command zoom out + sv-command zoom out + sv-command zoom out + sv-command zoom out + sv-command setcurrent 2 + fi + + hide_stuff + fade_in + sleep 10 + sv-command set layer Bin-Display Frequencies + sv-command set layer Normalize-Columns on + sleep 20 + sv-command set layer Bin-Display "All Bins" + sv-command set layer Colour "Red on Blue" + sleep 10 + fade_out + sleep 1 + done_spectrogram_bits=1 + +# zoom_in_spectrogram_further +} + +onset_bits() +{ + show_stuff + sv-command setcurrent 1 + sv-command set pane Global-Zoom on + sv-command set pane Global-Scroll on + sleep 5 + sv-command zoom default + sv-command zoom in + sv-command zoom in + sv-command zoom in + sv-command add timeruler + sv-command transform vamp:vamp-aubio:aubioonset:detectionfunction + sleep 5 + sv-command set layer Plot-Type Curve + sleep 5 + sv-command setcurrent 1 + sv-command set pane Follow-Playback Page + sv-command transform vamp:vamp-aubio:aubioonset:detectionfunction + sv-command set layer Colour Red + sleep 5 + sv-command set layer Plot-Type Segmentation +# sv-command set layer Vertical-Scale "Log Scale" + sv-command jump 30 + sleep 5 +# hide_stuff + if [ -n "$done_spectrogram_bits" ]; then + sv-command setcurrent 2 + sv-command delete pane + fi + sleep 10 + sv-command setcurrent 1 1 + sv-command set layer Colour Black + sv-command setcurrent 1 2 + fade_in + sleep 5 + sv-command transform vamp:vamp-aubio:aubioonset:onsets + sv-command set layer Colour Black + sleep 20 + sv-command setcurrent 2 +# sv-command transform vamp:qm-vamp-plugins:qm-tempotracker:beats + sv-command transform vamp:vamp-aubio:aubiotempo:beats + sleep 10 + fade_out + show_stuff +} + +selection_bits() +{ +# reset + sv-command set overlays 1 + sv-command set zoomwheels 0 + sv-command setcurrent 2 + sv-command delete pane + if [ -n "$done_playback_bits" ]; then + sv-command setcurrent 1 2 + else + sv-command setcurrent 1 3 + fi + sv-command delete layer + if [ -n "$done_playback_bits" ]; then + sv-command setcurrent 1 2 + else + sv-command setcurrent 1 3 + fi + sv-command delete layer +# sv-command transform vamp:qm-vamp-plugins:qm-tempotracker:beats + sv-command transform vamp:vamp-aubio:aubiotempo:beats + sv-command setcurrent 1 2 + sv-command set layer Colour Orange + sv-command setcurrent 1 3 + sv-command resize 1024 500 + sv-command zoom default + sleep 10 + sv-command loop on + base=$((RANDOM % 100)) + sv-command select $base $base.3 + fade_in selection + sleep 12 + base=$((base + 4)) + sv-command addselect $base $base.1 + sleep 12 + base=$((base + 2)) + sv-command addselect $base $base.1 + sleep 6 + base=$((base + 2)) + sv-command addselect $base $base.3 + sleep 6 + base=$((base + 3)) + sv-command addselect $base $base.3 + sleep 6 + base=$((base + 2)) + sv-command addselect $base $base.3 + sleep 12 + sv-command set speedup -50 + sleep 14 + sv-command set speedup 50 + sleep 8 + sv-command set speedup 100 + sleep 5 + sv-command set speedup 200 + fade_out + sleep 20 + sv-command select none + sv-command setcurrent 1 3 + sv-command delete layer + sv-command setcurrent 1 2 + sv-command set layer Colour Black +} + +chromagram_bits() +{ + add_melodic_range_spectrogram + sv-command add timeruler + sv-command transform vamp:qm-vamp-plugins:qm-chromagram:chromagram + sleep 2 + sv-command jump 20 + sleep 10 + sv-command zoom out + fade_in + sleep 10 + fade_out +} + +while /bin/true; do + +sleep 2 +load_a_file +sv-command loop on + +sv-command resize 1024 500 +show_stuff +sleep 10 +playback_bits + +sv-command resize 1024 700 +show_stuff +#sleep 10 +spectrogram_bits + +sv-command jump 0 +sv-command resize 1024 700 +show_stuff +sleep 10 +onset_bits + +selection_bits + +sv-command resize 1024 700 + +sv-command jump 0 +chromagram_bits + +sleep 20 + +pid="`pidof sonic-visualiser`" +if [ -n "$pid" ]; then + kill "$pid" + sleep 2 +else + reset +fi + +done