Music of Sadale

I've a few pieces of music, mainly for game development.

Currently, only few of the music are released. The released music tracks are published under the license CC-BY 3.0.

Recent Blogposts of Music

Global Game Jam 2019 Post Mortem - Best GGJ I've Ever had!

I've just done another Global Game Jam this year. It's my fourth time joining it. This one totally went unexpected. Originally I planned to join using the game console I'm developing. I ended up not using the game console and made music for the team. I also did a little bit programming. And it's the best Global Game Jam I've ever had!

A screenshot showing the playable

Here's the link to the playable, which takes forever to load.

And here's the source files of the music composition which you may be interested in. The .ptt files are Palette MCT files, and the .mmp is the LMMS source file. Please notice that the FluidR3_GM.sf2 SoundFont file is required for the .mmp file.


Before the event, I thought that I'd take the 2019 Global Game Jam event as an opportunity to market the hardware portable game console that I'm developing. For this reason, here's what I've done:

  • Soldered 3 extra units of the game console. Originally I had 2. Now I've got 5.
  • Purchased two extra ST-link programmers for programming the game console. I had one. Now 3.
  • Prepared the game code template for the game console so that the team would get a head start.
  • Figured out how to install the cross-compiler, toolchain and debugging software on Windows for possible future teammates. Before that, I only knew how to do that on linux.
  • Enhanced the MIDI file conversion Python script. It converts MIDI file into a musical format that's supported by the game console
  • Prepared a couple of microSD cards along with microSD card to USB adapters. The game console doesn't work without a card.

It took me quite a while to prepare all these things. I got all these done before the day of the jam. Great. I'm all set. I'm ready for the jam. All I needed to do is to get someone to form a team with me! It could easily be done during pitching session. And I'd just give the game console devices and ST-link programmers to other team members for the game development! :D

By the way, I dragged a couple of random tourists that I just met in a local hackerspace a few days ago into the jam. I told them not to form a team with me. Mainly because they probably aren't interested in my game console.

First Day (25th Jan 2019)

Before I knew it, the day for me to market the game console had come... I was very excited about it. :)

First Day: Registration and Dinner

As usual, I joined the site without a team. I took the shuttle bus and arrived there. There was a loooooong queue for registration. The photo below is just, perhaps 1/6 of the entire queue. The queue was clearing very, very slow.

A photo showing a lot of people queuing for registration

