SourceForge has been redesigned. Learn more.

Buzztrax Music Production Environment / News: Recent posts

buzztard project status 01/06/2009


May passed quickly. I was testing a lot and as usual this brings bugs to day-
light. I noticed one particular problem, that I still have to solve. Buzztard
songs are actually zip file containing the songs.XML file and references files
like samples. When the song is save the externals are copied from its original
location into the zip. First there is a chance that the file becomes unavailable
between loading it and saving the song (e.g. if the files where loaded some a
sample CD) and then of course if those songs are given to someone then the zip is
all there is. I see two ways to handle it - a) if the file is not available, save
the raw-pcm as a wave-file, b) when loading new files samples, copy these somewhere and keep the file open and when loading a song, copy this somewhere and
keep it open (somewhere = local file system). One thing I already have
implemented is save saving, that is rename the old file, save and in the case of
failure roll back.... read more

Posted by Stefan Sauer 2009-06-10

buzztard project status 01/05/2009


Lots of testing and small improvements again. Besides the usual valgind sessions
I tried the LLVM/Clang Static Analyzer [1]. There are some annoying warnings, but
lots of correct one too. Most of them were nothing major, but this is a good
tool to follow. I also got more feedback from the NetBSD packages and worked on
my Maemo port. This resulted in a couple of portability fixes and dependency
cleanups.... read more

Posted by Stefan Sauer 2009-05-10

buzztard project status 01/04/2009


We're heading for a 0.5 release! Most planned features are done and thus its
time for testing. I've added some more unit tests. Especially for the dynamic
editing, which now finally seems to work quite fine.

I added more keyboard shortcuts to support the workflow people might know from
buzz. There is one to start playback from cursor-position and several for cycling
through the comboboxes in pattern editor. I started to work on the play-notes
functionality in pattern editor too. One can play notes while editing if song is
playing already. Need to play the song in a idle-loop otherwise. Also need to
figure the horrible latency I get.... read more

Posted by Stefan Sauer 2009-04-08

buzztard project status 01/03/2009


Yay. LJ has a nice online article about buzztard [1]. While helping the author
to get the code up & running, I mad several improvments to the configure stuff
to make things more obvious, especially when installing not to /usr. I also
updated the instructions on the wiki [2] and waffel updated our jhbuild module-

The GStreamer buzzmachine plugin now supports an index.txt file in the search
path. This is used in buzz to categorize machines. The wrapper plugin adds the
categories to the GStreamer classification filed and buzztard-edit uses it to
build a structured menu. This helps makes the menu a bit more useful again. Same
stuff needed for ladspa (via rdf).... read more

Posted by Stefan Sauer 2009-03-08

buzztard project status 01/02/2009


Many not so visible code changes this month. Since last Autumn I have GObject
introspection enabled if available. So far it has not been that useful due to
some wrong use of the GObject in my code. That mostly fix now. Major thing was
to change all _new() function to just call g_object_new and utilize the
_constructed() and _constructor() vmethods in GObject. That wasn't so easy.
Buzztard uses a persistence mechanism [1] to serialize and deserialize objects.
It is implemented as an interface. So also this was needing a lot of changes to
allow construction from a data storage. Fortunately interfaces are tied to the
class, so one can have an interface method that acts as a factory. Main
remaining ugliness in the new code is there are some parameters coming from the
code and some from the file and its not straight forward to create an object
than - I will need to use g_object_newv(), but generating the GParameter array
is painful.... read more

Posted by Stefan Sauer 2009-02-07

buzztard project status 01/01/2009


This month I worked on a couple of small, mostly UI related things, while
drafting bigger plans. There where many TODOs in the code for small improvements
and now there are less. E.g. I now filter more internal GStreamer properties
from ui dialogs. I added some more things to the menus (hide/show statusbar,
toggle fullscreen). The sequence view got some fixes - some shortcuts where
overlapping, the label column now shows cursor and selection and finally the
cursor is clamped to now leave the editable area. I also started adding a debug
menu in --enable-debug configuration. The only command right now make a
GStreamer pipeline dump as a dot file, converts and shows it.... read more

Posted by Stefan Sauer 2009-01-17

buzztard project status 01/12/2008


