Top ! joins the Handmade Network !

Martin Fouilleul  —  2 months, 2 weeks ago [Edited 1 week later]
Hello everyone,

Top ! is now live on the Handmade Network. It's quite something to join such an amazing community !

Constructive feedback can be hard to get, and is one of the most valuable things a community like Handmade can offer to small team or solo developers. So I will regularly write blog posts about the development of Top ! to give an overview of its structure and design decisions, as well as occasional glimpses of its code, and most certainly, a lot of open questions. I hope you'll be interested in following the progress of Top ! and I'm really looking forward to reading your thoughts on it.

To get a better understanding of what Top ! actually is, you can already read this post on my website, which is an expanded version of the presentation I wrote for Top !'s homepage on HMN. You might also been interested in this one, which is a first (lightly) technical post, about the main dependency of Top !, why it's there and the reasons for which I'd like to get rid of it.


This month's goals :

As for the next step in Top !'s development, this month I'll be working on the save system. Currently the cuelist is saved as a text file were all items are described as a labeled chunk, with possibly nested chunks, ie :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	cue:
	{
		info:
		{
			uid:{0}
			type:{2}
			number:{4}
			name:{Intro}
			cueIn:{0}
		}
		state:
		{
			soundfile:{/path/to/Intro.wav}
			plugins:{}
		}
		matrix:
		{
			cue-0-channel-0-to-bus-0:
			{
				value:{1.000000}
				modulators:
				{
					mod:{14}
				}
			}
			cue-0-channel-0-to-bus-1:
			{
				value:{0.000000}
				modulators:{}
			}
		}
	}


Which describes an audio cue playing the audio file "/path/to/Intro.wav". This audio file is monophonic and is sent to two output busses, one send level being modulated by some mix cue whose ID is 14.

For now I'm okay with the text format even if it requires some parsing overhead, because it allows for easy editing/forging of save files for testing purposes. But one big drawback in the previous example is that paths to audio files are saved once for each cue referring to them, and the paths are absolute.

Of course we want to make them relative to the save file. Furthermore, I want to have a big "audiofiles" chunk where I store each path only once, so that I can refer to files by id in the cue chunks. Then, I would like to provide a mechanism to find and "relink" files that are found to be missing at their expected location, eg if some folder containing audio files has been moved, or were located on an external drive that has been removed, etc.
The same kind of thing happens for plug-ins bundles, which could be at different locations on different computers.
I would also like to have a way of automatically copying all the files used by a cuelist to the same folder and "relink" the file IDs to the copied version, in order to prepare to move the savefile and all the audio files to another machine.

Aside from that there's still a bunch of parameters that are not saved/restored yet, that I must integrate in the save system.

And if I have some spare time left (no guarantee !), I really want to improve the popup menus of my GUI system, which are pretty poor at the moment (there's no automatic placement above or under the popup menu box, and you can't scroll them, making some items inaccessible in very large menus).

That's it for now ! I hope you will enjoy Top ! and can't wait for your comments !

Martin
Log in to comment