Music 3SI: Introduction to Audio/Multimedia App. Programming Course Overview

Week #1 - 4/7/2006 CCRMA, Department of Music Stanford University

4/7/06, Music 3SI, CCRMA, Stanford 1 2

Music 3SI Staff

• Programming • Instructor: Woon Seung Yeo (officially: course leader) • Audio / multimedia ! [email protected] • Introductory course ! http://ccrma.stanford.edu/~woony • SI: Student-Initiated course • Office hours: TBD (or by appointment) ! P/NC only, 1 or 2 units • Faculty sponsor: Prof. Jonathan Berger

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 3 4

Why? CCRMA/Music Courses

• From my personal experience: • 220c ! not familiar with /C++ (I hate pointers!) • 120 / 250a: Pd extern, OSC ! want/need to develop my own audio app. ! don’t really know how/where to begin • 424: VST ! need some “jumpstart”! • 420: Stk • A “service” course for CCRMA • 220a / 320 / 421 / 422 ! homework / projects for many CCRMA courses

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 5 6 For Whom? Samples (1)

• Rated E for everyone (hopefully...) • Especially... ! “Hello World” C/C++ programmers #include ! musicians main() ! multimedia artists { ! printf("This is a C program\n"); ! CCRMA students } • Tutorials, demos, & templates ! width > depth

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 7 8

Samples (2) Samples (3)

#include using namespace std;

int main () #include { using namespace std; int a,b,c; int main () a=2; { b=7; ! cout << "Hello World!"; c = (a>b) ? a : b; ! return 0; } cout << c;

return 0; }

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 9 10

Samples (4) Samples (5)

#include #include "WaveLoop.h" using namespace std; #include "FileWvOut.h"

void increase (void* data, int size) int main() { { switch (size) // Set the global sample rate before creating class instances. { Stk::setSampleRate( 44100.0 ); case sizeof(char) : (*((char*)data))++; break; case sizeof(int) : (*((int*)data))++; break; WaveLoop input; } FileWvOut output; } input.openFile( "rawwaves/sinewave.raw", true ); int main () output.openFile( "hellosine.wav", 1, FileWrite::FILE_WAV, Stk::STK_SINT16 ); { char a = 'x'; input.setFrequency( 440.0 ); int b = 1602; increase (&a,sizeof(a)); for ( int i=0; i<40000; i++ ) increase (&b,sizeof(b)); output.tick( input.tick() ); cout << a << ", " << b << endl; return 0; return 0; } }

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 11 12 OS & Computer Topics

• Mac OS X / • C / C++ basics • CCRMA machines • Audio / sound ! Linux boxes • Audio plug-ins ! Mac minis ! obtain CCRMA account TODAY! • GUI programming • Your own computer • Visual / multimedia • No support for Windows • Network ! can be used, though...

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 13 14

Week 1: Introduction

• Today! • Course overview Schedule • Demos

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 15 16

Week 2: Audio Prog. (1) Week 3: Audio Prog. (2)

• C/C++ review • Stk instrument / effect classes • Overview of audio • Audio effect / DSP basics ! Stk (StkX) / RtAudio • Fast Fourier Transform ! PortAudio, ALSA, OpenAL, CoreAudio ! FFTW • Audio programming basics ! AltiVec • Assignment #1

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 17 18 Week 4: Plug-ins Week 5: GUI (1)

• Audio plug-in technologies • Guest lecturer from Apple ! VST • Cocoa API ! LADSPA, Audio Unit • GUI design: Interface Builder • VST SDK ! Stk and Cocoa • Pd (& Max/MSP) externals ! flext • Assignment #2

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 19 20

Week 6: GUI (2) Week 7: Visuals

• Cocoa review • GUI review ! Stk and Cocoa • Image processing basics • Qt API • Core Image (Core Graphics) • Qt Designer • OpenGL with Cocoa / Qt • The GIMP (and plug-ins) • Final project proposal

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 21 22

Week 8: Multimedia Week 9: Network & etc.

• Review of audio/visual programming • Audio streaming ! InetWvIn / InetWvOut classes (Stk) • Possible mappings ! sonification / visualization • Open Sound Control (OSC) • Examples • Project help session ! SonART ! R.S.V.P. ! iTunes plug-ins

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 23 24 Week 10: Presentation

• 6/9/2006 (tentative) Assignments, Project, & Grading

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 25 26

Assignments / Project Grading / Credit

• Assignment #1 • P/NC only ! command-line audio application ! no letter grade ! no incomplete • Assignment #2 ! GUI-based audio app., VST plug-in, or Pd extern • 1 or 2 units • F.P.: anything about audio/MM, including • Music grad students: BE CAREFUL! ! audio processing application / plug-in / extern • Auditors are always welcome! ! sonification / visualization program ! audio streaming / sound control over network

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 27 28

CCRMA/Music Courses

• 220c • 120 / 250a: Pd extern, OSC Related Courses • 424: VST • 420: Stk • 220a / 320 / 421 / 422

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 29 30 CS

• CS106b • CS107 • CS193e Course Website

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 31 32

Course Website

• http://ccrma.stanford.edu/courses/3SI/ • Stay tuned to announcements • Weekly schedule & readings Examples • Links: lots of interesting stuffs • Templates / examples

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 33 34

Examples Finally...

• Command-line audio applications • Survey • GUI-based audio applications • CCRMA account application form • VST plug-in (compressor) • Image / graphics applications • Sonification / visualization • Network (OSC)

4/7/06, Music 3SI, CCRMA, Stanford 4/7/06, Music 3SI, CCRMA, Stanford 35 36