Finally I have cut a 0.4 release for all buzztard packages [1]. I spend most
time before with maintenance tasks, such as i18n updates (we now have dutch and
dansk translations!).

I started with some features after the release. There are now some nice
gtk-theming improvements for the pattern and the sequence view (we have a custom
gtkrc now that extends the theme). Then the audio settings got ui for choosing
sampling rate and channels. This will be nice for arm based devices if the cpu
power is not enough for high quality as well for doing high sampling rates on
fast machines for max quality.... read more

Posted by Stefan Sauer 2008-12-04

buzztard project status 01/11/2008


Beginning of October I've been at the Boston Gnome summit and learning about the
GObject Introspection project [1]. The project will help to add language bindings
to libraries in a easy and consistent way. I added the stuff to buzztard libs and
it sort of works a bit already. Cool!

I was showing buzztard to some people at the summit and noticed that samples are
not always imported correctly from buzz songs. This is now fixed. I've tries all
my songs (~50) and it handles them fine for all now. Along with that, I
implemented some missing methods in the buzz emulation layer - sample playback
seems to be fully emulated now. ... read more

Posted by Stefan Sauer 2008-11-03

buzztard project status 01/10/2008


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 [1]. 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 :)... read more

Posted by Stefan Sauer 2008-10-03

buzztard project status 01/09/2008


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.... read more

Posted by Stefan Sauer 2008-09-08

buzztard project status 01/08/2008


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.... read more

Posted by Stefan Sauer 2008-08-10

buzztard project status 01/07/2008


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

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 [1].... read more

Posted by Stefan Sauer 2008-07-06

buzztard project status 01/06/2008


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.... read more

Posted by Stefan Sauer 2008-06-05

buzztard project status 01/05/2008


As can be seen on our roadmap [1] 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.... read more

Posted by Stefan Sauer 2008-05-10

buzztard project status 01/04/2008


After the release I demoed it some friends and obviously found some issues. Now I
spend the rest of the month tracking then. Its mostly ref-counts issues. Why are
the so nasty? Well unlike memory leaks, they are anonymous. Memory is allocated
once and should be paired by one free. The id of the resource is the memory
address. Now every ref should be paired by an unref, but all the refs and unrefs
share the same id (address of the object). So how to figure which ref is not
having the unref? Refdbg [1] can trace object and gather backtraces for
ref-count operations. So one has to go through the list one by one, remove pairs
and study whats left. Its not easy, but it works.
Now why is this so important. If the refcount never reaches 0, the object is not
disposed and occupies memory (until the application exits). Under valgrind it
would appear under reachable memory usually. For most apps it has no immediately
visible effect. For gstreamer app it has. In buzztard I do dynamic stuff with
pipelines, like adding and removing elements. If you get the ref-counting wrong.
The element is unlinked but not disposed. If the pipeline is set to PLAYING one
gets data flow errors. But then its not a gstreamer only problem. E.g. icon theme
pixbufs in gtk. If the are not unrefed, gtk cannot unload the theme. Means if
you try a bunch of themes, none of the is unloaded if even just one panel
applet has a ref-count issue. The sad thing is that the gnome libraries have
quite some ref-count leaks. I've started to track and fix them as its hard to
see something within all this noise [2][3].... read more

Posted by Stefan Sauer 2008-04-12

ANN: buzztard 0.3.0 "a tale of ice and darkness"

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.

Support for native machines. Better emulation. Can be build on 64bit x86.

Support for pre 1.2 buzz songs. Handle volume and panorama on wires. Several bug
fixes.... read more

Posted by Stefan Sauer 2008-03-27

buzztard project status 01/03/2008


The Linux Audio Conference 2008 was nice once again. Good talks, interesting
know-how exchange and of course opportunities for testing and hacking on

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.... read more

Posted by Stefan Sauer 2008-03-06

buzztard project status 02/12/2008


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.... read more

Posted by Stefan Sauer 2008-02-07

buzztard project status 01/12/2008


I guess tracker-style music editors have to live with the heritage of tabular
pattern input. Some feature rely heavily on it. FSM started with such a widget
and I integrated it into buzztard. One can still switch between the previous and
the new one by setting a define. The widget works quite nice already. The only
missing feature is native scrolling support. To add that to an own widget
requires an ugly hack. I can't figure why gtk does not use an interface for it.... read more

