advanced multimedia development
DESCRIPTION
Advanced Multimedia Development. MUMT 402 E-230 (UCL) Tuesday 4:35pm -7:25pm Ichiro Fujinaga [email protected]. Introduction. Overview of this class Review First object: bang. Overview of class. - PowerPoint PPT PresentationTRANSCRIPT
Advanced Multimedia Development
MUMT 402
E-230 (UCL)
Tuesday 4:35pm -7:25pm
Ichiro Fujinaga
Ichiro Fujinaga MUMT 402: Week 0
Introduction
Overview of this classReviewFirst 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
Mark distribution
15% Mid-term exam 25% Final exam 10% Participation 50% Assignments
Ichiro Fujinaga MUMT 402: Week 0
Assignments
Weekly assignmentsAssignment 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]: www.music.mcgill.ca/~ichPhone: 398-4535x00944Office: 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.caCreate 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:MaxMSPOOP
Class Objects Messages Encapsulation Inheritance (not implemented in Max/MSP)
Ichiro Fujinaga MUMT 402: Week 0
Review II
What is:CompilerLibraryLinkerShared library
DLL Plugin External objects
Ichiro Fujinaga MUMT 402: Week 0
Writing max External Objects
Initializationmain()Definition of methods to create new objectDefinition 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.3
Programming environment Xcode 2.1
Ichiro Fujinaga MUMT 402: Week 0
The bang object: Initialization
#include "ext.h” // Required for all Max external objectsvoid *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