It seemed to me that it'd take forever to get it cleared. So I decided not to take the queue and sit somewhere nearby and joined the queue after it's almost cleared. The queue took around 25 minutes to clear. That's not surprising considered that I was almost the last one in the queue and there was more than 400 jammers on the site. But still, I didn't enjoy the wait. :(

Right after the registration, surprise! There's another queue! Since I went to the site late, the dinner had long started and there's another long queue for all-you-can-eat dinner! It took me another 10 minutes to get the food. Since I'm late, I didn't get the food that I want. Luckily I still had enough to eat.

After fetching the foods, I found those two random tourists that I met a few days ago. They were chatting with a local while having dinner. Being too shy to chat with other strangers, I just joined them and chatted with them.

After the dinner, it was theme announcement. As usual, there's a lengthy welcome session and introduction video. It was announced that the theme was "What Home Means to You?"

First Day: Pitching, Team Forming and Brainstorming

During the pitching session, I was sitting on the same table with those two tourists and the local. I was observing to see if the game console would be any good to them. Well, seemed not. However, it seemed to me that everyone in the group were very friendly. They weren't like the teams that I've joined in the previous Global Game Jams at all! We're all the same. There isn't any hierarchy. What they're trying to do was to make good use of the skills of the members of the team. It was apparent to me that forming a team with them would make it an awesome game jam. So I decided not to use the game console and formed a team with them.

We discussed about the game idea, which is sort of like a simple RPG. We've sketched out our idea on a piece of paper. With the sketch, we discussed about our roles. We've got a programmer, 3D artist with programming skill, 2D artist and a jack of all trades (which's me). And we decided to have one of us to be a main programmer, one of us doing 3D art, one of us doing 2D art and I'd be doing music. Not because I'm good at it, that's because no one else in the team could do that. xD

One of the ideas we've come up with was very clever. We've talked about having multiple tracks of music. There'd be items on the map, and when the character get the item, a track of music would be played. So you'd get more and more musical instruments playing for each item you've picked. I was asked if that was possible for me to send them the tracks, and I answered yes. In fact, it's fairly easy. :) I just loved this idea. It made good use of my own skill as it isn't something that you could do for a game without an audio guy.

Similar thing happened to other team members. We've come up with ideas that'd make good use of all of our skills. It made each of us felt that our skills were well-respected and helpful! In fact, that's how come we had a game with both 2D and 3D graphic. :)

At the end of the day, I've launched Palette MCT the music composition tool. But I haven't started any real work. I went home and slept. As I had really bad experience with sleeping on-site, I'd never sleep on-site again. I didn't want to get sick for two whole weeks! Not again!

Second Day (26th Jan 2019)

This was the most interesting day of the event. Most of the work were performed in this day. I launched Palette MCT again and started working on composing the music.

Second Day: Coming up with the Chord Progression and Melody. A 12.8 Seconds Piece

There're two ways of composing music. The first way is to come up with chord progression first, then the melody. The second way is to do it the other way around. Personally, I love the music that's made melody-first. However, it'd take a lot of time for me to do that. So I decided to do the chord progression first.

The whole point of using Palette MCT is its chord progression function. It makes coming up with a nice chord progression super easy. Before knowing this software, I mainly did it by trial-and-error. This piece of software is able to filter out the chords that doesn't sound right. It saves me a lot of time!

I was wavering between composing a minor scale piece (the one that sounds sad) or a major scale one (the one that sounds happy). I decided to compose a minor one and settled with a common I-vi-V-I chord progression. Then I randomly came up with a melody. I composed a short 12.8 seconds piece.

A screenshot showing the user interface of Palette MCT

Don't get confused with the musical sheet in the interface. The whole point of using the software those tiny colored rectangles with T5/3, S5/3 and D5/3 on it. Those are chords! That's the main reason why I use this piece of software.

And here's the intermediate result:

Second Day: Enhancing the Intermediate Result of Palette MCT with LMMS

I exported the result from Palette MCT to LMMS and further worked on it. The imported piece contained only three tracks, they're melody, chord and the base of the chord. To make the music sound nice, I'd need to make a lot of variants of these tracks and assign them to appropriate sound synth (instrument).

After discussion with other team members, it was apparent to me that we'd need a lot of tracks. So I added a lot of them. In the end I've got 3 melody tracks, 3 arpeggio tracks, 3 chord tracks, 3 bass tracks and a few beat tracks.

I've developed a Python script to semi-automate the task of converting chord into arpeggio of arbitrary pattern. In musical sense, chord is defined as multiple notes being played at the same time. And arpeggio is just like chord, except that you're playing the chord notes one by one. For example, if you're playing C-E-G at the same time, that makes a chord. But if you play C, then E, then G, then E, then repeat, that'd be an arpeggio.

Arpeggio is a very common technique to add variety to the music composition. The problem I had was that the chord get changed once a while. When I'm trying to make an arpeggio out of the chord, I had to manually create the notes of the pattern according to the chord.

Here's how the script works. It accepts two tracks. The chord track and the template track. The chord track can be imported from Palette MCT. And I'd manually come up with the template track. That's easy, tho. I'd just make a small section of the pattern and do copy and paste. Here's an example. The top one is the chord, and the bottom one is the template. It shows three different chords being played over time.

A screenshot showing a Piano Roll in LMMS of Chord Track

A screenshot showing a Piano Roll in LMMS of Template Track

After running the script, this arpeggio track would be generated:

A screenshot showing a Piano Roll in LMMS of Resultant Arpeggio Track

Notice how the template pattern track had followed the chord. When there're a lot of chords, this tool saves me a lot of time. It also eliminates manual handling errors.

I didn't mention this script in the Global Game Jam blogpost last year. Anyway, this tool was developed before the last year's game jam. Somehow it's still useful in this year. :)

The sound synth (instruments) were chosen from the default presets, which was further modified manually until it sounded right to me. Then I just threw in the arpeggio notes or bass notes or melody notes or chord notes for each of the sound synth and that's it!

And now I've got a 12.8 seconds of loopable music! :)

Second Day: Extending the Music

Needless to say, 12.8 seconds is far too short. :(

So I repeated what I did. I composed another piece of chords and melody using Palette MCT again, and export it to LMMS for further processing and put it at the end of the original composition. Now I've doubled the music length to 25.6 seconds. Anyway, here's the intermediate product of Palette MCT for the second piece:

Up till this point, the composition was in minor scale. For the third piece, I was thinking if I should try adding a major scale piece into the composition. That'd make the composition contains both minor scale part and major scale part. I've never done that before. And it seemed to me that that could be interesting. And I've already got 25.6 seconds. In case it doesn't sound right, I'd just scape the major part and keep the 25.6 seconds minor part. That's still good enough.

So here it goes. I repeated what I did, except that this time I composed a new 12.8 seconds piece in major scale instead of minor scale. Here's the intermediate product:

I further processed this third piece with LMMS. Then I put this part into the beginning of the composition. To my surprise, it actually sounded pretty good. Now I've got 38.4 seconds of music. :) The next step was to remaster it.

Second Day: Remastering

At this time, the music was mostly ready. I just needed to remaster it to make it sounds even better! One of the keys of making a piece of music sound nice is to make its tracks more diverse. I did three things.

The first thing I did was to reduce the volume of part of some of the tracks.

A screenshot showing a the Sequencer in LMMS with a few tracks having low volume

Please notice that the middle part hasn't got any track with volume reduced. That's because it's the climax of the music.

The second thing I did was that I built something that I'd call "alternative melody". I've no idea on the proper musical terminology for this thing. It's basically a variant of the original melody that's played at the same time as the original one. Here's how I did it:

A screenshot showing a the Sequencer in LMMS with a few tracks having alternative melody

As shown above, at each instance of time, there're always two variants of melody being played. Two of the tracks are the main melody, with one of the tracks using an alternative melody. Since variety is crucial, I spread the alternative melody into three different tracks depending on the time of the music being played.

The third thing I did was that, I put in a reverb effect to the entire composition. It'd produce an illusion that the music is played from a different environment, like the size of the room, the audio-reflection property of the wall, etc.

And here's the final result with all tracks combined!

Second Day: Exporting the Tracks for the Programmer

Now I've got the music ready. All I needed to do is to send the tracks to the programmer.

After discussion with the programmer, it's decided that the preferred amount of tracks is 7.

I'd have to make the tracks in a way that it'd loop seamlessly. It was dead simple. Here's how I did that. First, I exported the track. Then I take note of the time it takes for the music to wrap to the beginning.

A screenshot of LMMS showing the wrap time is 38.4 seconds

According to LMMS, the wrap time is 38.4 seconds. It means that the last note is released at 38.4 second. Since the instrument sound doesn't stop immediately after the note is released, some special handling is needed to make the music seamless. Therefore, I used Audacity to do this:

A screenshot of Audacity showing the part after 38.4 seconds is highlighted

What I did was to cut the part after 38.4 seconds and move it to the front as a new track. Then I mixed the original track and the new track and there we have a piece of seamless audio! :)

But hey... There're 7 tracks. Of course I'm not going to do that manually! So I've made a shell script to automate the process with SoX instead of Audacity. It worked like a charm!

Then I converted the tracks to MP3 format using shell script. And I stumbled into a problem. Due to the nature of MP3 format, there's always a split second right at the beginning of the audio that no sound is being played, which would make it impossible to make seamless audio with MP3!

After discussing with the programmer, we've found that OGG is the go-to format instead of MP3. So we used OGG instead of MP3.

I sent the programmer the 7 OGG tracks, and my mission had been accomplished! And I went home.

And I was very glad that my teammates were happy with my music. I was also very happy with the artwork of the 2D and 3D artists. Of course, the program was also working great. :)

