Banshee… on Windows

To continue with the theme, the elusive Fredrik the Great spent a night of hacking last week on getting Banshee to run under Windows.

Banshee on Windows
Banshee: coming soon to a Windows desktop near you

I think his efforts were mainly out of curiosity, but they are a great step forward in getting Banshee to be cross platform. Fredrik chose to also implement an engine backend directly against Windows Media Player, called Banshee.MediaEngine.WMP10. It’s nice to have a native platform engine for playback, but I’ll be very interested in also getting the current GStreamer engine running under Windows as well.

We will be putting more serious effort into the Windows port of Banshee in the coming months. What I anticipate to be the real difficult part of this port is properly supporting all the hardware use cases, some of which should be much easier than others:

  • Audio CD detection
  • Digital Audio Player detection
  • CD Burning

I have zero working development knowledge on Windows, so I may just be over-speculating here. My concerns are mainly around the hardware events – on Linux we have this glorious thing called HAL. Anyone working on a Windows HAL port? :)

Luckily, the innards of Banshee are designed to allow easy implementations of platform specific pieces. Lots of factory/provider junk. It should make life at least a little more organized and allow for drop-in solutions for what’s missing.

Huge kudos goes to Mono, GTK+, and GNOME for already being there to make cross platform a reality. Much more on all this in due time. Congrats to Exaile.

Banshee 0.11.7

I just released Banshee 0.11.7. Upstream sources are available from the Wiki release page and there are openSUSE packages for 10.1 (work on SLED 10 as well) and 10.2. If you’re running SUSE 10.1, SLED 10, or openSUSE 10.2, I’d strongly recommend adding the respective repository to your package manager of choice to stay current. I update the packages in the openSUSE build service as part of the upstream release process, so they’re always available within hours of the upstream sources hitting our server.

Banshee 0.11.6 marked the last release with new features for the 0.11.x series. 0.11.6 introduced local radio station management (add/remove/edit your own station groups and streams), the ability to disable the remote radio content, and some user interface polishing, along with a bunch of bug fixes. This release also marked string freeze for the 0.11.x series, so translators – you have free reign!

Banshee 0.11.7 is the first bug-fixes-only release. I fixed two potential crashers, and some DBus issues. If you have a bad DBus setup and the session bus cannot be found, Banshee will still run, but it will yell at you to either fix your DBus problems or try using dbus-launch. Alp fixed dbus-sharp (NDesk) to not barf when the session bus restarts, which was a huge pain. Kudos to Alp.

There was also a performance regression in TagLib# that found its way into 0.11.6, but it has been fixed for 0.11.7. You’d only notice this if you tried importing large amounts of MP3 files in 0.11.6. Much thanks to the venerable Brian Nickel for his work on TagLib#.

In all, the fixes and polish in 0.11.7 are certainly worth the upgrade, especially if you’re running anything below 0.11.6.

A number of translations have been updated by the awesome localization teams as well. Much thanks goes out to everyone involved in localization. Banshee is currently available, at least in part, in 31 languages. Since 0.11.6, Slovenian and Punjabi translations are now available. Wicked!

For 0.11.6, I also extended the audio profiles to support localization. Profiles are now localized in a number of languages. The UI for the profile combo box was also updated to show a profile description below the combo box to make choosing a good profile a little easier without having to go to “Edit.” The descriptions were also updated to be more informative and easy to understand.

Audio Profiles UI localized in Russian by Alexandre Prokoudine
Banshee Audio Profiles UI localized in Russian by Alexandre Prokoudine

More fixes will be on the way for what could potentially be the last point release in the 0.11.x series – expect this release by March 5th. Soon efforts will switch to more great feature work on the next series, along with more fixing and some really good performance work. 0.11.x has marked huge strides forward for the Banshee project, and the next series will be no less exciting, so stay tuned! I send a big personal thanks out to everyone who has taken a ride on the Banshee Train.

Seriously, let’s make fonts not suck!

I was about to try to get some sleep, but honestly wasn’t feeling very tired (as usual) at around 2:30am eastern, and read Federico’s excellent GNOME Font post.

I’ve always thought the desktop wide font configuration in GNOME was way too excessive and unclear. Federico’s thoughts echo my own here, so to grasp the context of the rest of this post, please read his. I also think the actual font selection dialog is a mess. Widgets are poorly arranged, feels a bit outdated, and at the very least I’d like to see the actual names of the fonts in the family list appear in their respective faces – having to select each font I’m looking for to preview it below the list is a tedious process.

Anyway, this post is not about the font selection dialog – it’s about GNOME’s font configuration dialog. I decided I’d create a working mockup of his idea, and I must say, I’m a fan.

Screenshot of working GNOME font chooser mockup

I added the Bold and Family options. In a final version, I think the family selector should just be a combo box that displays the family names in their respective faces. GTK needs this widget. For now, the standard font chooser button is a good placeholder.

If you want to test drive this working mockup, both the source and assembly are available to download. I prototyped the idea in C#. I will not entertain comments along the lines of “if it’s going to be in GNOME, it’ll need to be in C.” While personally I’d enjoy debating that idea, if this concept is accepted, I’ll be the first to offer to rewrite it in C. This is just a prototype – a working mockup. I don’t think I could crank this out in C in 1.5 hours.

Also, it doesn’t actually change your GNOME font settings. This is just a UI prototype.

Without further ado:

To run the assembly:

$ mono font-chooser.exe

If you want to compile the code:

$ gmcs -out:font-chooser.exe -pkg:gtk-sharp-2.0 FontChooser.cs

Along with Federico’s post, I hope this starts to drive discussion. I’d love to see some really quick turn around on this in GNOME.