180 likes | 278 Views
Advanced Multimedia Development. MUMT 402 E-230 (UCL) Tuesday 4:35pm -7:25pm Ichiro Fujinaga Ich@music.mcgill.ca. Introduction. Overview of this class Review First object: bang. Overview of class.
E N D
Advanced Multimedia Development MUMT 402 E-230 (UCL) Tuesday 4:35pm -7:25pm Ichiro Fujinaga Ich@music.mcgill.ca
Introduction • Overview of this class • Review • First object: bang MUMT 402: Week 0
Overview of class • Design, programming, and deployment of music and audio in multimedia production. Topics include: complex MIDI programming, audio synthesis algorithms, interactive music. Most of programming will be performed within the context of Max/MSP environment by developing external objects. • Mark Distribution • 15% Mid-term exam • 25% Final exam • 10% Participation • 50% Assignments 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 MUMT 402: Week 0
Contact • Email: ich@music.mcgill.ca • Webpage: www.music.mcgill.ca/~ich • Phone: 398-4535x00944 • Office: E233 • Office hours: Fri. 3-5pm or by appointment MUMT 402: Week 0
Music Technology Computer Lab (E230) and linux accounts • Get MTCL account from Darryl Cameron (darryl@music.mcgill.ca) • Get linux (shell, sftp) account on music.mcgill.ca • Create your web home page (assignment #1) • Basic personal info • Links to your classes • Place to post your assignments MUMT 402: Week 0
Review I What is: • Max • MSP • OOP • Class • Objects • Messages • Encapsulation • Inheritance (not implemented in Max/MSP) MUMT 402: Week 0
Review II What is: • Compiler • Library • Linker • Shared library • DLL • Plugin • External objects 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 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 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 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 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 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) 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) 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 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() 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 MUMT 402: Week 0