Second Day: Funny Event of The Day: Running out of Water

By the way, something rather funny happened during this day. The site we've joined was in Cyberport. During some time of this day, a staff of the jam site stood on the stage and announced this in English: "Hey guys. We've got a bad news. We've used up all of the water in Cyberport." It wasn't very funny until he repeated that in Cantonese. "成個數碼港D水俾我地飲哂喇!", which roughly translates to "All of the water in the entire Cyberport was completely drunk by us! Oh noes!" That's when everyone in the room were laughing. Those who couldn't speak Cantonese were confused about what's so funny.

We were told to purchase the water from a supermarket nearby. So we did that. Then we had dinner at a restaurant. When we came back and we noticed that there was still some water. Well, we had no idea on where they managed to get the water. Had we known this, we wouldn't have purchased the water.

Third Day (27th Jan 2019)

This day was rather relaxing. All of my stuffs were done. The 2D artist was working on the video. And apparently, the 3D artist were working on graphic and probably also a bit of programming. I didn't asked about the exact split of work, tho.

Third Day: Polishing the Game: Character Movement (Bad Idea)

Since I've got nothing better to do on the music, I decided to help on the programming. I polished the character movement. The original character movement relied on the system keypress. That isn't a good idea because the movement speed of the character would depend on the system keyboard configuration. If the repeat key interval is set to short, the character would move faster.

As I thought that the main programmer had nothing to do, I did the fix and showed it to her. It seems that there're some issues with the character sprite cycle. So we decided not to make the change.

Later I'd noticed that the main programmer were still working. She was working on the crystal collection counter. I felt bad for disturbing her while she was working on something far more important than character movement.

Third Day: Polishing the Game: Adding Dialog Boxes (Good Idea)

As the 3D artist and the main programmer are tourists, they'd like to stroll nearby. And they were away. However, there was still a little bit of time left. I asked if there's anything I could still do, and I found that the dialog boxes at the beginning of the game and the end of the game weren't implemented.

I asked if the code on the github repo were the latest one with instant messenger and asked if they're ok with me to implement the dialog boxes. I got a green light and I started working. That was an easy one. I pushed it to repo and they deployed it and that's it.

So we've got a working game with in-game objective (collect crystals) and an ending (a couple of dialog boxes). The game isn't particularly fun to play. But still, it looked real good. And the music's also a nice one (self-flattering.pdf)! The trailer looked good too.

Third Day: Presentation Session

As usual, there's a lengthy trailer-watching session for the jam. Each of us have a minute in maximum. Somehow there aren't as much funny vid this year compared with previous years.

And I've found a game that's about bird pooping on people during the session. That totally reminded me of my Poopie game. :D

After the session, each jammers were allowed to cast a vote. One of our team members had voted for our own game. Too bad! We failed to get the most votes. All of our team members should have voted for our own one! :P


This one is literally the best Global Game Jam I've ever had. It's just wonderful. It isn't like any Global Game Jam I've ever had before! Let's have a review of what the previous game jams were like to me:

Flashbacks of My Previous Global Game Jams

Flashback: My First Global Game Jam: 2016

For the first year, I joined the jam without a team. I expected that my skill would be put well-utilized. I even prepared by practicing using a game development library. It didn't end up to be of any use at all. It was a big team with multiple "game designers". I was rather pissed off of being forced to use a library that none of the team members was familiar with. The funny thing was that this thing was decided by a game designer. I was like "hey! Choice of library is none of your business". First mistake: I should have left the team right after that decision.

And I decided to sleep on-site to get the full experience of the game jam. Before the jam, I've asked those random internet people who had joined Global Game Jam. I was told that it's alright to sleep on site. It turned out that it just didn't work to me. I couldn't get asleep. Funny enough, I somehow decided to sleep on the site for the second night even I failed to get asleep at the first night! I shouldn't have done that at all! Second mistake: Decided to sleep on the site.

Since I couldn't sleep well, I couldn't make much contribution to the team either. I was exhausted.

Result? A broken game with 2-week of illness taking away my entire Chinese new year vacation! I'd call it a FUBAR! :(

Here's a link to my blogpost of Global Game Jam 2016 which you probably aren't interested in. There's a lot of grammar mistakes because I was sick by the time I wrote that blogpost.

Flashback: My Second Global Game Jam: 2017

Compared with the first one, this one was a fun one. It's nowhere as fun as the one of this year, tho. I joined the jam with a purpose. So I decided to jam alone. In fact, I pretty much had to because the jam was a part of my graduation thesis of an independent project. If I had a team, the college may take it that I'm not working on the independent project by myself. That'd be a problem. :(

I managed to complete the game. It's a game that's playable by dialing a phone number. It's possibly the first of this kind in Global Game Jam around the world. Despite that the technology used is rather advance, like utilizing text-to-speech and having a hardware device, the end result wasn't that good. The sound synth was simply too bad. I should have recorded the audio clips with my voice instead of using text-to-speech.

