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