I began the month with the remainder of the namespace cleanups. Should be all fine now. The ktorrent guy was not giving in. Well that's their way of handling it then.
I have registered buzztard with the translation project. All strings are frozen for 0.4. Now of course I look for translators who are willing to help.
During testing, I discovered that for some bpm and tick resolutions, notes where swallowed. This was due to different rounding behaviour in the sequencer and the plugins. This is now fixed. As a side effect, I can now render in any sampling rate. That will help my mameo version :)
Out of some irc conversation, I gave implementing synced meters a go. Until so far level and spectrum meters in buzztard were ahead of time. The reason is that gstreamer tells me about the values once they are computed, but that's not when the actual data segment gets played. Luckily the message has a timestamp. So all it needs is to sync drawing with the audio sink. MikeS gave me some good pointers on irc. It wasn't that straight forward. I found and fixed a bug in level meter plugin so that it now puts useful timestamps on messages when it play loops. It works really great now.
gtk_widget_grab_focus() is a nasty function. It asserts when the widget is not mapped/realized and steals the focus in any case. This is problematic if you have tabs and update widgets when things changed. I now have a wrapper added that does the extra checks. Wonder if that would be a good change for upstream.
I did lot of testing with real buzz songs and machines. I have now about 80 original plugins in use. Real testing always leads to some good fixes :) We now add an empty pattern by default when adding new source machines (like buzz did). I also noticed that bpm/tpb information was not loaded from buzz songs. This is now fixed (also master volume was missing). After that I spotted that most bpm tempi did not work well. Now timing precision is much better.
project namespaces
A big recommendation to everyone. Pick a decent prefix for your project. I've been a bit blue eyed and had chosen 'bt'. Part of my package is a core library called libbtcore. Now unfortunately ktorrent did the same mistake and have a libbtcore (bt stands for bittorrent there). As neither of them are really general purpose they should be uniquely named. I analyzed all files I install and went thought the great pains of renaming everything - libs, binaries, docs includes, pkg-config files, desktop files and so on. Hope I never have to do that ever again. I also filed a bug for ktorrent so that they can fix it before its causing problems. Interesting how they dealt with the report - "I was first with libbtcore - RESOLVED AS WONTFIX". Interestingly I was 1.5 years earlier, but that wasn't the point at all.
Wow, July went fast. I spend most time with my family. Still a few news from the development front. I worked mostly on wavetable view. It now features more proper sample playback. I wrote a memory audio source for GStreamer. It supports forward and backward playback. This is needed for e.g. ping-pong loops. Also now changing things takes effect while a sample plays. Our waveform widget also shows a playback pointer and loop markers. I also got around to unify and merge duplicated note conversion code. You know, when you've copied something the 3rd time, its time to refactor.
Earlier this month I refactored the song-io plugin API a bit. It has now more metadata. This helps the UI to setup file and recent filters. Unfortunately I had to find out that the mime-type detection in glib was broken. Its at least fixed in trunk. No idea since when it actually worked. As a workaround I am now adding "*.xml" to the filters.
Some very visible changes this month - svg machine canvas icons. For that I needed to add better icon theme support. All icons are now themeable and colors are matched with the theme. Machines now have tiny level-meters embedded in the icon.
I also found a solution for slow start of playback in complexer songs. Data- format-negotiation is not deterministic in all cyclic gstreamer graphs. Proposed patches are attached to Bug 540645.
Finally I got around implementing support for a zip based song format. This can contain binaries (like the samples being used). The loader is based on libgsf, which turned out to be a pleasant experience.
I also added filters to the load and save file-choosers and to the recent-chooser in the new recent menu. Still fighting with the filter not doing a precise detection.
Next on my todo list is refactoring the song io plugin api a bit. Right now there is too much hard-coded data (like mime-types, format names, extensions).
In the previous month I worked further on sample support. Samples are played now from memory and can be transposed. Also the buzz song import plugin got sample support added. This means I can load now a big share of my existing songs. While testing those I could fix some more issues with plugin initialisation and those song sound like in original buzz now. Yah, we're getting there.
The current version also brings some eye-candy, Marc (aka deloun) drew us great icons in tango style. I reworked the code to load all icons via theme mechanism. I also allocate other color based on chosen theme now. One thing left for June is to start using the svg on the canvas.
gtk-doc
Current version in svn should give much better warning messages. They are now gcc style and tell you filename and line. That should help to jump to the right place from your favourite editor. Now go and fix your docs :)
As can be seen on our roadmap sample support is scheduled for 0.4. As this is the major feature, we started working on it. I have to say that building buzztard on top of GStreamer was definitely the right thing to do. We can now load whatever GStreamer can handle. FSM did a nice cairo-based waveform widget. Right now I am working on the code that allows plugins to access the wavetable. It will hopefully be ready real soon.
Besides that I've started to restructure the gst-buzztard package a bit further. I also plan to merge the buzz wrapper plugin into it. The aim is to reduce the number of packages that one needs to build.
I've released buzztard-0.3.1 with the fixes. A few more developments to mention: Waffel started a demo for the zip loader based on libgsf, Deloun made great svg designs for the machine view canvas and the tabs and Herzi send me a patch to add native scrolling in the pattern editor. Now back to new features, yah!
The
buzztard team has released version 0.3.0 "a tale of ice and
darkness" of its buzz-alike music composer. All modules got
extensive improvements over the last release from almost a
year ago. It is usable now and fun to play with. Give it a
try and report
bugs.
bml : Support for native machines. Better emulation. Can be build on 64bit x86.
bsl : Support for pre 1.2 buzz songs. Handle volume and panorama on wires. Several bug fixes.
buzztard : Improvements in all areas. We now have native buzzmachine support and better compatibility. The buzztard editor got an own pattern editor widget. The ui got lots of keyboard commands. We have settings for default directories used. The ui has dialogs for recording mix-downs and also single tracks.
gst-buzztard : Improvements on the preset interface. Support for sparse streams (GAP flag).
gstbml : Sparse stream handling. Better compatibility. Bug fixes.
The Linux Audio Conference 2008 was nice once again. Good talks, interesting know-how exchange and of course opportunities for testing and hacking on buzztard.
I have improved the playback engine a bit. It now uses less additional latency. Still one get much lower latency by using jack, instead of pulse audio (currently experimenting to lower latency there too).
The pattern editor got better gtk+ theme support (especially on dark ones) and also tries to use the default monospace font and font-size to better match with the overall look of your desktop. I implemented blending value ranges and randomization of ranges. FSM implemented more keyboard shortcuts. I added value descriptions to the status bar where the plugin supports it.
Also the sequence editor got some todo-fixing. The sequence was never horizontally scrollable (adding columns would force the window to be wider). The M,S,B buttons are now color shaded when pressed to give better visual clues. Finally also the position unit switcher is functional (ticks/time) and the label navigator gets properly updated. Lots of small things I never got around until now
Level meters in sequence and analyzer windows are now more lively and precise. Having several analyzers open now also produces the expected results.
The buzz song importer got further fixes. It seems to load all of my songs just fine now.
Some improvements also on the buzz emulation side. More machines load and work. We have a nice testsuite with html reports now. I spotted some issues which will fix more machines. Will try to implement this next.
If nothing urgent comes up. I'll prepare the release in the coming days. Stay tuned.
We're heading for a release. There is a few more features that we'd like to finalize. Then its time for testing and this is were *you* can help. Featurewise buzztard improved nicely this month. I improved stereo support. We now have new look for the wires. They show animated volume levels and panorama positions. Both volume and panorama can be adjusted via popup-sliders.I like this a lot more that how it works in buzz. There it was a bit confusing in some cases (not clearly indicating which connections a panorama setting would affect). As an extra bonus, buzztard does stereo balance on stereo connections.
I also updated the buzz song importer to make use and correctly import panorama and volume. Now also the master-volume is mapped to the scale used in buzztard.
FSM worked on the pattern widget. It supports variable cursor stepping (going down several lines at once) and selection. I added column/group/all insert and delete actions.
Finally Waffel wrote a jhbuild module set for buzztard.
FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.
Keep up with the latest Advogato features by reading the Advogato status blog.
If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!