Anyway, I was happy enough because I got the game completed. :) But I did feel a bit lonely. :(

Here's a link to my blogpost of Global Game Jam 2017 which you probably aren't interested in.

Flashback: My Third Global Game Jam: 2018

(If you're the producer of the game "Carpe diem" in Global Game Jam 2018, I hope that you'd never read this. This section is probably super cringy to you. I'm sorry.)

This is my first game jam that I had joined a team without screwing up. I was the musical guy of the team.

The main problem I had with this game jam was that there's an idea person who basically did almost nothing productive other than quality control. Most of the time he was just surfing the net with his laptop and his smartphone at the same time! If I remember correctly, he also had a tablet. I've never seen anyone being able to do this level of multitasking before. Anyway, in some other times, he was looking for information about making an awesome game or making an awesome trailer.

Apparently, the team members of the team I joined were from the same company. I was the only outsider. I'd imagine that the idea person would be in a superior position in the company that he was working for.

I spent quite a bit amount of work on a piece of music. I showed it to him and he just rejected it straight away and provided some not-so-helpful instruction. This was the thing that I had problem with. Here's what I thought: "Hey! You did nothing. How come you'd criticize my work? You're worse off." Of course I didn't spout that out! I redid the music and sent him another piece of music anyway. It seemed to me that he still wasn't satisfied. But he compromised and said that it was ok. Well, I guess that's good.

Right before the jam ended, we were filling in the project page on the Global Game Jam website. Surprise! The title that the idea person was getting was "Producer". It's very laughable. If I don't laugh, I'd cry! xD

Anyway, we still managed to complete the game, sort of. I only got to play the game after the jam. It sucked. :P

By the way, I've chatted with a parallel team right before the end of the jam. Apparently their team doesn't have a quality control person nor an idea person at all!

Here's a link to my blogpost of Global Game Jam 2018 which you probably aren't interested in.

This Global Game Jam: 2019

After reading the flashbacks, now you understand why this Global Game Jam is the best one that I've had!

I didn't jam alone. There's no "team leader" nor "producer" nor "director" nor "quality control" guys in the team. We don't have any quality standard for the game. We just put in whatever we've got and contributed to the team. We just took whatever available from other team members. Every team member didn't really care about the art style nor music style nor we'd judge the programming framework or technique used. That made the game jam really, really awesome. After this jam, I think this is really how a game jam meant to be. I guess the guy in parallel team I've chatted with last year was having a similar awesome experience as I have this year. Perhaps I was just being extremely unlucky that I joined wrong teams for years that made me unable to enjoy the jam to the fullest!

Here, I'd like to take the chance to thanks all of the team members. Thank you very much for making this jam the best one in my life, ever! You guys are awesome. And here's a list of the team members:

  • Jintii - The 2D artist. A local people.
  • Kirill - The 3D artist. Apparently he also did a bit of programming. One of the two "random tourists".
  • Sneha - The main programmer. One of the two "random tourists".
  • (me - The music composer. Also did a bit of programming)

You can find the website of Kirill and Sneha here on, which contains a lot of awesome web-based projects! Most of their projects are utilizing WebGL. Even the playable of this game jam is hosted on this site. Do check out their website!

Also, do follow @_jintii on twitter! She's real good at drawing 2D arts, especially in anime art style! nya~ :3

What Went Well

  • Joined an amazing team.
  • Composed my first piece of music that's using both major and minor scale.
  • Skills of every team members were well-utilized.

What Went Wrong

What Went Wrong: Me no Speak English

As of the time of writing, despite that I can write English pretty well, my spoken English is only conversational. I'm very well aware of this problem since forever ago. And those random tourists in the team I joined couldn't speak Cantonese. I had no choice but to speak English! >_<

My spoken English is good enough for project communication, not smoothly, tho. Anyway, I'm glad that I started watching anime daily in English dub since about a year ago (I watched it in sub before that). My spoken English had went from almost-non-working to semi-working. But I still need to further up it somehow. That'll take quite a bit of time. Oh well, let's wait and see.

What Went Wrong: Electronic Waste Disaster!

Uh oh. So what about the game console...? Now I've got 5 units of assembled game consoles and three ST-Link programmers laying around:

A photo showing 5 game consoles with 3 ST-Link programmers

(Yes, we've now got PCB for the game console since like a few months ago. I still haven't got the time to blog about this update)

Oh well. Now I've got a problem. What to do with all these game consoles?

I guess I'll save two units and a programmer for myself. And I promised to send a unit with a programmer to someone in India. That'd get rid of 3 units and a couple of ST-Link programmers.

And I've still got two units and a programmer to go. I don't know. Perhaps I could do a giveaway. Maybe I could give them to Ludum Dare participants so that they can make games with this game console.

In fact, thanks to the judges of the sponsors appreciating the art style, each of our team members had managed to obtain an extra unit of electronic waste. It's a Google Home Mini. I think the artists (Jintii and Kirill) deserve the most credit for this one. And the main programmer (Sneha) also deserves quite a bit of credit because she made the game functional. And I, uhm, I just got the Google Home Mini anyway. xD I'm pretty sure that this thingie would still get awarded if they were using random music found in the internet instead of using mine. :P

At least I have some idea on how to handle the game console units. As for the Google Home Mini, it really beats me. I thought about selling it. But it seems that it's only worth like $30~40. It makes this option not very attractive. It isn't very useful to me either. I've absolutely have no idea on what to do with it at all. Oh well, I guess that's "what home means to me". It's an electronic junkyard. :/

Note to Future Self

  • Never join a team that has a project manager or team leader or quality control guy. It destroys the whole game jam experience!!
  • Be open-minded. Don't join with an existing idea (e.g. using an obscure game console). It ruins the fun.
  • Try out other jam sites! The Macau one is a good start. Well, I have been saying that for 3 years. And I never did that. :P

Note to Idea People or Quality Control People

Please do not join game jams just to criticize works of other team members. We aren't paid to work on the game. If you intend to join a jam and do that to us, I guess you better not to join or you'll be hated. Don't get me wrong, your talent could be much better utilized in corporate world. Your skill could be used for making a lot of money for the company that you're working for. But if you don't have any technical skill and nitpick stuffs that other team members come up with, frankly, game jam really isn't for you.

mi pana e kalama musi "mi ken ala moli e pipi" tawa jan ali | Release Announcement of Toki Pona Song "Futile Attempt of Killing Mosquito"

toki! ni li nimi mute mi pi nanpa wan pi toki pona lon lipu mi. tenpo suno ni la mi pana e kalama musi "mi ken ala moli e pipi" tawa jan ali a! tenpo suno luka tu wan la mi pali e kalama musi e sitelen tawa. tenpo pi mute wan la mi pali e sitelen tawa a!

tenpo pini pi tenpo sike ni la mi pali e kalama musi mute tan tenpo "Global Game Jam 2018". kalama musi wan pi ona mute li pona mute tawa mi. mi pona e kalama musi ni li pali e sitelen tawa pi kalama musi ni li pana e sitelen tawa ni tawa jan ali.

tenpo pini la mi pali e kalama musi. taso mi pana ala e ijo ni tawa jan ali. jan jo ala e ijo ni la ona li ken ala ante e kalama musi.

tenpo ni la mi pana e ijo ni pi kalama musi tawa jan ali a! sina ken ante e kalama musi ni.

Hey guys! Today I'm releasing a toki pona song "Futile Attempt of Killing Mosquito" along with an animation. I've spent 8 days and nights on this piece of music and its animation! It's also my first serious animation project in my life!

This music came from Global Game Jam 2018. I decided to be a musical guy for the event. So I've made quite a few pieces of music as a practice. That's because we're required to get the work done within 48 hours in the event. So I have to get familiar with the tools. A few months after the event, I found that I love one of those musical segment particularly. Then I elaborate this part and enhance it and I've made an animation for it. And here we have this musical animation.

Unlike my previous music, this time I'm providing source files of music publicly and direct download link to a few variants of its animation. That makes remixing and editing the music and animation much easier compared with my previous works!

sitelen tawa lon lipu Jutu | Animation on Youtube

o lukin e sitelen tawa ni pi kalama musi lon lipu Jutu!

Check out this musical animation on Youtube!

kalama musi lon lipu "SoundCloud" | Music on SoundCloud

[o kute e ni! | Click here to listen to it]

ante pi sitelen tawa en ante pi kalama musi | Derived Works of this Project

sina ante e sitelen tawa e kalama musi la o toki e mi. ona li pona la mi wile pana e lupa pi pali sina lon lipu ni a!

If you distribute a remix of any resources from this project, feel free to inform me. If it's a good one I'd be happy to put up a link to your work right in this blogpost!

sina wile ante e sitelen tawa e kalama musi e kalama uta pi kalama musi la o kepeken e ni! | Resources for Remix, Vocal Swap and Other Modifications

lipu lawa pi "CC BY 4.0" li lawa e sina la sina ken kama jo e ijo lon sewi lipu.

License of the resources above: CC BY 4.0. Please attribute to this blog post or If you do not want to do the attribution, please contact me and let me know what you're going to use these resource for. It's very likely that I'll grant you attribution exemption.

o ante e kalama uta! | Possible Modification with the Resources Above: Vocal Swap

sina wile ante e kalama uta la o kepeken e ijo "kalama musi" anu "kalama musi pi kalama uta". sina pini kalama uta la o kama jo e ijo "kalama musi weka kalama uta" kepeken ilo sona kalama. ilo sona kalama li ilo "Audacity" anu ijo ante. ijo "kalama musi weka kalama uta" en kalama uta sina li kalama musi pi kalama uta sina.

sina ken kalama uta e nimi mute pi kalama musi ni kepeken toki ante a!

If you want to do vocal swap, first, download the resource "Music" or "Vocal Assist". While playing any of these, sing along and record what you're singing. Then download "Instrumental Music" and align your recording to the Instrumental Music track with software like Audacity. Then you've got your voice into this piece of music.

With vocal swap, you can even sing this song in another language!

o ante e nimi toki! | Possible Modification with the Resources Above: Modifying Subtitles

sina wile ante e nimi toki la sina ken kama jo e ijo "sitelen tawa weka nimi Inli" e ijo "nimi pi toki Inli pi sitelen tawa". sina pini ante e ijo "nimi pi toki Inli pi sitelen tawa" kepeken ilo "Aegisub" la sina ken pali e sitelen tawa sin kepeken e ilo "FFMPEG" anu ilo ante. sina jo e sitelen tawa pi nimi pi toki ante a!

sina pana e ijo tan "Aegisub" tawa sitelen tawa lon Jutu la jan ali li ken lukin e nimi pi toki sina a!

If you want to modify the subtitles of the vid, download the resource "Animation without English Subtitles" and "SubStation Alpha English subtitles". Modify the resource "SubStation Alpha English subtitles" with software like Aegisub. With FFMPEG, you can combine the subtitles and the video. Then you get a video with subtitles in another language.

If you provide that subtitles file to the video hosted on Youtube above, other users can view your subtitles.

o ante e kalama musi! | Possible Modification with the Resources Above: Remixing the Music

nasin nanpa wan li ni: sina wile kepeken e ilo "LMMS". o kama jo e ijo "ijo pi kalama musi pi ilo "LMMS"". sina pini lukin e nimi mute lon ona la o kama jo e "kalama uta". tenpo ni la sina ken ante e kalama musi ni.

nasin nanpa tu li ni: sina kama jo e ijo "kalama musi" e ijo "kalama musi weka kalama uta" e ijo "kalama musi pi kalama uta". sina namako e kalama musi ni kepeken ilo sona kalama.

There're two ways to do remix. The first way is to use LMMS to remix the music. Download the resource "LMMS Music Project Source File". Follow the instruction in the file and download "Vocal (for LMMS)". Then you can modify the music right inside LMMS.

Another way is to use other audio tools. After downloading the resources "Music", "Instrumental Music" and "Vocal", you can do operation on the audio to remix it. For example, one can add some drum and stuffs to it, or add some effects to it like adding filters or reverb effect or pitch change or something like that. Just do whatever you want with them!

nimi mute pi kalama musi ni li toki seme? | What's the Language of the Lyrics of this Song?

nimi mute pi kalama musi ni li toki pona. :P

It's Toki Pona. It's a minimalist, constructed language invented by jan Sonja. The entire language is made of 123 words! It's rather easy to get fluent on it. I learned this language like two or three months ago. It took me like a month to learn it.

Long time ago I've attempted learning another constructed language Esperanto. I didn't have much success. Mainly because it really takes a bit of time to learn those vocabularies. I had to look up the dictionary from time to time. But Toki Pona's different. Once I learn all those 123 words, it isn't that difficult to understand any Toki Pona text and conversations. Even if I don't completely understand it, at least I'd have an idea on what it's about because I understand every single word. It's just that I don't understand the combination of words.

If you've nothing to do and interested in learning a useless language, Toki Pona is the language to go! Toki Pona community does exist. It's a bit small, tho. Still, it's rather fun to chat in a language that others couldn't understand. That's how do you talk shit about others without drawing any unwanted attention! :P

jan Sate li pali e sitelen tawa ni tan nasin seme? | Behind the Scenes

nimi mute li pona lili. sitelen lukin li pona mute. o lukin e sitelen ni:

A image's worth thousands of words. Take a look on this pic for an overview of how this vid were made:

An image showing the workflow of using the software for the creation of the animation

mi kepeken e ilo mute a! mi wile ala toki e ilo ali. mi toki e musi ona.

I'll not go thru all of the software above. I'll just cover the interesting parts.

kamala musi | Music

mi pali e kalama lili kepeken e ilo "Palette MCT". mi wile kepeken e ilo "Wine" lon ilo "Linux" tan ni: ilo "Linux" li ken ala kepeken e ilo "Palette MCT".

I made the melody and chord with Palette MCT. It's a great free tool for doing chord progression and designing melody. Since I lack knowledge on music theory about chord and stuffs, this tool is very helpful to me. Previously I did chord progression by trial and error. I adjusts each note tediously until I find the one that sounds right. With this software, it helps me to filter out those inappropriate chord immediately. Then I can focus on the one that sounds good.

Unfortunately, it doesn't support linux. I had to run it on wine. And it's the only non-FOSS tool I've used for this project.

Screenshot of part of the music composition software Palette MCT

As you see, there're those musical notes. The pink notes are non-chord notes. The black ones are the chord ones. And the colored rectangles with letters and numbers are the chord chosen for the measure.

This part was done before Global Game Jam 2018. Once again, this music is a enhancement of a piece of music made during my practice for the jam. :P

sitelen tawa | Animation

mi pali e sitelen kepeken ilo "Inkscape". ilo "Inkscape" pana e sitelen, tawa ilo "Synfig". mi pali e sitelen tawa kepeken e ilo "Synfig". mi kama sona e ilo ni kepeken tenpo suno wan kepeken sitelen tawa ni: [sitelen tawa "How to create animation in Synfig (3rd edition)"]. ona li pona mute.

I made the graphic with Inkscape. Then it's imported to Synfig and turned into animation. I learned its basic within a day using this video course: [How to create animation in Synfig (3rd edition)]. Synfig itself is free. But the video course isn't. Still, it's very affordable. If you're interested in learning it and cannot afford it, I'd be happy to buy a copy for you.

Screenshot of the animation software Synfig

ilo "Synfig" li pona. taso tenpo mute la mi pali e sitelen tawa kepeken ona. mi pini pali la ona li pali e sitelen tawa kepeken tenpo mute mute.

Synfig is a great piece of FOSS animation tool. It's easy to use. But it's rather time consuming to make animation with it. After making the animation, it also takes quite a bit of time to render, especially for video that uses the "Curve Warp Layer". It takes an hour and half to render an animation with like 500 frames on my Bay Trail Pentium laptop. The Curve Warp Layer was used to make the swinging arm animation in our video.

tenpo kama la seme li kama? | What's next?

mi pini pali e sitelen tawa ni la mi pali e ilo sona musi.

pali pi sitelen tawa li pona tawa mi. pali ni li musi. taso mi pali e ona kepeken tenpo mute mute. mi jo e tenpo sin la mi wile pali sitelen tawa sin.

The completion of this video marks the end of the break of my Portable Game Console Project. I'll get back to that project soon.

I enjoyed making this animation. The catch is that it takes far too much time to make one. I'll make another one in the future if I have the time.

Song Release: Axial Inclination

Jan. 1, 2018, 12:58 p.m. Behind the Scenes Music Product Release

Start your new year with the song that I've just released! Announcing Axial Inclination, the first English song that I've ever produced! This song is released under CC BY-NC 4.0 license. The source files of the music is available at the end of this blogpost.

Behind the Scenes

Just like the last song, I made this alone. The music were made with LMMS. The workflow of making this song is a bit different from the last one. This time I use diffient harmonization over different part of the song so that it sounds less dull. I'd also carefully mixed the instrument tracks to add some dynamics to that. Hopefully it makes the song sounds better than the previous one. :)

Here's a screenshot during the production of the song:

Screenshot during the production of the song

In addition to that, I've modified espeak-ng, a text-to-speech engine, for generating the vocal, which is later mixed into the song using LMMS. It is reported that the lyrics sung by this vocal is difficult to be understood. Nevertheless, it's still awesome to have an FOSS vocal synth.

Here's a demonstration of vocal mod of espeak-ng with the song Happy Birthday: Source File | Generated vocal (remixed a bit with LMMS)

I've been busy lately. I'll release my changes of espeak-ng when I got time. This espeak-ng vocal thingie deserves a separate blogpost which will be available later this year. :)

Source Files

CC BY-NC 4.0 license grants you permission to redistribute and modify this music for non-commercial purpose, provided that you give credit to "". If you do not wish to attribute to, or you'd like to use it for commercial purpose, please contact me with the email button on this website. Let me know what you'll be using it for. It's highly likely that I'll grant you the permission for using this music.

Source files of Axial Inclination (LMMS, vocal and stuffs)

出歌: 呢首歌嘅歌詞好奇怪 | Song Release: The Lyrics of This Song are Weird(Nisaugo ge Gotsi hou Keigwai)

呢首係我第一首公開發放嘅歌, 歌名係"呢首歌嘅歌詞好奇怪". 首歌係關於呢首歌同埋佢嘅歌詞有幾咁唔掂嘅.

Behold my first song ever released publicly: "The Lyrics of This Song are Weird". This song is about the suckiness of the song and its lyrics.


Full lyrics are available here!

首歌係我自己一個人整嘅(包括把聲同段片). 整左超過一個月. 如果你鐘意嘅話, 麻煩幫段片俾個like, subscribe個Youtube channel同埋share下俾你D friend. 如果呢首歌嘅反應良好, 我響未來將會整多D類似嘅歌. 多謝支持! :)

