<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adam's Continuity at BlackAcid &#187; xmms2</title>
	<atom:link href="http://blogs.blackacid.org/category/xmms2/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.blackacid.org</link>
	<description>Experiments in Real Time</description>
	<lastBuildDate>Tue, 27 Jan 2009 23:24:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>XMMS2 and Python</title>
		<link>http://blogs.blackacid.org/2008/11/30/xmms2-and-python/</link>
		<comments>http://blogs.blackacid.org/2008/11/30/xmms2-and-python/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 22:30:01 +0000</pubDate>
		<dc:creator>aballai</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[xmms2]]></category>

		<guid isPermaLink="false">http://blogs.blackacid.org/2008/11/30/xmms2-and-python/</guid>
		<description><![CDATA[I rarely get to sit down at my home machine and make something for my own use these days. I&#8217;ve always been interested in working with xmms and now these days xmms2. I built a plugin years ago that would &#8230; <a href="http://blogs.blackacid.org/2008/11/30/xmms2-and-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I rarely get to sit down at my home machine and make something for my own use these days.  I&#8217;ve always been interested in working with xmms and now these days xmms2.  I built a plugin years ago that would dump audio information via http.  These days I&#8217;d do the same, but with a script instead of a compiled c module for xmms.  So this brings me to experimenting with xmms2 and python.  This could be the first in a series of me blogging about python integration and what is possible with linux libraries and apps that have native python libraries.  Python lends itself to being a lightweight language with great performance and fast turnover.  According to debian there is a package that contains xmms2 bindings for python.</p>
<p><b>python-xmmsclient &#8211; XMMS2 &#8211; Python bindings</b><br />
<code>apt-get install python-xmmsclient</code></p>
<p>I decided to port a display_track shell script found on a <a href="http://www.debian-administration.org/articles/509">debian administration article</a></p>
<p>Instead of using osd-cat I went with aosd-cat since I like the options better and it uses the libaosd library.  Whatever I build next is news to me =)  See the code below if you are interested in forking it for yourself.</p>
<p>By the way, excuse the formatting, its a bug in my code highlighter!</p>
<ol class="codelist">
<li class="tab0 odd"><code><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span></code></li>
<li class="tab0 even"><code><span style="color: #ff7700;font-weight:bold;">import</span> xmmsclient</code></li>
<li class="tab0 odd"><code><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span></code></li>
<li class="tab0 even"><code><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span></code></li>
<li class="tab0 odd"><code><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #ff7700;font-weight:bold;">def</span> xmms_connect<span style="color: black;">&#40;</span>name<span style="color: black;">&#41;</span>:</code></li>
<li class="tab2 even"><code>xmms = xmmsclient.<span style="color: black;">XMMS</span><span style="color: black;">&#40;</span>name<span style="color: black;">&#41;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">try</span>:</code></li>
<li class="tab4 even"><code>xmms.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">getenv</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;XMMS_PATH&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>, detail:</code></li>
<li class="tab4 even"><code><span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Connection failed:&quot;</span>, detail</code></li>
<li class="tab4 odd"><code><span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">return</span> xmms</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code><span style="color: #808080; font-style: italic;"># retrieve current playing id</span></code></li>
<li class="tab0 even"><code><span style="color: #ff7700;font-weight:bold;">def</span> xmms_playback_id<span style="color: black;">&#40;</span>xmms<span style="color: black;">&#41;</span>:</code></li>
<li class="tab2 odd"><code>result = xmms.<span style="color: black;">playback_current_id</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab2 even"><code>result.<span style="color: black;">wait</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">if</span> result.<span style="color: black;">iserror</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:</code></li>
<li class="tab4 even"><code><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #008000;">id</span> = result.<span style="color: black;">value</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">id</span></code></li>
<li class="odd">&nbsp;</li>
<li class="even">&nbsp;</li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code><span style="color: #ff7700;font-weight:bold;">def</span> get_current_track<span style="color: black;">&#40;</span>xmms, playback_id<span style="color: black;">&#41;</span>:</code></li>
<li class="tab2 odd"><code>result = xmms.<span style="color: black;">medialib_get_info</span><span style="color: black;">&#40;</span>playback_id<span style="color: black;">&#41;</span></code></li>
<li class="tab2 even"><code>result.<span style="color: black;">wait</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">if</span> result.<span style="color: black;">iserror</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:</code></li>
<li class="tab4 odd"><code><span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;medialib get info returns error, %s&quot;</span> % result.<span style="color: black;">get_error</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab4 even"><code><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code>minfo = result.<span style="color: black;">value</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">try</span>:</code></li>
<li class="tab4 even"><code>artist = minfo<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;artist&quot;</span><span style="color: black;">&#93;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyError</span>:</code></li>
<li class="tab4 even"><code>artist = <span style="color: #483d8b;">&quot;No Artist&quot;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">try</span>:</code></li>
<li class="tab4 odd"><code>title = minfo<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;title&quot;</span><span style="color: black;">&#93;</span></code></li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyError</span>:</code></li>
<li class="tab4 odd"><code>title = <span style="color: #483d8b;">&quot;No Title&quot;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">try</span>:</code></li>
<li class="tab4 even"><code>bitrate = minfo<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;bitrate&quot;</span><span style="color: black;">&#93;</span></code></li>
<li class="tab2 odd"><code><span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyError</span>:</code></li>
<li class="tab4 even"><code>bitrate = <span style="color: #ff4500;">0</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;%s - %s [%s]&quot;</span> % <span style="color: black;">&#40;</span>artist, title, bitrate<span style="color: black;">&#41;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code><span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:</code></li>
<li class="tab2 odd"><code>last_playback_id = <span style="color: #ff4500;">0</span></code></li>
<li class="tab2 even"><code>osd_options=<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\</span></span></code></li>
<li class="tab0 odd"><code>--font=<span style="color: #483d8b;">'-b&amp;h-lucida-medium-normal-*-96-*-*-*-p-*-iso10646-1'</span> \</code></li>
<li class="tab0 even"><code>-B black \</code></li>
<li class="tab0 odd"><code>-R white \</code></li>
<li class="tab0 even"><code>-b <span style="color: #ff4500;">100</span> \</code></li>
<li class="tab0 odd"><code>--x-offset=<span style="color: #ff4500;">50</span> \</code></li>
<li class="tab0 even"><code>--y-offset=<span style="color: #ff4500;">-50</span> \</code></li>
<li class="tab0 odd"><code>--width=<span style="color: #ff4500;">900</span><span style="color: #483d8b;">&quot;</span></code></li>
<li class="tab2 even"><code>xmms = xmms_connect<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;aosd_display&quot;</span><span style="color: black;">&#41;</span></code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code><span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:</code></li>
<li class="tab4 odd"><code>playback_id = xmms_playback_id<span style="color: black;">&#40;</span>xmms<span style="color: black;">&#41;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab4 odd"><code><span style="color: #ff7700;font-weight:bold;">if</span> playback_id != <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">and</span> playback_id != last_playback_id:</code></li>
<li class="tab6 even"><code>last_playback_id = playback_id</code></li>
<li class="tab6 odd"><code>track = get_current_track<span style="color: black;">&#40;</span>xmms, playback_id<span style="color: black;">&#41;</span></code></li>
<li class="tab6 even"><code><span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;echo '%s' | /usr/bin/aosd_cat %s&quot;</span> % <span style="color: black;">&#40;</span>track, osd_options<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></code></li>
<li class="tab4 odd"><code><span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span></code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></code></li>
<li class="sourcelink"><strong>Download this code:</strong> <a href="http://blogs.blackacid.org/code/display_track.py">display_track.py</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blogs.blackacid.org/2008/11/30/xmms2-and-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
