train

Welcome

You have reached my personal website

You are probably looking for SpessaSynth

If not, then keep on reading!

The Train

But let's talk a bit about this train in the background first. It is called (I believe) Metrowagonmash 81-572.2. This is the modernized version of the infamous 81–717.3, operated by the Warsaw Metro. Well, it isn't anymore, as it was replaced by a new Škoda Varsovia model. It was my favorite metro train to commute with (mostly because of the looks), but oh well, it's gone now. I guess Škoda is fine too.

About Me

Now that that's out of the way, I guess it's time to write a bit about myself. I'm from Poland (as you might've guessed since I've talked about a Warsaw train), and I'm 19 as of writing this. And I also like programming, which is what I do that in my free time, mostly working on SpessaSynth. Other than that, I enjoy gaming and music. Really generic, I know.

How I Got Into Programming

The Beginning

When I was in primary school, my IT grades were terrible, mostly because of my laziness. One day, my classmate suggested to me that I should attend additional classes about programming. I was intrigued, and so I agreed, joining the class, where we learnt Scratch language.

The Middle

I immediately got into Scratch, as it was straightforward and intuitive, started to code games and other projects. Looking back, they were not very good...

After some time, I tried to move to a real programming language. I chose C++, which was not a very good decision. Why? Just because the name sounded cool... Yeah, I got stuck on pointers and OOP and quickly gave up, returning to Scratch.

Then I got a Python book and started coding in there, mostly some basic console apps like calculator, later using tkinter and making some desktop apps.

The JavaScript Phase

Now this is where things get interesting.

I started to learn JavaScript in school, playing with some basics like changing element's text and things like that, even making a fake "Captcha" button that changed the box to a GIF and then a checkmark. I also was learning PHP at school, so I was combining the two for school projects for higher grades. It still was basic stuff though, like $(element).load("getclients.php");, so nothing special.

Then YouTube decided to recommend me a video titled "Bad Apple!!"

The Bad Apple

As dumb as it may sound, this video made me create my first proper JS project. You see, this video is famous for being recreated in various things not meant for playing videos. I wanted to try this too, and I decided to replicate it via text. The final result was quite cool, but also horribly inefficient. All the frames were stored as one massive JSON file containing all the frames as string! Nevertheless, it taught me how to properly calculate time, play audio, read JSON and stuff.

After that, my projects only grew bigger. At school, we have been assigned a basic JS and PHP project which I took very ambitiously: I've added a loading screen for waiting for the server to process the request, animations, registration prompt with username availability checking, checksums, and more.

I even tried to make a Discord clone with image support, pinging support and even a mobile app in C#! (You can view the project here btw. Also I've created my longest SQL statement there)

The Audio Visualizer

So I was really getting into a game series called "Touhou Project" (which the Bad Apple video came from) and really enjoying the soundtrack (you should really give it a listen btw, it's amazing). I started a project called "audio visualizer" which was, well... an audio visualizer. It used an AnalyserNode and simply drew the FFT data on the screen, using a library called "jsmediatags" to extract album cover and draw it too. The project had quite a few visualization modes, and I was ready to move on.

Then I stumbled upon this post, thus discovering the existence of MIDI files.

SpessaSynth

So I tried playing the MIDIs, and it was fine. But I kind of wanted to add MIDI support, so I created a folder called "midi_tester" which would later become SpessaSynth.

The start was rough. I didn't know anything about binary or music at all, so it was a mess. I tried ChatGPT's help and it kind of did. I could now play a format 0 MIDI file using... triangle waves. It sounded bad, but it worked. So I pressed on. I've added visualizations of the falling notes and shared the following screenshots with my friends:

I continued to add more: keyboard, time selection, text events, pitch bends... But there was still one issue. The sound was bad! All it could do was play triangle waves. No drums, no nothing! So I asked ChatGPT for the solution and it proposed SoundFonts!

So I got to work on them. The first success I had was playing the samples with loops, without any param data. I've recorded it to share with friends, making it the first recording of SpessaSynth:

And the rest is history. A history with lots of ups and downs, but still! Fast-forward around 1,5 years later, and I'm still working on the "midi_tester" to this day...

So, thank you for reading all the way down here! I hope this chunk of text wasn't too boring to read. I might expand this later with more about how I developed SpessaSynth, the issues I faced and how this project quickly became my largest one ever.

Have fun with SpessaSynth,
~ spessasus