I made the song (including the vocal and the video) on my own. It took me more than a month to produce it. If you enjoyed the song, please give the video a like, subscribe to my Youtube channel and share it with others. If the reception of this song is good, I'll spend more time to compose similar songs in the future. Thank you very much! :)

我原本係為左整game而學整音樂嘅. 直至到幾年前, 我大概每一年就整一首廣東話歌. 呢首係我整嘅第三首歌. 之前果兩首太差, 所以我冇放到出來. 呢首我覺得唔算好好, 但係都算係咁啦. 所以我就決定放出來喇.

I learned music composition for game development. Since a few years ago, I compose Cantonese songs approximately once a year. This song is the third song that I've made. I didn't release the previous two songs because the quality were too bad. This one isn't good. It isn't that bad either. That's why I decided to release it.

幕後製作 | Behind the Scenes

呢個project總共用左8個軟件. 包括LMMS, Audacity, ProjectM, SimpleScreenRecorder, Inkscape, Spriter Pro, Aegisub同FFmpeg. 除左Spriter Pro之外, 其他都係免費嘅開源的軟件.

In total, 8 software applications were used for this project. They are LMMS, Audacity, ProjectM, SimpleScreenRecorder, Inkscape, Spriter Pro, Aegisub and FFmpeg. Except Spriter Pro, all of them are FOSS software.

