CSC 480 - Special Topics in Multimedia Programming, Fall 2021, TuTh 4:30-5:50 PM, Old Main 158.

Dr. Dale E. Parson


Tuesday December 7 we will not have our regular class time.
Instead I am requesting attendance at the CSC355 Software Engineering II presentations in MSU (SUB) 218:
Faculty and students are cordially invited to attend Demo Day F21.
It will be in person this year, with social distancing.
8:30AM - 12:30PM - student presentations
1:30PM - 3:30PM - poster session
Zoom will be available for the student presentations
Professor Donna DeMarco

Fall 2021 Office Hours: Monday 2-4, Wednesday 4-6 (Zoom only), Thursday 10-11 or by appt.
We will distance 6 feet in my office, so plan to attend office hours online.
Office hours Zoom: https://kutztown.zoom.us/j/94322223872
Links for CSC480 Zoom room (also in our D2L page's Content tab) and student instructions for using Zoom.
PLEASE FILL OUT & EMAIL ME THIS FORM THE FIRST WEEK OF CLASS.
First day handout (syllabus that is specific to this semester).

Our final exam time is Thursday December 16, 2-4 PM.
     There is no final exam and assignments are due December 11.

      I will be in the room & on course Zoom session at the start of that exam time, attendance optional.
 
Open Broadcaster Software
    OBS, Free and open source software for video recording and live streaming.

The Book of Shaders for intro to GLSL shaders running on the GPU.

This course increases breadth and depth of knowledge for students with experience in object- oriented programming for multimedia systems. Advanced topics include working with camera point-of-view and lighting sources for 3D graphics, recursive shapes and fractals, pixel-level image processing, and animated video composition. Students will program graphical images, video streams, audio signals, physical devices containing electronic sensors and effectors, and combinations of these media. There will be solo and team programming projects.
Prerequisites: CSC220 with a grade of C or better.

RESOURCES & HANDOUTS


CSC220 page from Fall 2020. CSC480 page from Spring 2020.
CSC120 Recap Demos for month 1 of CSC220, Fall 2019

Why Love Generative Art? is extremely well written, comprehensive, and worth reading.


Shiffman's textbook's website including Examples and Exercises that will familiarize you with Processing.
Textbook is optional, there is 1 copy on one-day reserve in Rohrbach Library. Buying it is cheap.


Software setup instructions:
    1. On your Windows U:\ drive, create a new folder called Processing.
        U:\ is available anywhere on campus and does not auto-delete files.
        Do not store files on your PC desktop. They will be gone after you log out.
    2. Use the Windows Explorer to create folder U:\Processing.
    3. Every time you start Processing, go to Preferences and change the Sketchbook location to U:\Processing.
        You must create folder U:\Processing the first time you want to use it.
        To run Processing, find Processing under S:\ComputerScience on your PC.
    5. All of your practice and assignment sketches must reside under U:\Processing.
    6. If you Download & Install Processing on your home machine, use the latest version Processing 3.x, currently 3.5.4.
        I don't usually upgrade the version mid-semester, in the interest of stability, unless I need a specific bug fix.

The official Processing website has many examples and library documentation.
Here is the Library Reference. Keep this handy at all times!
The Reas & Fry book, Second Edition. (On overnight reserve in Rohrbach Library.)
We will occasionally import classes from the Java class library, which comes with all standard Java installations.



Java class library https://docs.oracle.com/javase/8/docs/api/index.html
MIDI Fanatic's Technical Brainwashing Center is the best site for MIDI specifications.
        Follow Technical Docs and Programming -> The MIDI Specification from that page.
My slides on MIDI and PCM (Pulse Code Modulation) Digital Audio.

MY HANDOUTS

We'll use my solution to spring 2018 csc120cpvl assignment 3 as an intro to interfaces & classes.
Review of interface inheritance and implementation inheritance.
Spring 2014 Java slides on exceptions
Spring 2014 Java slides on generics
   
Sketches that illustrate java.util containers:
        ShapePaintEcho2021SentientAV.f21.zip and PaintDomeServer2018B_010.f21.zip

MATERIALS FOR LATE NOVEMBER CLIENT-SERVER, MODEL-VIEW-CONTROLLER CLASSES
Slides on Distributed MVC
CSC220F19MIDIassn3parson.zip
CSC220F19MIDIassn4ServerParson.zip
CSC220F19Androidassn4ClientParson.zip
CSC480S20MIDIassn1ServerParson.zip
CSC480S20Androidassn1bClientParson.zip
 

ASSIGNMENTS


ASSIGNMENT 0: Stay Safe & Protect Your Neighbors in Fall 2021
    "Simulated Contact Tracing of COVID-19 Propagation at Kutztown University for Fall 2020" best PACISE 2021 faculty paper
        Slides for the updated talk. Fall 2021 update. Python R0 calculator.
            Simulation code at S:\ComputerScience\Parson\Processing3\CovidUFall2021V1MIDI

KU Mask Adherence Process

ASSIGNMENT 1 is due Thursday September 23 via D2L Assignment dropbox.

ASSIGNMENT 2 is due Sunday October 10
via D2L Assignment dropbox.
      Here is the starting code for Assignment 2.
      CSC480DemoScreenshot1FA2021is a prior demo using a recursive snapshot of the display as a paintbrush.

ASSIGNMENT 3 MIDI enhancements for a 3D sketch of a graph, due November 4 via D2L.
    October 11 video session for 10/14 class going over assn3. October 19 will be a class work session.

    Assignment 3 background:
        My slides on MIDI and PCM (Pulse Code Modulation) Digital Audio.
        Java class library https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/package-summary.html
            and https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/ShortMessage.html
        MIDI Fanatic's Technical Brainwashing Center is the best site for MIDI specifications.
            Follow Technical Docs and Programming -> The MIDI Specification from that page.
        ConcentricCircles is a sketch that runs slowly due to plotting many nested circles per draw().
        ConcentricCirclesIntervals speeded that up by creating nested circles in a GROUP PShape.
            MIDI tab for ConcentricCirclesIntervals; this is a Processing TAB.
            Use ConcentricCirclesIntervals to figure out your PATCHES and CONTROLLER effects.
            http://midi.teragonaudio.com/tech/midispec.htm documents the controller effects.

/* CSC220 & CSC480 students fall 2021
   IF YOU HAVE BEEN HAVING PROBLEMS WITH THE CALL TO initMIDI()
   TIMING OUT AND BLOWING UP PROCESSING WITH THIS ERROR:
    RuntimeException: Waited 5000ms for: <a750231, 4b2fd0f>[count 2, qsz 0, owner
   THEN GO INTO THE MIDI TAB AND REPLACE THE CODE THAT STARTS LIKE THIS:

// MIDI VARIABLES, see http://faculty.kutztown.edu/parson/spring2017/MidiKBSpring2016Parson.txt
final int midiDeviceIndex = 0 ;  // setup() checks for number of devices. Use one for output.

   DOWN THROUGH THE BOTTOM OF THE MIDI TAB INCLUDING THE sendMIDI() FUNCTION WITH THE
   CODE IN THIS FILE. IF IT HAS BEEN WORKING FOR YOU, DON'T CHANGE THIS MIDI TAB CODE.
*/

 INDIVIDUAL ASSIGNMENTS 4 & 5 use the same specifications and ideas as in spring 2020.
        I will demo some additional ideas in the early November classes.
        All proposed projects must be approved by Dr. Parson before commencing.
        ASSIGNMENT 4 is due via D2L on November 23.
        ASSIGNMENT 5 is due via D2L on December 11, the Saturday before final exams.
 You can use ideas from HERE. If you download code you need to get my approval for major extensions.
  Added 11/9/2021:
    I. Solve CSC220 Assn4 and save and turn in as CSC480F21Assn4_Recursion AND
        I.a Add continuous time-based morphing of drawShape() as specified in your Assignment 4 personal spec, OR
        I.b Rewrite drawShape() to plot an identical graphic built entirely as a PShape in a helper function called in setup(),
            measure improvements if any (in frameRate) by doing this as a single PShape.
        Either option I.a or I.b must be approved by Parson. Turn in this additional sketch as CSC480F21Assn4_RecursionPlus.
        Here is the CSC220 starting code.
        Current CSC220 students would have to do both I.a and I.b.
        Here is the November 9 CSC220 video on their Assignment 4.
    II. Add Processing filtering, blending, and other effects to the incremental fade-out-in of CSC480_noThingIV_Nov2021.
    III. Improve user interaction and add features to CSC480_PImageSelf_Nov2021.

ZOOM VIDEO RECORDINGS

August 31 Go over first day handout, examples of graphical works, COVID@KU simulation.
September 2 Started going over this demo sketch from spring 2020.
       Here is a 3D demo sketch focusing on box(), sphere(), and PShape.
       PShapeRecursive3D is an updated to a previous CSC220 3D Avatar-in-space assignment that I made recursive.
            It has source code tabs: CustomPShape and VectorAvatar.
       Trigonometry slides relating to recursion and graphical coordinates in general.

        September 7 Continue going over the recursive part of the September 2 sketch.
        September 9 Went over Assignment 1 above. 9/14 class will be a work session.
        September 14 Work session on Assignment 1, Q&A recorded.
        September 16 Started going
CSC480DemoScreenshot1FA2021 over in Assignment 2 prep above.
        September 21 Continued going over variations of the September 16 handout code in prep for Assignment 2.
        September 23 Went over the main requirements of Assignment 2 above.
        September 28 This one is missing in action. It was a work session with few questions, seemingly none recorded.
        September 30 Started exploration of Musical Instrument Digital Interface (MIDI) and digital audio.
        October 5 Went over speedup via PShapes, and MIDI in ConcentricCirclesIntervals above. CSC220 noon class.
        October 7 Went over sketch that uses tint(255, alpha) to fade one image out & next image in in cycles.
        October 14, NO CLASS, CSC220 look at another MIDI sketch, at using ConcentricCircles, & enhancing collision recovery.
        October 14 posted October 11 video going over Assignment 3.
        October 19 Additional going over Assignment 3.
        October 21 some work session Q&A on assn3.
        October 26 Worked through the Sunflower sketch on the way to Assignments 4 & 5.
            I will post an updated version of the sketch on the course page within a few days.
        October 28 Worked through other sketch ideas for Assignments 4 & 5.
        November 2 Some Q&A on Assignment 3 + Parson's multi-threading to fix the initMIDI() timeout problem.
        November 9 Go over Assignment 4&5 options.
        November 16 Went over CSC220 portion of Client-Server, Model-View-Controller materials above.
        November 18 Continue project examination from November 16.
       
November 30 Applying java.util Map, Set, and List derived classes to Processing sketches per Review materials.
            November 30 recording from CSC220 but is equally useful to CSC480 students.