openFrameworks Advanced | CTech II
Prof. Dr. Angela Brennecke | [email protected] | Film University Babelsberg KONRAD WOLF
Table of Contents
Additional content: https://drive.google.com/open?id=144AFP28D90mBaz59AaBJ-yRNwQPf1T81
- Friday 8th, Thursday 14th & Friday 15th November, 10 h - 17 h
- 1.5 SWS | 1 ECTS minimum
- openFrameworks Advanced workshop
In this course, we will use openFrameworks as our creative coding toolkit to explore its capabilities for developing a visual software synthesizer. To do so, we will first dive into the specifics of how openFrameworks implements audio and provides access to the underlying audio hardware APIs. Following that, we will develop a first synthesizer prototype using openFrameworks' soundbuffers and audio output routines using different types of user interaction. Furthermore, we will extend sound capabilites by adding oscillators interaction. As a part of that we will use MIDI control and the chromatic scale to create melody and interact with the sounds. Finally, we will explore how to visualize certain sound parameters and connect them with graphical sound objects. The interaction will primarily be user-driven yet in a last step we will explore image data to drive our sound generation.
The assignments will help you understanding more advanced programming concepts of openFrameworks. Moreover, the coding assignments are intended to be built upon in the case you would like to extend them further.
- Understanding software synthesis processes and their implementation
- Working with MIDI and keyboard controllers to play back sound
- Deepening the understanding of the openFrameworks SDK and C++ in particular regarding audio
- Understanding the connection between application software and driver software
- Handling unknown code and deriving general design diagrams
- Developing and expressing artistic ideas with openFrameworks
Attendance is everything, no grading. You will receive 1 ECTS for participation. If you would like to further develop the workshop project, we can agree on a feature set and additional ECTS.
The first day of the workshop will be dedicated to sound generation and software design. First, we will focus on understanding how openFrameworks implements sound and connects software with the underlying hardware (i.e., audio interface / soundcard). Second we will start exploring an ofApp synthesis example and develop a first prototype of a software synthesizer.
The second day of the workshop will be dedicated to interaction and control. We will have the oscillators interact with each other and connect the previously developed synthesizer to a MIDI controller. Moreover, we will explore performance aspects and and check out further generic STL containers to support the object management.
The third day of the workshop will be dedicated to finalizing the implementation of the syntheszier. Moreover, we will aim for connecting visuals to the sound engine. We will start with a classical "bouncing balls" example and explore image data as an input source for driving the sound generators.
As a communication platform, we will use GitHub.com to share code, lecture materials, comments, and submit project assignments.
The repository will be used to share lectures, coding examples, homework and project materials. The Wiki will be used to share information that might be useful for everyone.
To participate in this workshop, you will need the following:
- Ideally, a notebook with access to web cam, speakers, and headphones (will be provided).
- The latest version of openFrameworks that you can download online at https://openframeworks.cc/download/
- Git for version control as well as access to GitHub
- A development IDE supported by openFrameworks like
- XCode on MacOS
- MS Visual Studio on Windows
- Visual Studio Code, supported on both machines but you usually have to manually adjust your build scripts, etc.
Note If you would like to borrow a notebook, please get in touch with Angela on 4th Nov the latest.
With XCode 11, a new codesigning restriction has been introduced by Apple that requires all dynamic libraries that are used in the development process to be code signed. This is not true for the external libraries required by openFrameworks that ship with the last stable release of openFrameworks v0.10.1. Whenever you try to compile an ofApp v0.10.1, the linker error message "Command /usr/bin/codesign failed with exit code 1 running Xcode project" is thrown and the build process interrupts.
To fix this problem, you have three solutions:
- Downgrade XCode to pre-v11 or simply do not upgrade in case you still use an older version of XCode
- Download a nightly build of openFrameworks and
- use it or
- simply copy the library "libmodex.dylib" from the folder libs/fmodex/lib/osx/* from the ofx nightly build to that same folder of the latest stable build; nightly builds can be downloaded from here
- https://openframeworks.cc/download/
- Alternatively, you might also use the latest Github version of openFrameworks and its external dependencies. The nightly builds can be downloaded from the official website here:
More details can be found here:
- https://stackoverflow.com/questions/58189980/command-usr-bin-codesign-failed-with-exit-code-1-running-xcode-project
- https://forum.openframeworks.cc/t/cant-run-examples-in-xcode-signing-issue-with-libfmodex-dylib/33463
Main source of the theoretical aspects of the workshop is the book
- Brian K. Shepard (2013): Refining Sound. A Practical Guide to Synthesis and Synthesizers. Oxford University Press.
- Ira Greenberg (2007): Processing: Creative Coding & Computational Art. Berkley, CA: Friends of ED/Apress Press.
- Bill Manaris & Andrews R. Brown (2014): Making Music with Computers. New York, NY: Chapman & Hall / CRC Press.
- Joshua Noble (2009): Programming Interactivity. A Designer’s Guide to Processing, Arduino & openFrameworks. Sebastopol, CA: O’Reilly Media Inc.
- Bjarne Stroustrup (2013): The C++ Programming Language. Upper Saddle River, NJ: Pearson Education, Inc.
- Bjarne Stroustrup (2014): Programming. Principles & Practices Using C++. Upper Saddle River, NJ: Addison-Wesley.
- Scott Meyers („Effective C++“ series, advanced)
- Herb Sutter („Exceptional C++“ series, really advanced)
- Grady Booch (1994): Object-oriented Analysis and Design. Addison-Wesley. NY, USA.
- Robert C. Martin (2009): Clean Code. Prentice Hall. NY, USA.
- Robert C. Martin (2017): Clean Architecture. Prentice Hall. NY, USA.