音樂製作 | Music Production

首歌係用LMMS整嘅. LMMS係一個俾你由零開始嘅整音樂嘅軟件. 幾年前, 我曾經幫過嘅佢地手, 開發LMMS呢個軟件. 而把聲呢, 係用Audacity錄嘅. 把聲經過處理.

This music was composed with LMMS. It's a music composition software designed for making music from scratch. I had briefly contributed to its development a few years ago. The voice was recorded and processed using Audacity. Some audio engineering was performed for the vocal track.


The procedure of composing this song is shown below:

  1. 作一段melody | Compose a piece melody
  2. 作個chord同arpeggio來迎合個melody | Compose the chord and the arpeggio for the melody
  3. 用同一個chord同arpeggio, 作多幾段melody | Using the same chord and the arpeggio, make several more pieces of melodies
  4. 作多幾個差唔多嘅melody, chord同arpeggio | Make a few variants of the melody, chord and arpeggio tracks (e.g. change the beat or the instrument used)
  5. 作幾段beat | Compose several pieces of beats
  6. 排好D melody, chord, arpeggio同beat | Put the melodies, chords, arpeggios and beats in sequence
  7. 填詞 | Write the lyrics
  8. 錄音, 之後處理 | Record the vocal. Then audio engineer it
  9. 執頭執尾執靚佢 | Remaster the entire song (e.g. reverb, turning mix volume, attaching other effects, etc.)

