advanced multimedia development n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Advanced Multimedia Development PowerPoint Presentation
Download Presentation
Advanced Multimedia Development

Loading in 2 Seconds...

play fullscreen
1 / 21
rey

Advanced Multimedia Development - PowerPoint PPT Presentation

92 Views
Download Presentation
Advanced Multimedia Development
An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Advanced Multimedia Development MUMT 402 E-230 (MTCL) Tuesday 4:35pm–7:25pm Ichiro Fujinaga Ich@music.mcgill.ca

  2. Introduction • Overview of this class • Review • First object: bang MUMT 402: Week 0

  3. 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. MUMT 402: Week 0

  4. 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 MUMT 402: Week 0

  5. Mark distribution • 15% Mid-term exam  • 25% Final exam  • 10% Participation   • 50% Assignments MUMT 402: Week 0

  6. 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 MUMT 402: Week 0

  7. Contact • Email: ich@music.mcgill.ca • Webpage: www.music.mcgill.ca/~ich • Phone: 398-4535x00944 • Office: 550 Sherbrooke W. • Office hours: Any time via email or by appointment MUMT 402: Week 0

  8. 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, if you don’t have one yet. I’ll contact Alain Terriault (alaint@music.mcgill.ca) (with your preferred login name). • Create your web home page (assignment #1) • Basic personal info • Links to your classes • Place to post your assignments MUMT 402: Week 0

  9. Review I What is: • Max • MSP • OOP • Class • Objects • Messages • Encapsulation • Inheritance (not implemented in Max/MSP) MUMT 402: Week 0

  10. Review II What is a: • Compiler • Library • Linker • Shared library • DLL • Plugin • External objects MUMT 402: Week 0

  11. 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

  12. Preparation • Documentation • Max/MSP Externals Tutorial v3.2 • External Objects for Max and MSP 4.5 • Programming environment • Xcode 2.3 MUMT 402: Week 0

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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