Difference between revisions of "256a-fall-2017/hw2"

From CCRMA Wiki
Jump to: navigation, search
(Homework #2: Sound Peeking)
(Specification (part 1 of 3): Naming + Compilation)
(22 intermediate revisions by 2 users not shown)
Line 10: Line 10:
 
=== Specification (part 0 of 3): Reading ===
 
=== Specification (part 0 of 3): Reading ===
 
* '''please read:''' [http://www.gewang.com/publish/files/2016-lmj-viz.pdf Some Principles of Visual Design for Computer Music]
 
* '''please read:''' [http://www.gewang.com/publish/files/2016-lmj-viz.pdf Some Principles of Visual Design for Computer Music]
* (reference) the original OpenGL (1.1) [http://www.glprogramming.com/red/ "The Red Book"]
+
* (for reference) the original OpenGL (1.1) [http://www.glprogramming.com/red/ "The Red Book"]
 
* download and play with [http://www.gewang.com/software/sndpeek sndpeek]
 
* download and play with [http://www.gewang.com/software/sndpeek sndpeek]
 
  
 
=== Specification (part 1 of 3): Naming + Compilation ===
 
=== Specification (part 1 of 3): Naming + Compilation ===
 
* choose a name for your program
 
* choose a name for your program
* get a framework compiling on your system (keep in mind the final deliverable must be compilable/runnable on the CCRMA machines)
+
* get a framework compiling on your system; might wish to start from the [http://ccrma.stanford.edu/courses/256a-fall-2017/code/hw2boilerplate.zip VisualSine] example (time domain waveform rendering)
* might wish to start from the [http://ccrma.stanford.edu/courses/256a-fall-2014/code/hw2/VisualSine VisualSine] example from lecture (time domain waveform rendering)
+
 
* use the chuck_fft.* files [http://ccrma.stanford.edu/courses/256a-fall-2014/code/hw2/FFT found here] '''NOTE: this library ONLY works with single-precision floating point numbers (e.g., float)'''
 
* use the chuck_fft.* files [http://ccrma.stanford.edu/courses/256a-fall-2014/code/hw2/FFT found here] '''NOTE: this library ONLY works with single-precision floating point numbers (e.g., float)'''
 
  
 
=== Specification (part 2 of 3): Visualizing the spectrum ===
 
=== Specification (part 2 of 3): Visualizing the spectrum ===
* implement short time fourier transform, and visualize the spectrum over time
+
* implement short time fourier transform, and visualize the spectrum '''over time'''
 
* considerations:
 
* considerations:
 
** windowing (rectangular, hann, hamming)
 
** windowing (rectangular, hann, hamming)
Line 29: Line 26:
 
** hop size (for now, hop size can equal window size)
 
** hop size (for now, hop size can equal window size)
 
* implement either a waterfall plot (like sndpeek) or a real-time scrolling spectrogram
 
* implement either a waterfall plot (like sndpeek) or a real-time scrolling spectrogram
* write a simple ChucK program to test the microphone input!
+
* test using the microphone input!
 
+
** use a simple chuck program that hooks up the microphone to the output so you can test your chuck setup as well as your visualizer.
 +
** (hint: in chuck, the input / microphone is '''adc''')
  
 
=== Specification (part 3 of 3): An Audio-Visual Narrative ===
 
=== Specification (part 3 of 3): An Audio-Visual Narrative ===
 
* create a ChucK program to run inside your visualizer
 
* create a ChucK program to run inside your visualizer
** use a combination of microphone and sound synthesis
+
** use a combination of microphone ('''adc''' in ChucK) and sound synthesis
 
** think about different "sections" or "movements", and how to transition between them
 
** think about different "sections" or "movements", and how to transition between them
 +
** try to align the aesthetic of your visualizer and your ChucK program (give it '''personality''')
 
** (optional): can use keyboard input
 
** (optional): can use keyboard input
 
* aesthetic goal:
 
* aesthetic goal:
 
** polish not important!
 
** polish not important!
 
** technical fanciness not important!
 
** technical fanciness not important!
** make the viewer/listener '''feel something''': important!!
+
** making the viewer/listener '''feel something''': important!!
 
+
  
 
=== Note ===
 
=== Note ===
Line 56: Line 54:
 
* 0) source code to the project (*.h, *.cpp, *.c makefile, etc.)
 
* 0) source code to the project (*.h, *.cpp, *.c makefile, etc.)
 
* 1) screenshots of your visualizer!
 
* 1) screenshots of your visualizer!
* 2) online page for your project (should be viewable at http://ccrma.stanford.edu/~YOURID/256a/hw2/).  It should include:
+
* 2) HTML page for your project (if you have a CCRMA account, should be viewable at http://ccrma.stanford.edu/~YOURID/256a/hw2/).  It should include:
 
** links to your files of various kinds
 
** links to your files of various kinds
** instructions on building the project (for example, anyone in the class should be able to download
+
** instructions on building the project (for example, anyone in the class should be able to download)
** a short README text section that:
+
** a short text section that:
 
*** conveys your ideas/comments in constructing each program  
 
*** conveys your ideas/comments in constructing each program  
 
*** describes any difficulties you encountered in the process
 
*** describes any difficulties you encountered in the process
 
*** lists any collaborators
 
*** lists any collaborators
* 3) upload to coursework, under a new folder hw2
+
* 3) a high-resolution (screen capture or with camera) video of your visualizer / audio-visual narrative
 +
* 4) upload to Canvas. don't forget to include the HTML for your website!
 +
* 5) (if you are using the VisualStudio project, please delete the intermediate directories and .vs hidden folder before uploading. these can get really large sometimes and we will have to download all your homeworks...)

Revision as of 14:24, 4 October 2017

Homework #2: Sound Peeking

Due date: Sunday 2017.10.15 11:59:59pm.


Waves-bw.jpg

In this assignment, you are to visualize sound in real-time, using OpenGL for the graphics programming, and integrated ChucK as a sound source. Your program will visualize: 1) live microphone input and 2) a designed sound narrative written in ChucK!

Specification (part 0 of 3): Reading

Specification (part 1 of 3): Naming + Compilation

  • choose a name for your program
  • get a framework compiling on your system; might wish to start from the VisualSine example (time domain waveform rendering)
  • use the chuck_fft.* files found here NOTE: this library ONLY works with single-precision floating point numbers (e.g., float)

Specification (part 2 of 3): Visualizing the spectrum

  • implement short time fourier transform, and visualize the spectrum over time
  • considerations:
    • windowing (rectangular, hann, hamming)
    • window size
    • FFT size
    • hop size (for now, hop size can equal window size)
  • implement either a waterfall plot (like sndpeek) or a real-time scrolling spectrogram
  • test using the microphone input!
    • use a simple chuck program that hooks up the microphone to the output so you can test your chuck setup as well as your visualizer.
    • (hint: in chuck, the input / microphone is adc)

Specification (part 3 of 3): An Audio-Visual Narrative

  • create a ChucK program to run inside your visualizer
    • use a combination of microphone (adc in ChucK) and sound synthesis
    • think about different "sections" or "movements", and how to transition between them
    • try to align the aesthetic of your visualizer and your ChucK program (give it personality)
    • (optional): can use keyboard input
  • aesthetic goal:
    • polish not important!
    • technical fanciness not important!
    • making the viewer/listener feel something: important!!

Note

  • have fun with it!!!
  • PRINT OUT USAGE/KEYS TO CONTROLLING YOUR VISUALIZATION ON THE CONSOLE EVERY TIME YOUR VISUALIZER STARTS! (see sndpeek)
  • comment your code!
  • choose your own coding conventions - but be consistent
  • you are welcome to work together, but you must do/turn in your own work

Deliverables

turn in all files via coursework, with concise online documentation + readme

  • 0) source code to the project (*.h, *.cpp, *.c makefile, etc.)
  • 1) screenshots of your visualizer!
  • 2) HTML page for your project (if you have a CCRMA account, should be viewable at http://ccrma.stanford.edu/~YOURID/256a/hw2/). It should include:
    • links to your files of various kinds
    • instructions on building the project (for example, anyone in the class should be able to download)
    • a short text section that:
      • conveys your ideas/comments in constructing each program
      • describes any difficulties you encountered in the process
      • lists any collaborators
  • 3) a high-resolution (screen capture or with camera) video of your visualizer / audio-visual narrative
  • 4) upload to Canvas. don't forget to include the HTML for your website!
  • 5) (if you are using the VisualStudio project, please delete the intermediate directories and .vs hidden folder before uploading. these can get really large sometimes and we will have to download all your homeworks...)