introduction to computer music - cs.cmu.edumusic/icm/slides/01-intro.pdf21 copyright © 2002-2015 by...
TRANSCRIPT
1
Copyright © 2002-2015 by Roger B. Dannenberg
INTRODUCTION TO COMPUTER MUSIC Roger B. Dannenberg Professor of Computer Science Art, and Music
Copyright © 2002-2015 by Roger B. Dannenberg
INTRODUCTION
2 Introduction
2
Copyright © 2002-2015 by Roger B. Dannenberg
What’s In This Introduction? • Why Computer Music? • What is this course about?
• Computer Music Technology • Making Music With Computers
• How is the course taught?
3 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Why Computer Music? • No limits to the range of sounds you can explore. • Precision:
• Microscopic changes to sounds • Exactly reproducible, incremental changes
• Computation • Decisions can be embedded at any level • Detailed and complete performances can be
recomputed after high-level, abstract changes • Blurring the lines between composer, performer, and even the audience
Introduction 4
3
Copyright © 2002-2015 by Roger B. Dannenberg
What Is This Course About? • Computer Music Technology
• Theory • Digital audio, Digital signal processing • Software design, languages • Data structures and Representation
• Practice • Nyquist: a composition and sound synthesis language • Audacity: a digital audio editor
5 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
What Is This Course About? (2) • Making Music With Computers
• Theory: listening and discussion • Practice: composition assignments
6 Introduction
4
Copyright © 2002-2015 by Roger B. Dannenberg
Projects • Schedule is on the web • All projects are due 11:59pm on the shown due date
• You have 3 grace days for the entire semester (P1 through P6 only) - use them wisely.
• You can use at most 1 grace day for any one assignment
• Many additional problems to be worked out as you go through the on-line lectures.
7 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Communication • Web Site – www.music.cs.cmu.edu/icm • Online Instruction – www.music.cs.cmu.edu/atutor • Syllabus is on Web Site • Project info too • Come to class (!) • Discussion/Newsgroup/Bboard for class:
• https://piazza.com/class/i4mwwndya5f6qj • Projects handed in to Autolab (See instructions in syllabus.)
8 Introduction
5
Copyright © 2002-2015 by Roger B. Dannenberg
Computing Hardware • You must have access to a machine for homework and projects (there is no class studio, lab, or cluster): • Mac, Windows, or Linux is OK • No machine is too slow • 5MB/minute/channel of audio • Projects will be submitted via network to Autolab (if you have network problems, you can bring a CD-R or flash drive to campus and upload to Autolab)
9 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Software • Nyquist is a self-contained language for sound synthesis and composition.
• Audacity is an audio editor. • Both are open source and free. • You may use other languages, editors, and tools
• … in addition to but not usually instead of Nyquist, • Project descriptions will generally ask for certain things
to be done in Nyquist
10 Introduction
6
Copyright © 2002-2015 by Roger B. Dannenberg
Welcome to the Course • Now is a good time to download Nyquist
• http://www.cs.cmu.edu/~music/nyquist/
• and Audacity • http://audacity.sourceforge.net/download/
• Install them and get ready to make some music!
Introduction 11
Copyright © 2002-2015 by Roger B. Dannenberg
HOW DO COMPUTERS MAKE SOUND? Some fundamentals
Introduction 12
7
Copyright © 2002-2015 by Roger B. Dannenberg
How Do Computers Make Sound? • What is sound? • What does analog mean? • Digital audio representation • Analog-to-Digital conversion • Digital-to-Analog conversion • Synthesis example
13 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
What Is Sound? • Sound is a variation in pressure • Pressure variations travel through air as waves
• Sound travels about 1000 feet/second • Hz = Hertz = (cycles) per second • We hear variations from about 20Hz to 20000Hz • We hear amplitude variations over about 5 orders of magnitude from threshold to pain
14 Introduction
8
Copyright © 2002-2015 by Roger B. Dannenberg
What does analog mean?
• Pressure variations (sound) can be expressed as: • Mechanical displacement (microphone, speaker) • Voltage variations • Wiggles in vinyl record grooves • Degree of magnetization on tape • Optical density in film
• These representations are called analog 15 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Digital Audio Representation • Measure an analog signal periodically:
16
Time
Introduction
9
Copyright © 2002-2015 by Roger B. Dannenberg
Digital Audio Representation • Measure an analog signal periodically:
• Store the measurements as a sequence of numbers
17 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Digital to Analog Conversion • Use the sequence of numbers to control voltage • Filter the voltage to produce a smooth signal
18 Introduction
10
Copyright © 2002-2015 by Roger B. Dannenberg
Synthesis Example
19
Phase
+
Frequency
Amplitude
x
To compute each sample:
tlen = 1024 // table length sr = 44100.0 // sample rate phase += freq * tlen / sr // phase wraps around table: phase = fmod(phase, tlen) samp = table[floor(phase)] output = samp * ampl
Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
NYQUIST, SAL, LISP Getting started with Nyquist
11
Copyright © 2002-2015 by Roger B. Dannenberg
Nyquist, SAL, Lisp
21
From C
ytosue’s photostream, Flickr.com
, Feb 24, 2007
graphical front end
command-line Lisp interpreter
SAL, an imperative language
Linux, Mac OS X, or Win32
Copyright © 2002-2015 by Roger B. Dannenberg
Nyquist: Top-Down • NyquistIDE written in Java (requires Java runtime) • interacts through sockets with SAL, written in XLISP • XLISP is interpreted, written in C • C is of course compiled to your native instruction set • But there’s more:
• XLISP is extended with signal processing primitives
• Written as high-level specifications (see Nyquist Ref. Manual) • Translated by XLISP program (tran.lsp) into C
• And more .. • score data structures are interpreted by a built-in function
(timed-seq) that calls on the XLISP eval function.
22
From
pev
z.or
g/pa
ncak
es-u
sa/,
6 Ja
n 20
08
Introduction
12
Copyright © 2002-2015 by Roger B. Dannenberg
Read-Eval-(Print) Loop • You enter commands into SAL • SAL reads the command and compiles it to XLISP
• XLISP evaluates the compiled command • This may or may not generate output
23 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Some Examples • play pluck(c4)!
• play pluck(c4) ~ 3!
• load “pianosyn”!
• play piano-note(5, fs1, 100)!
• play osc(c4)!
• play osc(c4) * osc(d4)!
• play noise() * env(0.05, 0.1, 0.5, 1, 0.5, 0.4)!
Introduction 24
13
Copyright © 2002-2015 by Roger B. Dannenberg
Some SAL Commands • print expression - evaluate and expression and print the result
• exec expression - evaluate expression but do not print the result
• play expression - evaluate and expression and play the result, which must be a SOUND
• set var = expression - set a variable
25 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
CONSTANTS, VARIABLES, FUNCTIONS More of the Nyquist (SAL) language
Introduction 26
14
Copyright © 2002-2015 by Roger B. Dannenberg
Constant and Variable Expressions • Constants evaluate to themselves, e.g. 12 or "string" • Symbols denote variables and evaluate to the variable’s
value (static scoping), e.g. x or volume or g4 or tempo
• Symbols can contain *, -, +, and many other characters you might not expect. Lisp conventions: • *global-variable*
• local-variable
• Not case sensitive!
27 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Applying Functions • Don't forget to use set, exec, print, etc... • Infix operators mostly as you would expect
• a + b
• 10 * (y + 3.14159)
• Built-in and user-defined functions • autonorm-off()
• lfo(5.9)
• string-left-trim(input, " ")
• s-read("vn.wav", time-offset: 1.5, dur: 0.6)
28 Introduction
15
Copyright © 2002-2015 by Roger B. Dannenberg
USING SAL, DEFINING FUNCTIONS More on Nyquist and SAL
Introduction 29
Copyright © 2002-2015 by Roger B. Dannenberg
Using the SAL Interpreter • We’ll do a lot of work on-line, but you need learn how to use Nyquist and SAL on your local machine.
• Nyquist installation and startup: http://www.cs.cmu.edu/~music/nyquist/
• Now, we’ll cover: • Evaluating a SAL command • Finding the result of a SAL command evaluation • Creating a SAL program file • Loading (executing) the SAL program file • Saving your work
30 Introduction
16
Copyright © 2002-2015 by Roger B. Dannenberg
Evaluating a SAL Command
Introduction 31
Nyquist window
Type the SAL command here and type the return key
Copyright © 2002-2015 by Roger B. Dannenberg
Finding the Result of a SAL Command
Introduction 32
Nyquist window
Command and result appear here.
input window
output window
17
Copyright © 2002-2015 by Roger B. Dannenberg
Creating a SAL Program File
Introduction 33
Click on New File button...
… to create SAL Program File window
Copyright © 2002-2015 by Roger B. Dannenberg
Creating a SAL Program File (2)
Introduction 34
Click on Save File button...
… enter name with .sal extension …
… and click Save button.
18
Copyright © 2002-2015 by Roger B. Dannenberg
Loading (Executing) the SAL File
Introduction 35
Edit the file...
… select File …
… select Load…
… results appear in Output Window
Copyright © 2002-2015 by Roger B. Dannenberg
Saving Your Work • The Load menu item
• Saves your file • Instructs Nyquist to load your file • Nyquist then evaluates each command in the file
• thus, file saving is automatic! • There is also a File:Save menu item • … and a File:Save As… menu item
Introduction 36
19
Copyright © 2002-2015 by Roger B. Dannenberg
Defining Functions in SAL
define function my-function(p, q) begin print "the value of p is", p display "furthermore", q return p + 12 end Call it: SAL> print my-function(c4, "middle-C") the value of p is 60 furthermore : Q = middle-C 72
37
Concept checklist: • define function • What does begin-end do? • What does print do? • What does display do? • Why is 72 printed?
Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Keyword Parameters • Keyword parameters are optional parameters that are
matched by keyword rather than by position define function kwdemo(p, scale: 1, vibrato: nil) begin with s = pluck(p) * scale if vibrato then set s = s * (1 + lfo(6) * 0.1) return s end play kwdemo(c4) ; uses default keyword parameter ; values
play kwdemo(ef4, vibrato: #t) ; turn on vibrato play kwdemo(fs5, vibrato: #t, scale: 0.4) ; order ; doesn’t matter
38 Introduction
20
Copyright © 2002-2015 by Roger B. Dannenberg
Begin and With begin with local-variable = 4, another-local ; default init to nil command1 command2 ; any number of commands here end
• Use begin-end any place you can use a statement • function body • multiple actions after then
• with introduces local variables • Initialization is optional • Default initial value is nil (means both “false” and “empty list”)
39 Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
CONTROL CONSTRUCTS Conditionals, Loops, and More Fun With Nyquist
Introduction 40
21
Copyright © 2002-2015 by Roger B. Dannenberg
If-Then-Else if pitch > C4 then return flute(pitch) else return tuba(pitch)
• then and else are followed by single command • Use begin-end to contain multiple commands • Avoid if c1 then if c2 then s1 else s2
• Which if does the else belong to? • Use begin-end to disambiguate
41
if velocity > 127 then set velocity = 127
Introduction
Copyright © 2002-2015 by Roger B. Dannenberg
Loop Command • Basic syntax is just loop commands end • Use with to declare local variables • for i from 0 below 10 - i = 0, 1, … 9 • for elem in my-list - iterate over list elements • for v = init then update - flexible update • while expression - arbitrary stop condition • until expression - arbitrary stop condition • repeat n - iterate n times • finally return local-variable - executed once at end
• Many options! See Ref. Manual. Next up: SAL examples…
42 Introduction
22
Copyright © 2002-2015 by Roger B. Dannenberg
Example function pluck-chord(pitch, interval, n) begin with s = pluck(pitch) loop for i from 1 below n set s += pluck(pitch + interval * i) end return s end play pluck-chord(c3, 5, 2) play pluck-chord(d3, 7, 4) ~ 3 play pluck-chord(c2, 10, 7) ~ 8
43 Introduction