Illegitimi non carborundum


Randa, round baby right round

OK, so it's been about a year since I was last in this sleeply little town on the path to Zermatt and a lot has changed.

While last year it felt like I was the lone voice singing the praises of PulseAudio (although there were a few supporters!), but this year it feels like everything has gone 180° with pretty much everyone on board! This is a great result for me personally as I've been pretty much the only person working on KDE+PulseAudio integration, so I was very pleased to get this feedback. It's good to know that the hard work and effort you put in is appreciated. It's all too often that the people who appreciate your work are the silent majority (if you do a really good job, they don't know you've done anything as things Just Work™), while the vocal minority are quick to shout and judge and generally flame.

So I was off to an lovely start and I got down to hacking. What did I do this year? Well I continued some work on the interface I made last year called "Speaker Setup". I realised just a short while ago that there was no interface in KDE to be able to change the Source Ports (i.e. pick Mic vs. Line In on your laptop) so I set about extending speaker setup to cope with this. I added a Mic VU meter for good measure (mainly to use up the space with something vaguely useful!). I would ultimately like to do more with this UI but this would need more changes in PulseAudio itself (come listen to my talk in Berlin at the Desktop Summit if you want to know more about this!).

As well as this, I did some tweaks in Phonon to tidy some things up. Various bits and bobs within Phonon and the KCM had bit rotted a little, so minor tweaking saw that all brought up to speed.

I also spent some time hacking on PulseAudio itself, improving some earlier work related to adding Source Output volume controls to PA to take on peer review comments (for those of you unaware, this is capture stream volume control - PA has long supported "per-application" volume control but this only actually applied to outputs. It's not really very common for users to record multiple streams at the same time so support for per-capture stream volumes was never introduced. Now that PA supports Flat Volumes (a feature that always tries to use the hardware volume whenever possible to get the most efficient volume adjustment path), it makes sense to use this for inputs too. It also establishes a degree of symmetry to the API which has always felt a little weird in the past - especially if you are developing a VoIP app (the guys from Skype were a little confused about this disparity for example)). I also spent some time making some minor improvements to pavucontol (shh, don't tell the KDE guys but this is a GTK app!) as this is still my main debug tool when hacking on PA (I mainly improved it to deal more gracefully with errors - like when PA itself crashes and leaves behind the X11 root window's PULSE_SERVER property which results in an invalid argument error from the context with the result that the automatic reconnect mode doesn't work! - but also added some simple keyboard shortcuts that I generally miss when switching windows quickly). I also added support for Source Output volumes to KMix, but this will stay in my private branch until I've committed the PA code as the version check will currently match git master code even if it doesn't yet have the support needed!

I also started to look at Arun and Pierre's awesome work to support passthrough. As there is no reliable way to query receivers for the encodings they support (AC3, DTS etc.) we have to provide a way for users to specify this manually. I worked to rejig how PA stores various bits of information in internal databases to allow for arbitrary lengths of data to be stored rather than the fixed size blobs supported currently. This will pave the way to adding a protocol extension to set the formats for which support will have to be added to the Speaker Setup GUI somehow...

In addition, I also looked at VLC's PulseAudio output layer. I've known for a while that it's kind of lacking and Rémi from upstream VLC has become rather exasperated about the lack of good documentation we provide. I fully appreciate our docs are lacking (some mails on our mailing list today highlight that internal docs for module development are also severely lacking), but I was able to use what was out there to add what I think is quite robust support to VLC. As VLC is used as a Phonon backend by some distros, I felt this was an important task to work on during this KDE sprint.

All in all it was a pleasure to stay here again and meet some now familiar as well as some new people (especially Bart and Trever who are big PA fans!) I look forward to seeing several of them again in Berlin and hopefully next year here in Randa too!

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Slashdot
  • tl;dr

    • Colin

      Short version for those who can’t deal with too much English… (like those folks who spell Trevor wrong…. :p)

      * Hacked on KDE UIs
      * Hacked on Phonon
      * Hacked on PulseAudio
      * Hacked on VLC
      * Hacked on PAVUControl

  • thorGT

    Hi Colin!

    You said PAVUControl there? Now what do you think, will there ever be a KDE equivalent? Because the Phonon KCM and KMix together are not enough to match the functionality of PAVUControl.

    • Colin

      Sure they are. Everything you can do in PAVUControl you can now do in KMix + Speaker Setup (now called “Audio Hardware Setup”) (albeit there are not the same filtering options so something are shown/hidden in KMix when they are normally “filterable” in PAVUControl… but that could be easily remidied if someone cared to take a look (KMix is not really designed for this tho’ as the “profile” support it has is a little too complex and over-designed for this usecase)). I guess the VU meters… but I have that for inputs now (to test the mic is working) in the KCM. Adding VU meters to KMix is doable, but the GUI stuff in it is pretty complex. Maybe Christian’s rework will make it easier to work with? 🙂

      Unless I’ve forgotten something else that PAVUControl can do? Keep in mind that most GNOME users use the gnomve-volume-control which does not even allow individual stream moves!! (not that that should dictate anything in particular).

      But if anyone wants to work on this stuff and needs help with the PA bits, please do just shout! I’d be more than happy to get more people hacking on PA support in KDE 😀

      • thorGT

        And can you “pin” applications to certain audio devices in KMix? And, most importantly, PAVUControl has it all in one place, while KMix and the KCM are two different applications.

        • Colin

          Yeah you can move an app to a specific sink. Just right click on the stream in kmix and select from the “Move…” submenu.

          While they are separate applications the split is desirable. The kmix stuff is “daily use” but the KCM is more for setup that is only accessed relatively rarely. That’s the intention anyway. If that turns out not to be true, then it can be reevaluated 🙂

  • This is great to hear! All these little improvements are sorely needed by KDE.