我無正式學過作曲. 如果我用錯D專有名詞嘅話, 麻煩同我講聲. 我會更正. 另外, 以上步驟唔係唯一嘅作曲嘅方法. 以前我都用過其他方法作曲. 呢D步驟只係想解釋返我點整呢首出來嘅姐.

I haven't formally learned music composition. If I have used the wordings above incorrectly, do tell me. I will fix them. Please notice that it is not the universal solution of music production. I have tried out other approaches in my other songs. The steps above is just what I did for making this specific song.


Here's a screenshot of the song being edited in LMMS:

LMMS screenshot

作廣東話歌同其他語言嘅歌有一個好大嘅分別. 就係要啱音. 我地有成6個音, 要對返個melody其實都有D難度. 仲要整到個歌詞嘅意思都要啱, 難上加難. 所以我作作下就卡死左喇!

Since Cantonese is a tonal language, I have to match the pitch of the melody notes with the tone of the Cantonese characters. Therefore, it's very tough to compose a Cantonese song as it's difficult to find the right word that has both the correct tone and the correct meaning. I was stuck in the midway while I was writing the lyrics.

跟住我用Python整左個廣東話填詞對音工具. 我搵到三個中文詞語嘅database. 配合埋粵語審音配詞字庫嘅聲調嘅資料(因為廣東話嘅聲調一直有變, 我自己再人手改左個審音字庫嘅部分聲調). 有左呢個工具, 我只要打低個音, 就可以搵晒D啱音嘅詞語.

