Making Progress on First Proof of Concept
As mentioned in an earlier blog post, I have some ideas as far as making cross-platform audio applications. A couple of the first challenges are how to implement audio support and a user interface (UI) framework across multiple platforms with a smart design resulting in awesome code.
When I write things like this, even if I'm the only developer on the project, I always approach the task from a standpoint of creating libraries that a client developer might use. My goal is usually to create library interfaces that are clear, intuitive and clutter free of things like OS specifics and other implementation details that need not get in the way of the developer using the interface.
This first proof of concept will seem trivial to the end user, a simple sine wave player as shown in the screenshot below:
Audio playback is started by pressing the play icon on the right. A sine wave tone will start playing through the default audio device on the machine. The frequency of the sine wave tone being played back in realtime is controlled with the slider bar. I told you it was simple :) ...But hey, this is just an initial proof of concept.
Behind the scenes there's a lot going on to keep the UI library interface simple, easy-to-use and of course identical across all platforms. Same with the audio output interface. For the UI, I've put to practice the bridge pattern very similar to how it's described in the classic "Design Patterns" book. I'm really happy with how it's turned out so far. Something somewhat similar has been done with the audio output lib.
As shown in the screenshot, I have this fully working in Ubuntu. I have the audio output lib working on all three platforms (Linux, Mac and Windows) but still need to implement the UI portions for Mac and Windows. I hope to have this done shortly.
I also plan to package each in an installer. I have experience with Windows installers (mainly NSIS) but that was quite a while ago, so I'm interested to see what other options might exist now. I'm also very interested to learn how consumer level installation/packaging works in OSX and Linux as I've never had to do so on those platforms.
Once complete I'll be posting an update and make the software available from this site.