annotate 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
rev   line source
Chris@73 1 #!/bin/bash
Chris@73 2
Chris@73 3 audio=$HOME/music
Chris@73 4 preferred=$audio/ogg/linux
Chris@73 5 list=audiofiles.txt
Chris@73 6 used=audiofiles-used.txt
Chris@73 7
Chris@73 8 sv-command quit
Chris@73 9
Chris@73 10 pick_file()
Chris@73 11 {
Chris@73 12 count=`wc -l "$list" 2>/dev/null | awk '{ print $1 }'`
Chris@73 13 if [ ! -f "$list" ] || [ "$count" -eq "0" ] ; then
Chris@73 14 find "$audio" -name \*.ogg -print >> "$list"
Chris@73 15 find "$audio" -name \*.mp3 -print >> "$list"
Chris@73 16 find "$audio" -name \*.wav -print >> "$list"
Chris@73 17 find "$preferred" -name \*.ogg -print >> "$list"
Chris@73 18 find "$preferred" -name \*.mp3 -print >> "$list"
Chris@73 19 find "$preferred" -name \*.wav -print >> "$list"
Chris@73 20 count=`wc -l "$list" 2>/dev/null | awk '{ print $1 }'`
Chris@73 21 fi
Chris@73 22 while [ -z "$file" ]; do
Chris@73 23 index=$((RANDOM % $count))
Chris@73 24 file=`tail +"$index" "$list" | head -1`
Chris@73 25 [ -f "$file" ] || continue
Chris@73 26 done
Chris@73 27 fgrep -v "$file" "$list" > "$list"_ && mv "$list"_ "$list"
Chris@73 28 echo "$file"
Chris@73 29 }
Chris@73 30
Chris@73 31 load_a_file()
Chris@73 32 {
Chris@73 33 file=`pick_file`
Chris@73 34 if ! sv-command open "$file"; then
Chris@73 35 pid="`pidof sonic-visualiser`"
Chris@73 36 if [ -z "$pid" ]; then
Chris@73 37 ( setsid ../sonic-visualiser & )
Chris@73 38 sleep 2
Chris@73 39 load_a_file
Chris@73 40 else
Chris@73 41 echo "ERROR: Unable to contact sonic-visualiser pid $pid" 1>&2
Chris@73 42 exit 1
Chris@73 43 fi
Chris@73 44 fi
Chris@73 45 }
Chris@73 46
Chris@73 47 show_stuff()
Chris@73 48 {
Chris@73 49 sv-command set overlays 2
Chris@73 50 sv-command set zoomwheels 1
Chris@73 51 sv-command set propertyboxes 1
Chris@73 52 }
Chris@73 53
Chris@73 54 hide_stuff()
Chris@73 55 {
Chris@73 56 sv-command set overlays 0
Chris@73 57 sv-command set zoomwheels 0
Chris@73 58 sv-command set propertyboxes 0
Chris@73 59 }
Chris@73 60
Chris@73 61 reset()
Chris@73 62 {
Chris@73 63 for pane in 1 2 3 4 5; do
Chris@73 64 for layer in 1 2 3 4 5 6 7 8 9 10; do
Chris@73 65 sv-command delete layer
Chris@73 66 done
Chris@73 67 sv-command delete pane
Chris@73 68 done
Chris@73 69 sv-command zoom default
Chris@73 70 sv-command add waveform
Chris@73 71 show_stuff
Chris@73 72 }
Chris@73 73
Chris@73 74 scroll_and_zoom()
Chris@73 75 {
Chris@73 76 sv-command set overlays 0
Chris@73 77 sv-command set zoomwheels 0
Chris@73 78 sv-command set propertyboxes 0
Chris@73 79 sv-command setcurrent 1 1
Chris@73 80 sv-command delete layer
Chris@73 81 sv-command setcurrent 1 1
Chris@73 82 sv-command set layer Colour Red
Chris@73 83 sleep 1
Chris@73 84 sv-command set pane Global-Zoom off
Chris@73 85 sv-command set pane Global-Scroll off
Chris@73 86 sv-command set pane Follow-Playback Scroll
Chris@73 87 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
Chris@73 88 sv-command zoom $zoom
Chris@73 89 sleep 0.1
Chris@73 90 done
Chris@73 91 }
Chris@73 92
Chris@73 93 play()
Chris@73 94 {
Chris@73 95 sv-command play "$@"
Chris@73 96 }
Chris@73 97
Chris@73 98 fade_in()
Chris@73 99 {
Chris@73 100 sv-command set gain 0
Chris@73 101 sleep 0.5
Chris@73 102 play "$@"
Chris@73 103 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
Chris@73 104 sv-command set gain $gain
Chris@73 105 sleep 0.1
Chris@73 106 done
Chris@73 107 }
Chris@73 108
Chris@73 109 fade_out()
Chris@73 110 {
Chris@73 111 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
Chris@73 112 sv-command set gain $gain
Chris@73 113 sleep 0.1
Chris@73 114 done
Chris@73 115 stop
Chris@73 116 sv-command set gain 1
Chris@73 117 }
Chris@73 118
Chris@73 119 slow()
Chris@73 120 {
Chris@73 121 for speed in -1 -10 -20 -30 -40 -50 -60 -70 -80 -100 -140 -200 -250 -300 -400 -500 -700 -800 -900 -1000; do
Chris@73 122 sv-command set speedup "$speed"
Chris@73 123 sleep 1
Chris@73 124 done
Chris@73 125 }
Chris@73 126
Chris@73 127 stop()
Chris@73 128 {
Chris@73 129 sv-command stop "$@"
Chris@73 130 sv-command set speedup 0
Chris@73 131 }
Chris@73 132
Chris@73 133 quit()
Chris@73 134 {
Chris@73 135 sv-command quit
Chris@73 136 }
Chris@73 137
Chris@73 138 add_melodic_range_spectrogram()
Chris@73 139 {
Chris@73 140 sv-command set propertyboxes 1
Chris@73 141 sv-command add spectrogram
Chris@73 142 sv-command set layer Window-Size 4096
Chris@73 143 # sv-command set layer Window-Overlap 4
Chris@73 144 sv-command set layer Window-Overlap 3
Chris@73 145 sv-command set layer Frequency-Scale Log
Chris@73 146 sv-command set layer Colour-Scale Meter
Chris@73 147 }
Chris@73 148
Chris@73 149 zoom_in_spectrogram()
Chris@73 150 {
Chris@73 151 sv-command zoomvertical 43 8000
Chris@73 152 for x in 1 2 3 4 5 6; do
Chris@73 153 max=$((8000 - 1000*$x))
Chris@73 154 sv-command zoomvertical 43 "$max"
Chris@73 155 sleep 0.1
Chris@73 156 done
Chris@73 157 for x in 1 2 3 4 5; do
Chris@73 158 max=$((2000 - 100 * $x))
Chris@73 159 sv-command zoomvertical 43 "$max"
Chris@73 160 sleep 0.1
Chris@73 161 done
Chris@73 162 }
Chris@73 163
Chris@73 164 zoom_in_spectrogram_further()
Chris@73 165 {
Chris@73 166 for x in 1 2 3 4 5; do
Chris@73 167 sv-command zoomvertical in
Chris@73 168 done
Chris@73 169 }
Chris@73 170
Chris@73 171 playback_bits()
Chris@73 172 {
Chris@73 173 sv-command set pane Follow-Playback Scroll
Chris@73 174 sv-command jump 10
Chris@73 175 sv-command setcurrent 1 2
Chris@73 176 sv-command set layer Colour Blue
Chris@73 177 sleep 5
Chris@73 178 hide_stuff
Chris@73 179 fade_in
Chris@73 180 sleep 10
Chris@73 181 scroll_and_zoom
Chris@73 182 sleep 10
Chris@73 183 slow
Chris@73 184 #sv-command set layer Normalize-Visible-Area on
Chris@73 185 for zoom in 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1; do
Chris@73 186 sv-command zoom $zoom
Chris@73 187 sleep 0.1
Chris@73 188 done
Chris@73 189 sleep 8
Chris@73 190 fade_out
Chris@73 191 done_playback_bits=1
Chris@73 192 }
Chris@73 193
Chris@73 194 spectrogram_bits()
Chris@73 195 {
Chris@73 196 add_melodic_range_spectrogram
Chris@73 197 sv-command zoom 256
Chris@73 198 sleep 10
Chris@73 199 zoom_in_spectrogram
Chris@73 200 sleep 20
Chris@73 201
Chris@73 202 if [ -n "$done_playback_bits" ]; then
Chris@73 203 sv-command setcurrent 1
Chris@73 204 sv-command zoom out
Chris@73 205 sv-command zoom out
Chris@73 206 sv-command zoom out
Chris@73 207 sv-command zoom out
Chris@73 208 sv-command zoom out
Chris@73 209 sv-command setcurrent 2
Chris@73 210 fi
Chris@73 211
Chris@73 212 hide_stuff
Chris@73 213 fade_in
Chris@73 214 sleep 10
Chris@73 215 sv-command set layer Bin-Display Frequencies
Chris@73 216 sv-command set layer Normalize-Columns on
Chris@73 217 sleep 20
Chris@73 218 sv-command set layer Bin-Display "All Bins"
Chris@73 219 sv-command set layer Colour "Red on Blue"
Chris@73 220 sleep 10
Chris@73 221 fade_out
Chris@73 222 sleep 1
Chris@73 223 done_spectrogram_bits=1
Chris@73 224
Chris@73 225 # zoom_in_spectrogram_further
Chris@73 226 }
Chris@73 227
Chris@73 228 onset_bits()
Chris@73 229 {
Chris@73 230 show_stuff
Chris@73 231 sv-command setcurrent 1
Chris@73 232 sv-command set pane Global-Zoom on
Chris@73 233 sv-command set pane Global-Scroll on
Chris@73 234 sleep 5
Chris@73 235 sv-command zoom default
Chris@73 236 sv-command zoom in
Chris@73 237 sv-command zoom in
Chris@73 238 sv-command zoom in
Chris@73 239 sv-command add timeruler
Chris@73 240 sv-command transform vamp:vamp-aubio:aubioonset:detectionfunction
Chris@73 241 sleep 5
Chris@73 242 sv-command set layer Plot-Type Curve
Chris@73 243 sleep 5
Chris@73 244 sv-command setcurrent 1
Chris@73 245 sv-command set pane Follow-Playback Page
Chris@73 246 sv-command transform vamp:vamp-aubio:aubioonset:detectionfunction
Chris@73 247 sv-command set layer Colour Red
Chris@73 248 sleep 5
Chris@73 249 sv-command set layer Plot-Type Segmentation
Chris@73 250 # sv-command set layer Vertical-Scale "Log Scale"
Chris@73 251 sv-command jump 30
Chris@73 252 sleep 5
Chris@73 253 # hide_stuff
Chris@73 254 if [ -n "$done_spectrogram_bits" ]; then
Chris@73 255 sv-command setcurrent 2
Chris@73 256 sv-command delete pane
Chris@73 257 fi
Chris@73 258 sleep 10
Chris@73 259 sv-command setcurrent 1 1
Chris@73 260 sv-command set layer Colour Black
Chris@73 261 sv-command setcurrent 1 2
Chris@73 262 fade_in
Chris@73 263 sleep 5
Chris@73 264 sv-command transform vamp:vamp-aubio:aubioonset:onsets
Chris@73 265 sv-command set layer Colour Black
Chris@73 266 sleep 20
Chris@73 267 sv-command setcurrent 2
Chris@73 268 # sv-command transform vamp:qm-vamp-plugins:qm-tempotracker:beats
Chris@73 269 sv-command transform vamp:vamp-aubio:aubiotempo:beats
Chris@73 270 sleep 10
Chris@73 271 fade_out
Chris@73 272 show_stuff
Chris@73 273 }
Chris@73 274
Chris@73 275 selection_bits()
Chris@73 276 {
Chris@73 277 # reset
Chris@73 278 sv-command set overlays 1
Chris@73 279 sv-command set zoomwheels 0
Chris@73 280 sv-command setcurrent 2
Chris@73 281 sv-command delete pane
Chris@73 282 if [ -n "$done_playback_bits" ]; then
Chris@73 283 sv-command setcurrent 1 2
Chris@73 284 else
Chris@73 285 sv-command setcurrent 1 3
Chris@73 286 fi
Chris@73 287 sv-command delete layer
Chris@73 288 if [ -n "$done_playback_bits" ]; then
Chris@73 289 sv-command setcurrent 1 2
Chris@73 290 else
Chris@73 291 sv-command setcurrent 1 3
Chris@73 292 fi
Chris@73 293 sv-command delete layer
Chris@73 294 # sv-command transform vamp:qm-vamp-plugins:qm-tempotracker:beats
Chris@73 295 sv-command transform vamp:vamp-aubio:aubiotempo:beats
Chris@73 296 sv-command setcurrent 1 2
Chris@73 297 sv-command set layer Colour Orange
Chris@73 298 sv-command setcurrent 1 3
Chris@73 299 sv-command resize 1024 500
Chris@73 300 sv-command zoom default
Chris@73 301 sleep 10
Chris@73 302 sv-command loop on
Chris@73 303 base=$((RANDOM % 100))
Chris@73 304 sv-command select $base $base.3
Chris@73 305 fade_in selection
Chris@73 306 sleep 12
Chris@73 307 base=$((base + 4))
Chris@73 308 sv-command addselect $base $base.1
Chris@73 309 sleep 12
Chris@73 310 base=$((base + 2))
Chris@73 311 sv-command addselect $base $base.1
Chris@73 312 sleep 6
Chris@73 313 base=$((base + 2))
Chris@73 314 sv-command addselect $base $base.3
Chris@73 315 sleep 6
Chris@73 316 base=$((base + 3))
Chris@73 317 sv-command addselect $base $base.3
Chris@73 318 sleep 6
Chris@73 319 base=$((base + 2))
Chris@73 320 sv-command addselect $base $base.3
Chris@73 321 sleep 12
Chris@73 322 sv-command set speedup -50
Chris@73 323 sleep 14
Chris@73 324 sv-command set speedup 50
Chris@73 325 sleep 8
Chris@73 326 sv-command set speedup 100
Chris@73 327 sleep 5
Chris@73 328 sv-command set speedup 200
Chris@73 329 fade_out
Chris@73 330 sleep 20
Chris@73 331 sv-command select none
Chris@73 332 sv-command setcurrent 1 3
Chris@73 333 sv-command delete layer
Chris@73 334 sv-command setcurrent 1 2
Chris@73 335 sv-command set layer Colour Black
Chris@73 336 }
Chris@73 337
Chris@73 338 chromagram_bits()
Chris@73 339 {
Chris@73 340 add_melodic_range_spectrogram
Chris@73 341 sv-command add timeruler
Chris@73 342 sv-command transform vamp:qm-vamp-plugins:qm-chromagram:chromagram
Chris@73 343 sleep 2
Chris@73 344 sv-command jump 20
Chris@73 345 sleep 10
Chris@73 346 sv-command zoom out
Chris@73 347 fade_in
Chris@73 348 sleep 10
Chris@73 349 fade_out
Chris@73 350 }
Chris@73 351
Chris@73 352 while /bin/true; do
Chris@73 353
Chris@73 354 sleep 2
Chris@73 355 load_a_file
Chris@73 356 sv-command loop on
Chris@73 357
Chris@73 358 sv-command resize 1024 500
Chris@73 359 show_stuff
Chris@73 360 sleep 10
Chris@73 361 playback_bits
Chris@73 362
Chris@73 363 sv-command resize 1024 700
Chris@73 364 show_stuff
Chris@73 365 #sleep 10
Chris@73 366 spectrogram_bits
Chris@73 367
Chris@73 368 sv-command jump 0
Chris@73 369 sv-command resize 1024 700
Chris@73 370 show_stuff
Chris@73 371 sleep 10
Chris@73 372 onset_bits
Chris@73 373
Chris@73 374 selection_bits
Chris@73 375
Chris@73 376 sv-command resize 1024 700
Chris@73 377
Chris@73 378 sv-command jump 0
Chris@73 379 chromagram_bits
Chris@73 380
Chris@73 381 sleep 20
Chris@73 382
Chris@73 383 pid="`pidof sonic-visualiser`"
Chris@73 384 if [ -n "$pid" ]; then
Chris@73 385 kill "$pid"
Chris@73 386 sleep 2
Chris@73 387 else
Chris@73 388 reset
Chris@73 389 fi
Chris@73 390
Chris@73 391 done