The Chuck Manual I  =>

The Chuck Manual I  =>

T h e C h u c K M a n u a l 1.3.x.x -> http://chuck.cs.princeton.edu/ j http://chuck.stanford.edu/ Copyright 2007 © Ge Wang and Perry Cook => Authors of ChucK Originated by: Ge Wang Perry R. Cook Chief Architect and Designer: Ge Wang Lead Developers: Ge Wang { [email protected] j [email protected] Perry R. Cook { [email protected] Spencer Salazar { [email protected] Rebecca Fiebrink { fi[email protected] Ananya Misra { [email protected] Philip Davidson { [email protected] Ari Lazier { [email protected] Documentation: Adam Tindale { [email protected] Ge Wang Rebecca Fiebrink Philip Davidson Ananya Misra Spencer Salazar Lead Testers: The ChucK Development/User Community { http://chuck.cs.princeton.edu/community/ Ge Wang Ajay Kapur { [email protected] Spencer Salazar Philip Davidson The ChucK Manual i => Thank You Many people have further contributed to ChucK by suggesting great new ideas and improvements, reporting problems, or submitting actual code. Here is a list of these people. Help us keep it complete and exempt of errors. • Andrew Appel • Brian Kernighan • Paul Lansky • Roger Dannenberg • Dan Trueman • Ken Steiglitz • Max Mathews • Chris Chafe • Szymon Rusinkiewicz • Graham Coleman • Scott Smallwood • Mark Daly • Kassen • Kijjaz • Gary Scavone • Brad Garton • Nick Collins • Tom Briggs • Paul Calamia • Mikael Johanssons • Magnus Danielson • Rasmus Kaj • Princeton Graphics Group • Princeton Laptop Orchestra • Stanford Laptop Orchestra • CCRMA community • Smule • ChucK users community!!! The ChucK Manual ii => ChucK Places ChucK home page (Princeton): http://chuck.cs.princeton.edu/ ChucK home page (Stanford): http://chuck.stanford.edu/ ChucK Documentation + Tutorials: http://chuck.cs.princeton.edu/doc/ For the most updated tutorial: http://chuck.cs.princeton.edu/doc/learn/ For the ideas and design behind ChucK, read the papers at: http://chuck.cs.princeton.edu/doc/publish/ ChucK PhD Thesis: http://www.cs.princeton.edu/∼gewang/thesis.html ChucK Community: http://chuck.cs.princeton.edu/community/ ChucK Wiki http://chuck.cs.princeton.edu/wiki miniAudicle: http://audicle.cs.princeton.edu/mini/ Audicle: http://audicle.cs.princeton.edu/ Princeton Sound Lab: http://soundlab.cs.princeton.edu/ Stanford University, CCRMA: http://ccrma.stanford.edu/ The ChucK Manual iii CONTENTS Authors of ChucK........................................i Thank You............................................ ii ChucK Places........................................... iii 1 Intro-ChucK-tion1 2 Installation 3 Binary Installation........................................3 Source Installation........................................6 3 ChucK Tutorials8 A Chuck Tutorial.........................................8 Conventions............................................ 13 On-the-fly-programming..................................... 14 Modifying Basic Patches..................................... 17 LFOs and Blackhole....................................... 19 Working with MIDI....................................... 21 Writing To Disk......................................... 24 Stereo............................................... 26 The ChucK Manual iv => CONTENTS Using OSC in ChucK...................................... 27 4 Overview 32 running ChucK.......................................... 32 comments............................................. 33 debug print............................................ 34 reserved words.......................................... 35 5 Types, Values, and Variables 38 primitive types.......................................... 38 values (literals).......................................... 39 variables.............................................. 39 reference types.......................................... 41 complex types........................................... 41 6 Arrays 43 declaration............................................ 43 multi-dimensional arrays..................................... 44 lookup............................................... 45 associative arrays......................................... 47 array assignment......................................... 48 7 Operators and Operations 51 cast................................................ 54 8 Control Structures 57 if / else.............................................. 57 while................................................ 58 until................................................ 58 for................................................. 59 The ChucK Manual v => CONTENTS break / continue......................................... 59 9 Functions 61 writing............................................... 61 calling............................................... 62 overloading............................................ 62 10 Concurrency and Shreds 64 sporking shreds (in code).................................... 65 the 'me' keyword......................................... 66 using Machine.add()....................................... 67 inter-shred communication.................................... 68 11 Time and Timing 69 time and duration........................................ 69 operations on time and duration (arithmetic)......................... 70 the keyword `now'........................................ 72 advancing time.......................................... 72 12 Events 75 what they are........................................... 75 use................................................. 76 MIDI events............................................ 77 OSC events............................................ 78 creating custom events...................................... 79 13 Objects 81 introduction............................................ 81 built-in classes.......................................... 82 working with objects....................................... 82 The ChucK Manual vi => CONTENTS writing a class.......................................... 83 members (instance data + functions).............................. 84 class constructors......................................... 86 static (data + functions)..................................... 86 inheritance............................................ 87 Overloading............................................ 90 14 The ChucK Compiler + Virtual Machine 91 15 Unit Analyzers 94 declaring............................................. 95 connecting............................................. 95 controlling (over time)...................................... 96 representing metadata: the UAnaBlob............................. 99 representing complex data: the complex and polar types................... 101 performing analysis in UAna networks............................. 101 using events............................................ 104 built{in unit analyzers...................................... 104 creating.............................................. 104 16 UAna objects 105 17 On-the-fly Programming Commands 117 18 Standard Libraries API 120 19 Unit Generators 127 The ChucK Manual vii Getting Started The ChucK Manual viii CHAPTER 1 Intro-ChucK-tion what is it: ChucK is a general-purpose programming language, intended for real-time audio syn- thesis and graphics/multimedia programming. It introduces a truly concurrent programming model that embeds timing directly in the program flow (we call this strongly-timed). Other potentially useful features include the ability to write/change programs on-the-fly. who it is for: audio/multimedia researchers, developers, composers, and performers supported platforms: • MacOS X (CoreAudio) • Linux (ALSA/OSS/Jack) • Windows/also Cygwin (DirectSound) Strongly-timed ChucK's programming model provides programmers direct, precise, and readable control over time, durations, rates, and just about anything else involving time. This makes ChucK a potentially fun and highly flexible tools for describing, designing, and implementing sound synthesis and music- making at both low and high levels. The ChucK Manual 1 => Intro-ChucK-tion On-the-fly Programming On-the-fly programming is a style of programming in which the programmer/performer/composer augments and modifies the program while it is running, without stopping or restarting, in order to assert expressive, programmable control for performance, composition, and experimentation at run-time. Because of the fundamental powers of programming languages, we believe the technical and aesthetic aspects of on-the-fly programming are worth exploring. The ChucK Manual 2 CHAPTER 2 Installation We tried to make ChucK as easy as possible to build (if desired), install, and re-use. All sources files - headers source for compiler, vm, and audio engine - are in the same directory. Platforms differences are abstracted to the lowest level (in part thanks to Gary Scavone). None of the compiler/vm has any OS-depedent code. There are also pre-compiled executables available for OS X and Windows. The classic 'chuck' runs as a command line program. There are GUI-based integrated development and performance environments as well that can be used as standalone chuck virtual machines, or in conjunction with the command version of 'chuck'. GUI-based environments include the miniAudicle (http://audicle.cs.princeton.edu/mini). This section deals mainly with the classic, command-line version of chuck. Binary Installation The binary distributions include a directory called bin/ that contains the precompiled binary of ChucK for your operating system. The binary distribution is a great way to dive into ChucK.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    195 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us