FBX was my senior design project at GW.
Actually, I should rephrase that. My original senior design project was a cross-platform clone of Propellerheads’ Reason. However, there were two major obstacles that came up during its creation:
- I actually have no formal education in digital signal processing (DSP), MIDI, or other computer audio concepts
- D-baggery, having to move halfway through the year, and other general unpleasantness
So, close to the deadline, I had to scrap my project and write a completely new program in a few weeks. This one seemed to be the one I could pull off – I already had a certain degree of audio framework created from the previous project that I could reuse.
So I set out to write FBX, a cross-platform Foobar2000 clone in C++. It uses wxWidgets for the GUI. Its featureset is too weak to be usable on a daily basis, but it’s actually kind of impressive considering it was written in 2 weeks.
It has abstractions to support a variety of audio output drivers for different platforms, multiple audio input file formats, and multiple playlist formats. The program can make use of the libmagic library (used in the ‘file’ command to determine a file type) to choose the appropriate decoder plugin for each file. Unfortunately, since I was working on a deadline, I only had time to do one of everything. It only works on one platform (Linux), it only has one audio output driver (libao), only one input file format (Ogg Vorbis), and only one playlist format (m3u).
That said, the gui is usable – it looks like Foobar2000, allows tabbed draggable playlists, has all the basic playback controls (play/pause/stop/prev/next), allows choosing between playing straight through the playlist, shuffle, repeat one, and repeat all, and can stop after the current song. Songs can be reordered, added to playlists, and removed from playlists. Playlists can be loaded and saved, or created from scratch. There are keyboard accelerators for playback functions. There is a seek bar that shows current progress and can be dragged to change song position.
The audio playback engine will split off into a separate thread to keep the gui responsive while the audio plays.
Since this was written for a senior design course that requires documentation, this is the first program I’ve released that includes a full README file! I recommend reading it for install instructions, required dependencies, explanation of usage, things you can set in the config file, and troubleshooting help.
I didn’t have time to do large-scale testing, so it could have bugs. There is a possibility of audio skipping (the engine thread isn’t really optimized to buffer data at all or anything) – getting something optimized for all sound cards is actually kind of difficult, and I only had one or two to test with.
So again, I don’t recommend it for daily use, but if you want to give it a shot, here it is.
- 20070425 – 0.0.1
- Initial release