Therefore, I had developed a tool to do this for me. The tool was written in Python. By using three Chinese word databases that I found on the internet, combined with the tone of the word suggested by Chinese Character Database: With Word-formations (which I had further modified manually because some of the tones were changed in the modern Cantonese we're using today), a list of words with matching tones is generated:

Screenshot of the Tones to Word Tool

由上面嘅cap圖可以見到, 呢個工具可以列出個database嘅啱音嘅字(但係有小量錯誤). 例如我打240, 就可以搵到同"240"同音嘅字. 包括"亂晒籠, 垃圾蟲, 定晒形, 未夠喉, 滑鐵廬, 落晒形, 鼻涕蟲".

As shown on the screenshot above, the tool lists out all matching words that it found (with some minor errors). For example, if I type "240" (二四零), the first character of the word has to match the tone of 二, the second character must match 四, and the third character must match 零. The filtered result of the words is displayed, which includes "亂晒籠, 垃圾蟲, 定晒形, 未夠喉, 滑鐵廬, 落晒形, 鼻涕蟲" in the Chinese word database of Cantonese.

個工具仲可以俾你揀database. 目前個工具有廣東話, 大陸普通話, 同埋台灣國語嘅詞語嘅database. 雖然唔係所有歌詞都係用呢個工具作嘅, 但係呢個工具用來做brainstorming同埋搵D啱音嘅四字成語真係無得輸. 我以後應該都會繼續用呢個工具來填詞.

Database selection is also supported. The current version of this tool supports Cantonese, Chinese and Taiwan-style Chinese. This tool helped a lot while I was writing the lyrics for this song. Although I did not exclusively use this tool for writing all of the lyrics, it was very useful for brainstorming and finding Four-characters Chinese Idioms that match the tone that I want. I will probably continue to use this tool for my future songs.

不過好可惜, 我唔清楚部分database嘅使用條款. 所以我係唔可以放呢個工具出來嘅. 同大家講返聲唔好意思先.

Unfortunately, due to the unknown license of some Chinese words databases, I could not release this tool publicly. I'm sorry about that.

填完詞就用Audacity錄音同改音. 下面幅圖係我改音嘅過程. 只要複製highlight左果part就可以延長隻字個音長. Delete左果part就可以縮短隻字個音長. 呢個步驟不停重複, 直至做到把聲同首歌同步為止.

After the voice was recorded according to the lyrics written, Audacity were used for audio engineering. The image below shows how did I change the length of the Cantonese character that I had sung. By duplicating the highlighted part, the duration of that character is extended. Conversely, by deleting that part, the duration is reduced. This process was repeated for synchronizing my voice with the melody.

Audacity Screenshot

之後Audacity整出來嘅track會放返入LMMS裏面. 最後首歌係用LMMS generate出來嘅.

After that, the vocal track generated by Audacity was imported into the LMMS project. Finally, the song was generated by LMMS.

影片製作 | Video Production


After the completion of the song itself, a video for this song was produced.

我用左ProjectM來做Audio Visualization. ProjectM係一個實時嘅Audio Visualization軟件. 我用SimpleScreenRecorder來錄低作個audio visualization. 佢可以直接錄低任何program嘅OpenGL影像. 比起響軟件層面錄更有效率, 唔會疾下疾下.

The audio visualizer software used in the video used was ProjectM. It is a real time audio visualizer. The visualization were recorded using SimpleScreenRecorder, which supports recording OpenGL output of any program. Compared with software-based recording method, recording the OpenGL output is much more efficient. Therefore, the output video is almost lag-free.

個招牌就用左Inkscape整. 跟住用Spriter Pro將個招牌變成動畫. 而字幕係用Aegisub整嘅. 跟住用Inkscape畫多一幅圖, 叫人subscribe我個channel. 最後用FFmpeg將LMMS整嘅歌, Audio Visualization, 字幕同個招牌冚把爛合埋一齊. 搞掂!

The image of the banner was created using Inkscape. After that, it was animated using Spriter Pro. Image sequences of the animation were generated. The subtitles editor used for the video of this project was Aegisub. With this software, a subtitles file were generated. An extra image were drawn with Inkscape for the end scene that asks the viewer to subscribe my channel. Finally, the audio outputted by LMMS, the visualization of the audio, the banner image sequence and the subtitles were combined by using FFmpeg. That's it!

希望你會鐘意啦! | Hope you enjoyed it!

我係作曲新手. 呢首個我花左好多工夫, 整左成超過一個月. 如果你鐘意嘅話, 麻煩幫忙share一下. 如果你地鐘意, 我日後會整多D呢類嘅歌. 多謝支持!

I'm rather new in song production. More than a month of work was spent on producing this song. If you enjoyed it, please take a moment to share it. Similar songs will be produced if the reception of this one is good. Thank you very much! :)

除此之外, 我都歡迎未來合作. 如果你有興趣, 可以send封email俾我架(email見網頁頂部)!

In addition, future collaboration is welcomed. Feel free to drop me a line by using the email address on this website.

Cellphone Diver BGM

Jan. 17, 2016, 10:52 a.m. Cellphone Diver Music

First blogpost about music!

I've just composed and uploaded the background music for the game Cellphone Diver.

The music is released under CC-BY 3.0. Attribution to

The music is made with LMMS. Contact me if you want the .mmpz file.