PowerPoint Presentation - Advanced multimedia Development

Download Report

Transcript PowerPoint Presentation - Advanced multimedia Development

Advanced Multimedia
Development
MUMT 402
E-230 (MTCL)
Tuesday 4:35pm–7:25pm
Ichiro Fujinaga
[email protected]
Introduction
Overview of this class
Review
First object: bang
Ichiro Fujinaga
MUMT 402: Week 0
Overview of class
Design, programming, and deployment of music
and audio in multimedia production. Topics
include:
complex MIDI programming
Low-level audio synthesis algorithms
interactive music
timing and scheduling
Most of programming will be performed within
the context of Max/MSP environment by
developing external objects in C.
Ichiro Fujinaga
MUMT 402: Week 0
Objectives
Learn low-level MIDI/audio manipulation
concepts
Learn how to debug
Learn how to progressively write code
Learn how to meet deadlines
Learn how to reverse engineer
Learn how to read manuals
Learn how to think
Ichiro Fujinaga
MUMT 402: Week 0
Mark distribution
15% Mid-term exam
25% Final exam
10% Participation
50% Assignments
Ichiro Fujinaga
MUMT 402: Week 0
Assignments
Weekly assignments
Assignment policy
All assignments are due at midnight of the due date.
Late assignments within 48 hours past the deadline
will be given either D or F.
Assignments submitted after 48 hours past the
deadline will be given F.
Collaboration (www.mcgill.ca/integrity)
Neatness, elegance, documentation
Ichiro Fujinaga
MUMT 402: Week 0
Contact
Email: [email protected]
Webpage: www.music.mcgill.ca/~ich
Phone: 398-4535x00944
Office: 550 Sherbrooke W.
Office hours: Any time via email or by
appointment
Ichiro Fujinaga
MUMT 402: Week 0
Music Technology Computer Lab
(E230) and linux accounts
Get MTCL account from Darryl Cameron
([email protected])
Get linux (shell, sftp) account on
music.mcgill.ca, if you don’t have one yet. I’ll
contact Alain Terriault ([email protected])
(with your preferred login name).
Create your web home page (assignment #1)
Basic personal info
Links to your classes
Place to post your assignments
Ichiro Fujinaga
MUMT 402: Week 0
Review I
What is:
Max
MSP
OOP
Class
Objects
Messages
Encapsulation
Inheritance (not implemented in Max/MSP)
Ichiro Fujinaga
MUMT 402: Week 0
Review II
What is a:
Compiler
Library
Linker
Shared library
DLL
Plugin
External objects
Ichiro Fujinaga
MUMT 402: Week 0
Writing Max External
Objects
Initialization
main()
Definition of methods to create new object
Definition of methods to bind to other
messages
Ichiro Fujinaga
MUMT 402: Week 0
Preparation
Documentation
Max/MSP Externals Tutorial v3.2
External Objects for Max and MSP 4.5
Programming environment
Xcode 2.3
Ichiro Fujinaga
MUMT 402: Week 0
The bang object:
Initialization
#include "ext.h” // Required for all Max external objects
void *this_class; // Required. Global pointing to this class
Required for all objects
ext.h in Max/MSP SDK
contains other header files
prototypes
 this_class is used as a pointer to this class
Ichiro Fujinaga
MUMT 402: Week 0
The bang object:
Initialization (data)
typedef struct _bang // Data structure for this object
{
t_object b_ob; // Must always be the first field;
// used by Max
void *b_out;
// Pointer to an outlet
} t_bang;
Must start with t_object (see ext_mess.h)
Max convention: first letter followed by underscore
 Every object has an inlet
 b_out is a pointer to an outlet
Ichiro Fujinaga
MUMT 402: Week 0
The bang object:
Initialization (methods)
// Prototypes for methods:
// need a method for each incoming message
void *bang_new(void);
// object creation method
void bang_bang(t_bang *bang); // method for bang message
 Declaration of class methods that will respond to Max messages
 Objects respond to messages from the Max environment
 Objects receive messages (integer, float, symbol) in their inlets
 Object’s methods will process these messages in some way and
then
send out messages using the object’s outlets
 This bang object responds to: “new” and “bang” messages
Ichiro Fujinaga
MUMT 402: Week 0
The bang object: main()

When an object is created for the first time:
External object is loaded into memory
main() is executed once and only once
 main()
specifies how the object should be initialized:
Setup the class:
Allocate memory for the object
Specify method for the creation of instances of the object
Define messages that the object can respond to and
bind each message to a method
Ichiro Fujinaga
MUMT 402: Week 0
The bang object: main() cont.
void main(void) {
// set up our class: create a class definition
setup(&this_class, (method)bang_new, 0L,
(short)sizeof(t_bang), 0L, 0);
// bind method "bang_bang” to the "bang" message
addbang((method)bang_bang);}
}
 Setup creates the class
 Get pointer to the class, specify instance creation method, instance free method,
size of each instance, GUI object.
 addbang binds the method to “bang” message coming into the left inlet
(addint, addinx, addmess, addft, and addftx)
Ichiro Fujinaga
MUMT 402: Week 0
The bang object: main() cont.
int main(void) {
// set up our class: create a class definition
setup(&this_class, (method)bang_new, 0L,
(short)sizeof(t_bang), 0L, 0);
// bind method "bang_bang” to the "bang" message
addbang((method)bang_bang);
return (0);
}
 Setup creates the class
 Get pointer to the class, specify instance creation method, instance free method,
size of each instance, GUI object.
 addbang binds the method to “bang” message coming into the left inlet
(addint, addinx, addmess, addft, and addftx)
Ichiro Fujinaga
MUMT 402: Week 0
The bang object: The object
creation function
void *bang_new(void) {
t_bang *bang;
// create the new instance and return a pointer to it
bang = (t_bang *)newobject(this_class);
bang->b_out = bangout(bang); // create a bang outlet
return(bang);// must return a pointer to the new instance
}
 Creates an instance of the class by newobject()
 Outlet is created by bangout() and assigned in the object’ s struct
Ichiro Fujinaga
MUMT 402: Week 0
The bang object: Handling
the “bang” message
void bang_bang(t_bang *bang)
{
// send a bang to the outlet bang->b_out
outlet_bang(bang->b_out);
}
 This method is called when “bang” message is received at the left
inlet, because of addbang()
 The bang_bang method simply sends a “bang” messages via the
outlet via a max method, outlet_bang()
 The outlet, bang->b_out was created by bangout()
Ichiro Fujinaga
MUMT 402: Week 0
Ich’s C style
no space before commas and semicolons
no space after function names
space after commas and semicolons
space before and after an operator
space after keywords
vertically align matching braces (optional)
no magic numbers
Ichiro Fujinaga
MUMT 402: Week 0