CSC 480 - Special Topics in Multimedia Programming, Spring 2020, MonWed 4:30-5:50 PM, Old Main 158.
    Attendance at class time via Zoom is an option. I advise students who did not take CSC220 to attend in person.
    Here is the Zoom link for our course:
https://kutztown.zoom.us/j/346596784 

Dr. Dale E. Parson

Spring 2020 Office Hours (Old Main 260): Tu 2:30-4:30, Wed 12:00-2:00, Fri 1:30-2:30, or by appointment.
Parson office hours for last two weeks of spring 2020:
Tuesday Apr 28 2-3 PM (changed from 2:30-4:30)
Wed Apr 29 12-2 PM as usual
Fr May 1 1:30-3:30 (extra hour added)
Final exam week hours:
Tuesday May 5 2:30-4:30 PM as usual
Wed May 6 12-1 PM (one hour less)
Thursday May 7 1:30-3:30 (Friday's usual office hour cancelled)
First day handout (syllabus that is specific to this semester).
assn4 below

Final exam period Wednesday, May 6, 2020, 2:00 p.m. – 4:00 p.m. is an optional-attendance work session.

Real-time on-line teaching via Zoom to commence March 23 through end of semester.
    
You can attend interactively at normal class time if possible via https://kutztown.zoom.us/j/346596784.
     Use the Chrome browser if possible. Click the link before March 23 to auto-install Zoom if you haven't already.
     I will post  a link to a video recording of each class within 24 hours at the bottom of this course page as before.
     My office hours will take place at the normal times VIA THIS DIFFERENT, OFFICE HOUR ZOOM ROOM.
     Please watch your email & this course page. If Zoom runs out of steam, I will post YouTube videos & send email.
     Some CSC363 student teams are using https://discordapp.com/ to communicate. That may come in useful for assn4/5.

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.

CSC480 Special topics course in spring 2020:
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 2019
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.
Spring 2014 Java slides on exceptions
Spring 2014 Java slides on generics
 

ASSIGNMENTS

Lead up to Assignment 1
        A Distributed Model-View-Controller Design Pattern for a Graphical Remote Control of a Multi-User Application
            is a draft conference paper growing out my my design of last semester's CSC220 final projects.
        CSC220W20MIDIassn4ServerParson is the graphical server from that paper. Here are its additional code Tabs:
            Tabs: Musician, Note, CartesianPolar
            Vectors & image: atom2e.2.svg, atom4e.1.svg, atom4e.3.svg, atom6e.0.svg, atom7e.4.svg, hexagon.png
        CSC220W20Androidassn4ClientParson is the graphical client from that paper. Here are its additional code Tabs:
            Tabs: Musician, Note, CartesianPolar, Menus, LoopState
Assignment 1 adds chords to an enhanced version of the above. Copy these two sketches into Processing & save.
        CSC480S20MIDIassn1Server is the graphical server starting code. Here are its additional code Tabs:
            Tabs: Musician, Note, CartesianPolar
            Vectors & images: Save the above .svg and .png files in the CSC480S20MIDIassn1Server sketch directory.
        CSC480S20Androidassn1Client is the graphical client starting code. Here are its additional code Tabs:
            Tabs: Musician, Note, CartesianPolar, Menus, LoopState
        Look for the STUDENT comments (all upper case) to find your work documentation.
        WARNING: On 2/4/2020 a student found a lab machine's Processing coming up in P5 (Javascript) mode.
           
        Switch it to Java mode if it comes up in some other mode.

    Dr. Parson's solution to Assignment 1:
        LoopState tab from the client.
        Server tab, Musician tab, Note tab from the server.

    Lead up to Assignment 2 on recursive shapes.
           Recursive2020Parson is an updated version of a Fall 2017 2D recursive shape assignment for CSC220.
                Recursive2017Shape.svg was an experiment in a 2D PShape design that I did not use.
           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.
           Assignment 5 from spring 2017's CSC220 class that initiated this sketch.
                It was the last time I covered recursion in CSC220. We switch to doing an Android app after that.
           Trigonometry slides relating to recursion and graphical coordinates in general.

    Assignment 2 on using recursive partitioning of 2D and 3D spaces is due via D2L by 11:59 PM Monday March 9.
        Here is the starting handout sketch.

    Lead up to Assignment 3 on time-recursive photos of the Processing canvas.
        CSC480DemoScreenshot1 is my initial demo for thinking.

    Assignment 3 on time-recursive photos of the Processing canvas is due via D2L by 11:59 PM Wednesday April 8.
        CSC480PixelPhotosAssn3 is the handout code that you must extend. Due date slid from April 1 because of KU closure.
        Updated handout 3/25: The move() function in class Brush is updated, please copy this function into your sketch.
        Also, at the top of draw's display loop I added this line; please add it to your sketch:
                brush.move() ;  // added by Parson 3/25/2020
                brush.display();        // This line was already in the original handout code.
     I forgot to mention this one. If you use the coordinates that I specified for 'l' (line) and 't' (triangle),
            it will be easiest if you use the following translate within each of those 2 cases only:
        case 'l':
          translate(-(startx+endx)/2, -(starty+endy)/2);
    This undoes the translate at the top of Brush.display(), restoring global coordinates,
        which is what my instructions are in, for example this one:
      't' triangle (STUDENT must add this: startx,starty, endx,endy, (startx+endx)/2, Y_BASED_ON_THESE_4_VARS
      'l' line (STUDENT add from startx,starty to endx,endy, thick strokeWeight)
    Note that I specified coordinates in terms of startx, etc. For those to appear on the screen,
        it is necessary to use this reverse translate before drawing your triangle or line.
          

    Assignment 4 & 5 will be individual or 2-team projects that students design. Due dates are April 17 and May 7 via D2L.

      Example sketches. You can also build atop previous assignments.
        CSC480Spring2020QuiltAnimate is a sketch demoed on March 23.
            It includes TABS: ImageLoader, Cell, and Tilers. It needs HexMask_1200_1040.jpg in the sketch directory.
            Download CSC480QuiltImages.zip and unzip in the sketch directory as directory CSC480QuiltImages/.
            Download & inspect CSC480QuiltAnalysis.zip if you take on this project (big file).
            Inspired & guided by Designing Tesselations, 1999, by Jinny Beyer
        Sunflowers2020.zip as demoed April 1
        CSC480SP20Puzzle.zip as demoed April 1.
        CSC480PhotoMandala2020.zip as demoed April 1
        CSC480RandomVsPerlinNoise demo for April 6
        CSC480SP2020RotateFlightPath trig demo for April 6
        CSC480TrimTransparent cropping transparent pixels from a PImage April 15
            Above link removed, use CSC480TrimTransparent17Apr2020:
            Here is CSC480TrimTransparent17Apr2020 that fits the input PImage to the display then trims that fitted copy.
            Here is my image file BoundaryTransparent.png, but you can use your own.

        ZOOM RECORDINGS
                January 22 on an overview of the course for the semester and some sample project ideas.

                January 27 Start of overview of the graphical server, Android client architecture for Assignment 1.
                January 29 walking through the OSC/UDP receiver-side plumbing of the server, and overview of the simpler, 2D client.
                February 3 going over instructions for Assignment 1.
                February 5 going over example recursive graphics programs.
                February 10 slides on trig functions linked here, also more recursive graphics examples including 3D.
                    Processing's fullScreen() does not show up in Zoom or its archives. I stopped doing that when we figured it out.
                February 12 more coding examples on recursion & navigating the camera through a 3D visual space.
                February 17 went over Assignment 2 handout and structure of starting code.
                February 24 went over sketch CSC480DemoScreenshot1 and the following videos in prep for Assignment 3:
                    Flaming Beauty, exhibited in the 2019 Art of the State Exhibit in Harrisburg; From the No World; Virtual Infinity Room #2.
                February 26 continued going over CSC480DemoScreenshot1 of February 24.
                March 2 went over most of Assignment 3 specifications and handout code.
                March 4 completed going over Assignment 3, also Illustrator -> SVG -> Processing example, then work session.
                March 23 going over the CSC480Spring2020QuiltAnimate sketch above as one possible assn4/5 to extend.
                March 25 Q&A on Assignment 3, with illustrations from this Zoom session in the updated handout doc.
                March 30 Overview & demo of ideas for Assignments 4/5. Also, how to capture Processing graphics frames to make a video.
                April 1 Overview & demo more ideas for Assignments 4/5. Also some Assignment 3 Q&A.
                April 6 demos of (uniform) random(), (Perlin) noise() and randomGaussian(), code is here. A simple rotate demo is here.
                    Also went over flight-path demo that supplies trig path-finding functions based on observation site and flight direction.
                April 8 Work session with Q&A for Assignment 3.
                April 13 Some Q&A on Assignments 4 & 5 and some related discussion.
                       
YOU NOW HAVE TO TYPE A STUPID PASSWORD TO VIEW THE VIDEO. HERE IT IS: Z6&==kM0
                April 15 I went over a pixel-level algorithm for trimming transparent pixels around the border of a PImage during a work session.
                April 20 Work session. Examined image-fitting & transparent-boundary trimming in CSC480TrimTransparent17Apr2020 above.
                April 22 Work session with some recorded Q&A.
                May 6 Work session where I went over how to use PImage's mask() function for masking out parts of an image.