Posted by Stefan Sauer 2008-01-08

buzztard project status 01/12/2007


After porting some simpler machines last month, FSM and myself where looking at
infector. This already is a quite complex generator. Porting as such wasn't that
hard, but unfortunately it did not play. But with the sources at hand we could
figure out what the issues was and fix the problem. It was a generic problem in
the buzzmachine host emulation. This could potentially also make other machines
work. Note to myself - I need to re-test the blacklisted ones.
One outcome of the better machine compatibility is that some of the original
buzz song now plays with some extra manual help.... read more

Posted by Stefan Sauer 2007-12-03

buzztard project status 01/11/2007


Very good news for buzz lovers. Recently FSM joined #buzztard irc channel. He
gave us access to his buzzmachine sources and the okay to publish them under
LGPL. One thing that I had on my list for too long was to extend my
buzz-emulation layer to support natively built buzzmachines. Well now its in CVS,
A bml/gstbml rewrite to support native machines + initial 5 machines working.
Means approximately 900 to go. One thing that we still need to be able to port
some machines is a native implementation of buzz's dsplib. We will look into
that next and of course port more machines.... read more

Posted by Stefan Sauer 2007-11-10

buzztard project status 01/10/2007


Before its getting even later here is the monthly update. I worked a bit more
on the 'state persistence' - a song now tracks opened machine and analyser
windows. There are restored when loading the song. In continuation of previous
months efforts The machine view got some hot keys now too.

Now that lcov-1.6 is released, I've added a configure check for it and use the
new options. The new version does not need to be patched anymore to generate
coverage reports for user-space apps. While testing the overage, I also added a
few more tests to increase it.... read more

Posted by Stefan Sauer 2007-10-12

buzztard project status 01/09/2007


The first big change this month came from berzerka. He wrote midi support for
the interaction controller subsystem. That required some extension of the
classes, specifically adding a learn mechanism. That is you click a machine
property, select learn, touch the midi-controller and done.

One important requirement for a power tool, is having keyboard shortcuts for
almost everything. For the main menu its easy to do so in gtk+. But then we
have context menus and toolbars. So I read API docs and code, wrote test
programs and files bugs and patches [1][2]. The fix for [1] is in svn now, but
the patch in [2] needs review, anyone? Generally the keyboard accelerator
functionality needs some updating, seems that this has been mostly taken from
gtk-1. At least I could not figure out how to e,g. define two accelerator to
e.g. select previous/next item in a combo on a toolbar. Sure most apps won't
need this, but for productivity tools this is quite mandatory. Finally I wonder
what is the policy for the media-keys and how to use them. My gdkkeysyms.h
include does not have symbolic names for them.... read more

Posted by Stefan Sauer 2007-09-09

buzztard project status 01/08/2007


Quite late this month. Our son was born on the 26 of July and this of course
causes some priority shift. Be assure I won't abandon then project. Also
berzerka is back and started hacking on midi control support. Speaking of this,
I did a needed refactoring of the interaction-controller stuff. Controller
assignments wont disappear when closing the dialog anymore and they are now also saved with the song and restored when loading. I also implemented unbind and
unbind-all commands.
One TODO item is greater ui state persistence [1]. When loading the song should
appear as you left it. One more item for this is done, the active tab is saved.
This is a relative easy one for people that would like to help.... read more

Posted by Stefan Sauer 2007-08-12

buzztard project status 01/07/2007


This month the ui (bt-edit) got improved. Editing pattern became usable - I
advance the cursor, triggers and notes can be editing as usual in a tracker. The
base-octave setting is implemented.

I also worked on the buzz song importer. One goal I set myself is to be able to
load and play some of the song initially shipped with buzz. Right now I try my
luck on Aenathron.bmx. The song is just 34 kbytes, but plays for more that 5
minutes. Geonik's primifun causes some headache for me as it imports a zillion
windows libs, thus I removed it from the song for now. To be able to load the
song I had to add support for old (< version 1.2) songs. The song loads, but
only produces cracks and pops so far :(.... read more

Posted by Stefan Sauer 2007-07-10