410 likes | 419 Views
Sonification is the process of converting data into sound, allowing for new ways of perceiving patterns and finding insights. Explore the concept, implementation, and applications of sonification.
E N D
From (0 60 1000 1 64) get: • 1) 0 • 2) 64 • 3) 1000 • 4) (1000 1 64) • 5) (60 1000) • 6) (0 60 1000) • 7) (0 1) • 8) ((0)) • 9) (60 1000 64) • 10) (60 0)
From (((a) b) c) get: • 1) a • 2) c • 3) b • 4) (a b) • 5) (a (b c)))
From (a b c d e) get: • 1) (d e) • 2) 5 • 3) (a (b (c (d (e))))) • 4) (e d c b a) • 5) (a b c d)
From a get: • 1) (a) • 2) (a . a) • 3) (a (a)) • 4) ((a) a) • 5) (a ())
From a and (b c) get: • 1) (a b c) • 2) ((a) b c) • 3) (a (b c)) • 4) (a c) • 5) (c b a)
From (a b) and (c d) get: • 1) (a b c d) • 2) ((a b) c d) • 3) ((a b)(c d)) • 4) (b a d c) • 5) (a (b c) d)
Define a function AVERAGE that returns the average of 5 numbers: • (average 1 2 3 4 5) returns 3.
(defun average (n1 n2 n3 n4 n5) (coerce (/ (+ n1 n2 n3 n4 n5) 5) 'float)) ; ? (average 1 2 3 4 5) ; 3.0 ; ? (average 1 2 3 4 6) ; 3.2
Sonification • Sound from data not intended to create sound. • Both scientific and artistic value.
Pleiades • Large scale radio telescope • Ability to view data in standard ways • Ability to usefully hear data in order to find patterns otherwise not perceivable • Musically interesting sonifications • SETI (Search for Extraterrestrial Life)
Pleiades • Data from the planet Jupiter • Data selected by Cope • Data sonified by Peter Elsea (mid-80s) • Saturday night Pleiades by Cope • Sonification of planet Mars (2002 or so)
Sonification • Where do you begin? • Where do you go from there? • What do you want to have as output?
Divide and Conquer • Find interesting data • Ensure it’s diverse enough • Lispify it (listify) • Normalize the data to MIDI range • Produce cope-events. • Save as MIDI file and play.
Sonification • What criteria to use in finding data?
Data • Astronomical • Stocks • Temperatures • Seismological • Measurements • Bit maps
DATA • How do you get the data into musical shape? • The process is known as normalization • How do you achieve normalization?
Normalization • Compare range of one list to another (/) • Multiply by known element of first list (minus it’s lowest range level) • Add in lower MIDI range • Round it to avoid floats • New MIDI note
Recursion • The ability of a function to do the same thing to an arbitrary length list of data • The ability of a function to call itself • The ability of a function to automatically stop at the end of its argument • The ability of a function to return the changed data in appropriate order
Add-One • Data: ‘(1 2 3 4 5 6 7) • Process: add one to each number • (cons (+ 1 7) ()) • (cons (+ 1 6) (cons (+ 1 7) ()) • (cons (+ 1 5) (cons (+ 1 6) (cons (+ 1 7) ()) • And so on?
In other words • (cons n3 (cons n2 (cons n1 (cons n0 ())))
Recursion • (defun add-one (list-of-numbers)
Ending • You must have code to end the function first in order to make sure the function ends with an empty list as second argument to the final call to cons.
Continuation (defun add-one (list-of-numbers) • (if (null list-of-numbers) ()
Continuation (defun add-one (list-of-numbers) (if (null list-of-numbers) () (cons (+ 1 (first list-of-numbers))
Continuation (defun add-one (list-of-numbers) (if (null list-of-numbers) () (cons (+ 1 (first list-of-numbers)) (add-one (rest list-of-numbers))))
It works ? (add-one ‘(1 2 3 4 5 6 7)) (2 3 4 5 6 7 8)