As a modern composer, I use a digital audio workstation called Reaper.
It didn't take long for me to figure out that Reaper allows for custom scripts that utilize its API to manipulate aspects of the project.
Ever since, I have been implementing ideas for my own utility scripts, as well as doing some contracted scripts. Some of these scripts are used by the Reaper community.
Here are some visual demos of a couple scripts that I worked on:
This script allows for using a single keybind to easily adjust the zoom level of the project.
This script enables the user to encompass a region of items within the bounds of a single item. A keybind can then be pressed to copy and paste the contents and automation bounded by that item into all other pooled instances.
Copies of the item can be stretched in time, and the pasted contents will obey that stretching, along with any tempo changes.
This is one of my most complicated scripts. Reaper allows Lua scripts to open a window and draw primitive shapes on it. By utilizing that functionality, I was able to build a pitch correction utility.
It works by using Reaper's API to get access to the audio data of the selected item. I was able to implement the algorithm described by
this paper to enable analyzing the pitch of that audio data.
Once the pitch data is available, it is possible to use Reaper's API to embed pitch corrections inside the pitch envelope of each item.
After that point, it is a matter of developing an intuitive interface to perform those corrections, as well as a way to serialize those corrections so they can be saved and loaded with the project.
All of this is demonstrated in this demo video:
Reaper not only allows you to write Lua scripts, but also create compiled DLL extensions. After a while, I became experienced enough to make my own.
These extensions are normally written in C++, but I was able to figure out on my own how to write them in Odin.
This project brings together many of the skills I know, and utilizes my gui framework to open an operating system window and assign it as a child to the main Reaper window, causing it to float on top.
The program was designed to make the very large track counts associated with composing cinematic scores more manageable. It does this by providing an interface where named groups can be created and arranged in 2D space for visual convenience.
Project tracks can be added to and removed from these groups at will, and when doing so, their visibility is tied to whether or not each group is selected.
These groups are completely serialized inside the project file, so they can be saved and recalled when the project is closed and opened.
All of the GUI logic was done manually by myself, including text editing, selection, deletion, movement, etc...
The graphics are vectorized and can resize to adapt to various monitor DPIs.
The source code is available here.