Here I list some earlier projects after learning a few concepts and frameworks from the first year of my computer science degree.

ImagesToPDF

The idea came about from the inability to download piano sheet music from the sites I used, as the pdfs were blocked by paywalls.

A small Python script was made that would let screenshots of the sheet previews be pasted in. The previews would contain all the music information - just in many smaller and separate chunks. The script would then use the Tkinter Python library to select the screenshots in order and PyPDF2 to concatenate all the images of sheet music into a single pdf.

This actually worked pretty well, but the screen shots had to be cropped to a similar size and aspect ratio before pasting in - the concatenation logic wasn’t advanced so different parts of the sheet would appear bigger or smaller depending on the screen shot size


UltraShorts

This was a slightly larger project but is included here because there weren’t pictures of the development process and the application wasn’t containerised, so it doesn’t work anymore as it’s dependencies are outdated.

During my second year of university we had a module for web-development where our professors taught us how to use the Django framework. Our task for the module was to develop a full-stack application after been given an exemplar project - something akin to a module tracking system for teachers and students.

Our full-stack application - MyMusicMaestro - was supposed to allow users to catalogue songs they had listened to, store albums and more.


After completing the module, the finished websites code was used and modified to make a different site that allowed me to convert long-form youtube videos like podcasts to byte-size clips.

This is how the process would work:

  1. The link of the youtube video will be pasted into the site
    • It would be downloaded in high definition and it’s transcript would be extracted.
  2. A button on the site would copy a predefined prompt along with the transcript itself to the clipboard.
    • The prompt would tell an LLM (ChatGPT) to break the transcript up into interesting chunks.
    • The LLM would then would then break it down and output a formatted reply with exact timestamps of interesting parts of the video
  3. The LLMs reply was copied verbatim - it was asked to produce output with an exact format.
  4. The output was pasted in a different part of the site that allowed the backend to process the video and split it up into the interesting chunks. The splitting was done with the ffmpeg-python package.
    • Coding this part was actually quite interesting as I learnt a lot about video encoding and the neccessity for carefully thought out efficient pipelines when processing large files like high quality videos.
  5. After ffmpeg outputted the smaller byte-sized videos they would be lightly edited and have captions added to them using a video editor and uploaded to a few separate social media accounts.

A lot was learnt about full stack development. The architecture used was Model-View-Controller, and building this out solidified the MVC principles and improved programming skills.


Bit Depth Convertor + extension

A sampler is an instrument that must take an input - sounds (samples) to produce something new. Effects can be added to samples, they can be looped, spliced and more. The premise behind a sampler is to make music from existing sounds/music and one-shot instrument notes to make a new loop/track/song out of them. My sampler (shown below) takes only a specific bit depth format - 16-bit to be exact and a sample rate of 48kHz. It is unfortunate that samples sometimes don’t play because of a formatting issue. But a little programming sidestepped this issue.

Roland SP404-MK2
Roland SP404-MK2

At one point, I had downloaded and created different samples, one-shots and chord stabs of various musical instruments. These were all stored in a recursive file structure with deep layers totalling around 13GB of sounds. The issue was that it wasn’t easy to know which ones were in the wrong format and which were stored correctly. So this program had to find these wrong format files and convert them.

File structure | first layer
First Layer of Sample Folder Structure

The Solution

  • Scan all files recursively
  • Change the format of files that don’t fit the 16-bit/48kHz format.

To achieve this ffmpeg was used and all ‘wrong’ formats were overwritten:

PYTHON
1ffmpeg.output(stream, tempFile, acodec="pcm_s16le", ar="48000").run(overwrite_output=True)

The line above was the main line that did the conversion and overwrote the files.

For sampling other content from Youtube, an extension was added to the existing script that used a library called pytubefix to download the youtube .mp3 files and convert them to the format needed automatically.

This is still used currently - a great tool