I am totally new to MIDI editing so I got into trouble here. To make things worse I made the game music using GarageBand which does not have MIDI export functionality.
So I am making this post as a way of helping people with similar problems and to help me in the future, in case I need to edit MIDI files again.
The steps I managed to accomplish were:
- Export a region from Garageband (loop)
- Find the AIF file exported
- Extract the MIDI from the AIF
- Install a sound font since my hardware has no MIDI support
- Install FluidSynth to use this sound font and emulate MIDI hardware
- Install Jack daemon to work with the MIDI editor
- Test everything
- Edit the MIDI files, and here I stopped 😉
Exporting the MIDI & Locating the .AIF
Here is a great link on how to do it. Basically you will have to find where the .AIF is in your home directory tree in MAC OSX. (Yeap it does not work on iOS, I had to save it on the cloud and then on a MAC load the project from the cloud).
Extracting the MIDI
On Windows I found this very nice and simple software to extract the MIDI inside the AIF file.
When I was searching for VLC support for MIDI I bumped into this awesome site. Later on when I needed a sound font I found out that already had it working! By the way Audacity on Linux is playing MIDI files too! That was unexpected but very welcome 😉
Steps 5, 6 and 7 above
This how to will explain everything necessary to achieve those last configuration steps.
I also installed this software to edit the MIDI files, but stopped right here. From now on it is a matter of practicing I guess. Since I am a total newbie on music I will go no further on this post 😉
So I had already made the music on iOS (iPad). Had to save it to the iCloud. Exported every little region as a loop on GarageBand OSX. Extracted the MIDI of each file and finally started editing the whole thing. In case you are wondering why so much trouble? Well, I am no music at all and GarageBand made it possible for me to create a simple music for the game and that is awesome already! 🙂
PS: All this stuff worked flawlessly on @ArchLinux Linux distribution. Give it a try 😉
Here are the three best time trials so far! The weekly ranking ends at 24h UTC (Greenwhich).
Come join us for free on Android, iOS, Facebook Gameroom, Windows, MAC and coming soon… Linux 🙂
Remember to tune the slot car. See how the third place did not tune the car and has much less speed than the two best cars!
Installed Arch Linux this weekend and Unity 3D just yesterday! I am very impressed with the results so far! Of course a lot of testing will be needed and a new beta version of SlotLeague Time Trials, for Linux this time 😉
Got a few problems so far, but they are very minor issues. Like the buttons with the arrows to slide left and right just have no arrows anymore… O.o
The upload time trial function (WWW class) has a minor behaviour difference. When no error happens the http://www.error property returns “” instead of null. I know… I should had used string.IsNullOrEmpty… but I did not… no donuts for me 😦
As I said, very minor issues, I would not even call them issues…. maybe a couple of little tiny glitches? 🙂
Thanks to “spacepluk (DoctorJellyface, fwalch, z3ntu)” the maintainers of the arch linux Unity 3D package, great job guys! awesome!
In case someone wants the link to the package, here it is:Unity3D Arch Linux
Just to remind the players that the games does require camera access on iOS and Android for the “create track feature”.
Just created this picture collage to show how does this feature work!
Play the game for free and have fun! (Click on the “Play” button on this page to download it for desktop)
Next version 1.1.2 will have a new server version as well. So I had to find a way of switching server versions without stopping the game availability for the players!
In the end it was quite an easy solution. New server listens on a new port number, so it is already running while the old server is still serving the data to the players. Both versions running together, each one on a different TCP port.
The new app version 1.1.2 will use the new TCP port, so the players will gradually update the app and switch the server without noticing any change.
There is a trick though. The version 1.1.1 already had a code to alert the user that it is necessary to update the game. So when the new server becomes the only running server the apps will start showing this message and requesting the user to update the game and thus start using the new TCP port.
So how does the old server knows when to alert the old apps to update the game? It is a node.js server so I only have to turn on a switch on the server code and restart the server, quite easy. Before doing that I will also copy all data from the old server into the new one and that is it!
This approach also makes it easier for Google and Apple reviewers to play the game, testing the new app version which already has a new server working. Otherwise they could reject the game for errors concerning the server version instead of the app version.
Just found out that [OptionalFieldAttribute] does not work on Mono, and therefore on Unity 😦
Actually a new field in a class should not throw any error messages on older applications using older versions of this class.
But unfortunately it does throw an error on Mono and there is no way of preventing that on the older applications 😦
Here some links about it:
How it should work
Nice info on how to handle optional fields
Another fellow having the same issue
and if you are still curios about it, BinaryFormatter.AssemblyFormat
The “smoothing” algorithm used in the image recognition now can help the game improve its car physics!
With a better interpretation of the hand drawn racing track, it is possible to generate an improved car physics such as the “rolling friction” on fast curves.
Basically it is the amount of speed reduced when the car takes the curve too fast, drifting a little. This makes the car loose speed which can be used to improve the pilot performance or it can make the car take the curve slower than it could be done.
That depends on the shape and length of the curve. Gotta use it wisely! 😉