Institute of Computer Science
  1. Courses
  2. 2025/26 fall
  3. Computer Graphics Project (MTAT.03.328)
ET
Log in

Computer Graphics Project 2025/26 fall

  • Main
  • Projects
  • Topics
  • Results and Schedule
  • Formatting Hints
  • Links

Untitled midi project

Author : Henri Maandi

The project consists of and interactive visualization that can be controlled via a MPD 240 MIDI controller, which looks like this:

The project will be implemented in C. The midi input will be handled directly via the win32 API and window creation and graphics will be done via Sokol.

In the end there should be a link to the final build, repo and a 10-20 sec final result video.

Milestone 1 (05.10)

  • Create an abstraction layer for MIDI inputs (utility functions for encoding MIDI signals into structs) (2h)
  • Research what kind of visuals would be a good fit for this kind of interactivity. (???h)
  • Possible inspirations :

https://www.shadertoy.com/view/MdVGRh

The structure for midi messages looks like this:

Getting this information from the raw midi data via bit manipulation:

USB B cable is a bit finicky, might need to buy a new one. Should probably also periodically check if the controller is still connected and try to reconnect if it isn't.

Milestone 2 (21.10)

  • Initial version of oscilloscope rendering with 2 sine oscillators (10h).

Quick prototype I made in godot: https://drive.google.com/file/d/1f6u6WrndF2UTpQtCD2CPhyyEKo4CHdTC/view?usp=sharing

Really good blog post for this: https://nicktasios.nl/posts/simulating-an-xy-oscilloscope-on-the-gpu.html

Milestone 3 (04.11)

  • Support for at least one other type of waveform (sawtooth) (1h).
  • Implement more controls for oscillators - phase, cutoff (2h).
  • Functionality for multiplying waveforms (1h).

These features should be enough to construct a simple mushroom like in the inspiration video:

I added 2 oscillators: a saw wave and a sine wave. The saw wave is added to the right channel and the left channel is multiplied by the sine wave, this lets us draw mushrooms and other cool shapes:

Milestone 4 (18.11)

  • Implement audio system that converts samples to playable sound (10h)

I decided to use the miniaudio C library for audio, as I'm already somewhat familiar with it. Every time an output device requests audio frames, we fill the audio buffer up with information from the existing oscillators. This is very similar to how the lines get drawn, but the number of samples is different.

Milestone 5 (02.12)

  • Implement functionality for saving and loading presets (5h).
  • Add more oscillators / test what combination of oscillators would work the best (5h).
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment