1 The old computing is about what computers can do… the new computing is about what people can do. - Ben Shneiderman
1
The old computing is about what computers can do…
the new computing is about what people can do.
- Ben Shneiderman
2
The old computing is about what computers can do…
the new computing is about what people can do.
- Ben Shneiderman
3
Motivation
• programming the passage of time– specifying / controlling– reasoning about time in code– flexible granularity
• concurrency– parallel– easy to program– precise + granular
• gain insight about audio programs• make audio programming more accessible• further enable rapid experimentation
4
Code == Musical instrument
5
6
ChucK Facts
• text-based, general-purpose programming• tailored for real-time audio synthesis and
analysis• open-source, cross-platform• designed from the “ground-up”• high-level syntax, low-level control
7
Chistory-1
8
Chistory-2
9
Chistory-3
10
Flexibility, readability trumps performance
11
Core Language Features
12
=>
13
Controlling Time
// infinite time loop
while( true )
{
// set the next sample
1.0 => i.next;
// advance time
100::ms +=> now;
}
Impulse i => dac;
demo
14
Advancing Time
• time stands still until you “advance” it• two semantics for advancing time
– chuck to now1::second +=> now;
– wait on eventevent => now;
• you are responsible for keeping up with time• time == sound
15
Concurrency
• implemented using “shreds”– resemble non-preemptive threads
• automatically synchronized by time! • can work at low and high level
16
“Strongly-timed”
• what it means:– programs have precise control over their own timing– sample-synchronous control may be asserted at any time
for any unit generator• transfer primary control over time…
– from implicit scheduling to the language– program flow == time flow
• staying “in the language”– express more from within the language
• provide natural modularity for on-the-fly programs
17
ChucK Virtual Machine
18
ChucK Virtual Machine
Code (“foo.ck”)
On-the-fly compiler
Process
shred shred shred
Shreduler
ChucK Virtual Machine
Audio Engine
I/O Manager
Execution Unit
Code (“foo.ck”, “bar.ck”)
19
On-the-fly Programming(running with sonic scissors)
20
(n.) the act of modifying the logic and structure of a program during runtime, for the purpose of rapid experimentation, and exerting expressive control. (also live coding)
on-the-fly programming:
21The League of Automatic Composers (1974)
22
demo
23
The Audicle
24
Hmm-1Editor
Compiler
VM
Debugger
Run-time
Develop
25
Hmm-2Editor
Compiler
VM
DebuggerDevelop
Run-time
26
demo
27
Language Design Solutions
• make time itself computable– time and duration native types– allow a program to be “self-aware” in time– allow code to schedule itself
• synchronize concurrency by time or by events– automatically (by time)– manually (using events, also sample-synchronous)
• hide the mundane, expose true control.• do it on-the-fly!
28
http://chuck.cs.princeton.edu/
29
=^