<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
>

  <channel rdf:about="http://lwn.net/headlines/237952/">
    <title>LWN: Comments on "Collections in the XMMS2 music player"</title>
    <link>http://lwn.net/Articles/237952/</link>
    <description>
This is a special feed containing comments posted
to the individual LWN article titled &quot;Collections in the XMMS2 music player&quot;.

    </description>

    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>2</syn:updateFrequency>
    <items>
      <rdf:Seq>
	<rdf:li resource="http://lwn.net/Articles/240871/rss" />
	<rdf:li resource="http://lwn.net/Articles/240105/rss" />
	<rdf:li resource="http://lwn.net/Articles/240107/rss" />
	<rdf:li resource="http://lwn.net/Articles/239613/rss" />
	<rdf:li resource="http://lwn.net/Articles/239311/rss" />
	<rdf:li resource="http://lwn.net/Articles/239302/rss" />
	<rdf:li resource="http://lwn.net/Articles/239278/rss" />
	<rdf:li resource="http://lwn.net/Articles/239150/rss" />
	<rdf:li resource="http://lwn.net/Articles/239118/rss" />
	<rdf:li resource="http://lwn.net/Articles/238852/rss" />
	<rdf:li resource="http://lwn.net/Articles/238850/rss" />
	<rdf:li resource="http://lwn.net/Articles/238690/rss" />
	<rdf:li resource="http://lwn.net/Articles/238545/rss" />
	<rdf:li resource="http://lwn.net/Articles/238479/rss" />
	<rdf:li resource="http://lwn.net/Articles/238307/rss" />
	<rdf:li resource="http://lwn.net/Articles/238300/rss" />
	<rdf:li resource="http://lwn.net/Articles/238260/rss" />
	<rdf:li resource="http://lwn.net/Articles/238178/rss" />
      
      </rdf:Seq>
    </items>

  </channel>
    <item rdf:about="http://lwn.net/Articles/240871/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/240871/rss</link>
      <dc:date>2007-07-06T17:26:49+00:00</dc:date>
      <dc:creator>KaiRo</dc:creator>
      <description>
      Would be cool if that would be possible, it's a feature I really miss a lot in all other such apps.&lt;br&gt;
&lt;p&gt;
Yammi has/had used XML as the storage backend, probably loading the whole &quot;database&quot; into memory, which obviously might sound a bit heavy on memory but is very fast (and I never saw memory problems with it).&lt;br&gt;
&lt;p&gt;
The fuzzy search code it used is at &lt;a href=&quot;http://yammi.cvs.sourceforge.net/yammi/kyammi/src/fuzzsrch.cpp?revision=1.1.1.1&amp;amp;view=markup&quot;&gt;http://yammi.cvs.sourceforge.net/yammi/kyammi/src/fuzzsrc...&lt;/a&gt; and is under the GPLv2 (but I guess Oliver might be open to relicensing if you need a different license).&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/240105/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/240105/rss</link>
      <dc:date>2007-06-28T15:04:22+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      Quod Libet is really quite a cool player. I thought I had mentioned it in the manifesto but apparently not. I like the choice of browsing &quot;views&quot;, the search syntax. It's not super fancy, but it's definitely interesting.&lt;br&gt;
&lt;p&gt;
In the case of collections, the challenge was to abstract the concept and the API so that it could be used by all clients (&quot;interfaces&quot;, if you want) and all the internal parts of XMMS2 transparently. In fact, it's only a building block for more advanced features (Party Shuffle, tagging, mlib organization, etc).&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/240107/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/240107/rss</link>
      <dc:date>2007-06-28T14:58:09+00:00</dc:date>
      <dc:creator>tru</dc:creator>
      <description>
      Didn't apple go with sqlite too? or are we talking about leopard?&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239613/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239613/rss</link>
      <dc:date>2007-06-24T10:42:22+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      &lt;p&gt;It does not to offer all these features &lt;em&gt;per se&lt;/em&gt;, but if you want to allow advanced operators that, for instance, use Artist similarity from Last.Fm, or other data feeds, you would need them.&lt;/p&gt;

&lt;p&gt;Anyway, right now I think we'll be focusing on Collections API + Service clients for this kind of thing.&lt;/p&gt;

&lt;p&gt;Please feel free to let us know if you have suggestions or comments on XMMS2, either through the Mailing-List or the IRC channel (#xmms2 on freenode)!&lt;/p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239311/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239311/rss</link>
      <dc:date>2007-06-21T20:09:12+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      Yeah, agreed, doing all *that* is distinctly nontrivial, but I didn't know &lt;br&gt;
that collection operators had to access the net! It seemed like a simple &lt;br&gt;
data-massaging to me, not a massive integration from multiple sources. &lt;br&gt;
(But maybe I was misreading.)&lt;br&gt;
&lt;p&gt;
And Rockbox can support this use case, sort of (the random &lt;br&gt;
auto-change-directory feature).&lt;br&gt;
&lt;p&gt;
And collections are deeply cool: combined with the client-server part of &lt;br&gt;
XMMS2 (so I don't have to put up with the IMHO odious skins) it looks like &lt;br&gt;
it might be a worthwhile replacement for/addition to MPD on my local &lt;br&gt;
net :)&lt;br&gt;
&lt;p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239302/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239302/rss</link>
      <dc:date>2007-06-21T18:47:59+00:00</dc:date>
      <dc:creator>TRauMa</dc:creator>
      <description>
      As long as you tell Quod Libet each classical work is a seperate &quot;Album&quot;, it supports your use case.&lt;br&gt;
&lt;p&gt;
It also has dynamic playlist based on search and filter terms, although no SoC-Projects and new terms like &quot;Collection&quot;.&lt;br&gt;
&lt;p&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.sacredchao.net/quodlibet&quot;&gt;http://www.sacredchao.net/quodlibet&lt;/a&gt;&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239278/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239278/rss</link>
      <dc:date>2007-06-21T16:51:28+00:00</dc:date>
      <dc:creator>leandro</dc:creator>
      <description>
      &lt;blockquote&gt;I am not sure the current DBMS we're using (SQLite) would be appropriate&lt;/blockquote&gt;

&lt;p&gt;That is the problem with DBMS-agnostic applications: the lowest common denominator.  I think what Apple did, in using full-featured but yet light enough PostgreSQL everywhere, just makes more sense.&lt;/p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239150/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239150/rss</link>
      <dc:date>2007-06-21T07:03:02+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      Writing a Lisp interpreter is indeed trivial. Integrating a Lisp interpreter in a music server daemon, so that it has access to all the internal resources (and possibly event hooks), including libraries to access the Net, read various XML, JSON or whatever feeds, while still allowing Lisp collection operators to expose self-describing customizable attributes, and monitoring their behaviour to make sure they're running correctly, is not trivial. If you want to do it, you are of course welcome :-)&lt;br&gt;
&lt;p&gt;
I qualified your use-case (play these as a unit, and these not) as special because I don't know any player (physical or computer-based) that would support it. However using collections it would be quite trivial to implement it in the client, as you have all the facilities to do it. A 30-line Python script would probably do.&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/239118/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/239118/rss</link>
      <dc:date>2007-06-20T21:07:05+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      Lisp interpreters *are* trivial at their core, especially if (as for an &lt;br&gt;
app like this) efficiency is completely unimportant. Something like SIOD &lt;br&gt;
is really not hard to integrate, and SIOD is way more complex than a &lt;br&gt;
minimal Lisp interpreter needs to be.&lt;br&gt;
&lt;p&gt;
(Read McCarthy's original paper sometime, it's brilliant. That most &lt;br&gt;
ancient of Lisps isn't one I'd recommend writing an interpreter for today, &lt;br&gt;
but it does show how easy it can be.)&lt;br&gt;
&lt;p&gt;
(btw, I'm not really sure `play these as a unit' really counts as &lt;br&gt;
`special'. It's something *everyone* listening to classical music will &lt;br&gt;
want, for example, and we're not as rare as all that. Not just classical &lt;br&gt;
stuff, either: Steve Reich's not exactly classical, but shuffling the &lt;br&gt;
movements of _The Desert Music_ would leave you with a meaningless &lt;br&gt;
jumble.)&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238852/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238852/rss</link>
      <dc:date>2007-06-19T07:38:12+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      Mh, fuzzy search could be implemented as a new collection operator, but I am not sure the current DBMS we're using (SQLite) would be appropriate and effective for such operations. Our favourite smartest bearded lead developer is investigating a new storage backend, so maybe performance will allow that in the future.&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238850/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238850/rss</link>
      <dc:date>2007-06-19T07:34:07+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      &lt;p&gt;I can see different ways to solve your complex shuffling use case. It's quite similar to nix's requirements in the post above.&lt;/p&gt;

&lt;p&gt;Because we're trying to avoid adding too much complexity to the server, different new projects were discussed to make PShuffle more customizable. The first one was a Lisp interpretor that would allow all collection operators to be written in Lisp, and clients could write and save their own on the server. Obviously, it's far from being trivial, and we didn't get enough GSoC2007 slots to have it sponsored this year. An alternative could be to move the PShuffle inside a &lt;a href=&quot;http://wiki.xmms2.xmms.se/index.php/Summer_of_Code_2007/Service_Clients&quot;&gt;service client&lt;/a&gt;, which is a new GSoC2007 project by Ning Shi, which I'm mentoring. Clients could then rely on a more customizable client to do the shuffling, or even write their own shuffling service with special rules like the ones you and nix proposed.&lt;/p&gt;

&lt;p&gt;As long as you either tag (using media properties) the media or put them in a dedicated collection, i.e. as long as they can be identified using collections, there isn't any reason why crazy shuffling methods wouldn't be possible :-)&lt;/p&gt;

&lt;blockquote&gt;The collections thing with binary operators sounds also really useful. It would even be better if there were relational operators which could work on ID3 tags. Then could tag all my tracks as &quot;Live&quot; or &quot;Studio&quot;, and with a relational '&amp;lt;' ID3.YEAR operator, easily have a collection of &quot;Pre-1990 Live U2&quot; for instance.&lt;/blockquote&gt;

&lt;p&gt;The filtering operator work on media properties, which are automatically extracted from tags (ID3, Ogg comments, etc). So your use case is already supported by the current state of Collections!&lt;/p&gt;

&lt;blockquote&gt;Of course, with all these features there has to be a really, really convenient user interface, otherwise it's just too much trouble to bother with.&lt;/blockquote&gt;

&lt;p&gt;Of course, it's an important point. Work is still needed in that area, but it's certainly possible. So far, the text pattern syntax is one powerful way to build collections.&lt;/p&gt;

&lt;p&gt;For instance:&lt;/p&gt;
&lt;code&gt;(artist:&quot;Pink Floyd&quot; l:Meddle) OR (genre:Rock AND +compilation) OR (title:The* in:Playlists/Foo (NOT year&gt;2000))&lt;/code&gt;
&lt;p&gt;Builds a collection containing Meddle by Pink Floyd, all media that have &quot;Rock&quot; as genre and which are flagged (using a media property) as compilations, and all media in the Foo playlist whose title starts by &quot;The&quot; and which were release prior to 2000. Note: the AND is implicit when several conditions are put in a sequence.&lt;/p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238690/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238690/rss</link>
      <dc:date>2007-06-18T11:27:13+00:00</dc:date>
      <dc:creator>KaiRo</dc:creator>
      <description>
      It's really cool to hear of new concepts being developed in that area, and I think collections should give us a really good new perspective to achieve things we couldn't so far.
&lt;br&gt;&lt;br&gt;
What I really miss most from multimedia apps that include &quot;media libraries&quot; of some sort is a fuzzy search like in the abandoned &lt;a href=&quot;http://yammi.sourceforge.net/&quot;&gt;Yammi project&lt;/a&gt;, which was really cool when you wanted to find only roughly known song titles, etc.
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238545/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238545/rss</link>
      <dc:date>2007-06-15T23:19:12+00:00</dc:date>
      <dc:creator>wolfgang.oertl</dc:creator>
      <description>
      &lt;font class=&quot;QuotedText&quot;&gt;&amp;gt; What we are still waiting for, though, is a smarter mode that would also&lt;/font&gt;&lt;br&gt;
&lt;font class=&quot;QuotedText&quot;&gt;&amp;gt; take into account beat, artist similarity, or other semantic information.&lt;/font&gt;&lt;br&gt;
&lt;p&gt;
You're probably aware of gjay for xmms (&lt;a href=&quot;http://gjay.sf.net/&quot;&gt;http://gjay.sf.net/&lt;/a&gt;) which implements at least part of this, i.e. beat and frequency analysis.  This project hasn't had any releases in the last 3 years or so, though...&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238479/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238479/rss</link>
      <dc:date>2007-06-15T19:29:31+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      Yeah, but even *that* isn't quite enough. Some of the stuff on my player &lt;br&gt;
I'd like to be played albumwise; some is song-by-song stuff and can be &lt;br&gt;
shuffled more finely.&lt;br&gt;
&lt;p&gt;
I wonder if what we have isn't a concept of a `subcollection', where &lt;br&gt;
collections of files can be grouped into a `subcollection' which has its &lt;br&gt;
own operators which apply to its members by default. So the shuffling &lt;br&gt;
would apply to a bunch of individual things, and a bunch of subcollections &lt;br&gt;
(`albums'), and *those* then have, by default, play-in-sequence operators &lt;br&gt;
applied to them.&lt;br&gt;
&lt;p&gt;
(But maybe I'm babbling and should shut up.)&lt;br&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238307/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238307/rss</link>
      <dc:date>2007-06-14T17:43:16+00:00</dc:date>
      <dc:creator>thoffman</dc:creator>
      <description>
      Yes, I'd like to be able to teach my music player that Tracks 1-4 on a particular CD are &quot;Symphony #41&quot; and should always be played together, in sequence, and tracks 5-9 are &quot;Symphony #42&quot; with the same restriction, but track 10 is a single work and can be played without restriction.&lt;br&gt;
&lt;p&gt;
Note also it isn't just classical music that has this restriction.  I have a bunch of &quot;non-stop dance mixes&quot; of various techno and electronica which meant to be played all the way through the whole CD with no breaks between songs.  Or, at least between most songs.  &lt;br&gt;
&lt;p&gt;
Although, long stretches from a single CD can kind of defeat the purpose of shuffle play... maybe an option like: When shuffle play is enabled, only shuffle in the middle of this sequence with a given probability.  For instance, p=0.25 would on average break the sequences into four-track lengths.&lt;br&gt;
&lt;p&gt;
Hmmm.... you know, that would be useful for non-sequenced music too.  I sometimes find it disconcerting when shuffle play jumps between radically different styles of music.  If I could adjust a probability (or some other tunable) so that once shuffle chose a track from a CD, there would be a strong probability that it would then play at least one or two more tracks from that CD before going on to a different CD, I'd probably use that.  &lt;br&gt;
&lt;p&gt;
The collections thing with binary operators sounds also really useful.  It would even be better if there were relational operators which could work on ID3 tags.  Then could tag all my tracks as &quot;Live&quot; or &quot;Studio&quot;, and with a relational '&amp;lt;' ID3.YEAR operator, easily have a collection of &quot;Pre-1990 Live U2&quot; for instance.&lt;br&gt;
&lt;p&gt;
Of course, with all these features there has to be a really, really convenient user interface, otherwise it's just too much trouble to bother with.  On my IPod I usually end up shuffle-playing within a single genre just because it's easier than putting together a playlist.&lt;br&gt;
&lt;p&gt;
I mainly want to listen to music, not futz around in a clunky UI for hours.&lt;br&gt;
&lt;p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238300/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238300/rss</link>
      <dc:date>2007-06-14T16:54:12+00:00</dc:date>
      <dc:creator>scevey</dc:creator>
      <description>
      &lt;p&gt;Good point.&lt;/p&gt;

&lt;p&gt;This has been discussed in the XMMS2 community, and so far the idea was to introduce a &quot;selector property&quot; attribute to the Party Shuffle. This attribute would define what property is used to randomly enqueue media from the operand collection. For instance, if you set it to &quot;album&quot;, whenever the Party Shuffle needs to be refilled, it will select a set of song sharing the same &quot;album&quot; property, thus enqueing a full work rather than a single song. The current behaviour would still be activated by default by setting the &quot;selector property&quot; to &quot;id&quot;.&lt;/p&gt;

&lt;p&gt;It's not implemented yet, but it's definitely planned (Issue &lt;a href=&quot;http://bugs.xmms2.xmms.se/view.php?id=1352&quot;&gt;#1352&lt;/a&gt;)!&lt;/p&gt;

&lt;p&gt;Thanks for your input!&lt;/p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238260/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238260/rss</link>
      <dc:date>2007-06-14T15:57:05+00:00</dc:date>
      <dc:creator>nix</dc:creator>
      <description>
      I'm not certain that this solves one problem common among those of us who listen to classical music and audiobooks.&lt;br&gt;
&lt;p&gt;
The case we'd generally like is `shuffle entire works'. You might be able to do this in the structure described by defining `media' to be `a list of MP3 files in a specific directory' or something, but this seems crocky. Essentially you'd want a way to chain media together (into little lists which may themselves have sublists and so on, so you get a tree of media?) such that operators such as sorting only apply to the first element in the list (or to a selected one? XPath for music collections! ;) ).&lt;br&gt;
&lt;p&gt;
Rockbox acquired something that sort of works in this area by providing random directory autochanging. This is a kludge but it sort of works if you turn shuffle off and keep one work in each directory: but it's a lot less elegant than having a shuffling/selection mechanism that actually *understands* that certain media should only be played in sequence with others (unless explicitly requested: maybe you *want* to listen to only the third movement of some work, but generally speaking you'd want to start with the first movement and play to the last: shuffled movements are basically never desirable).&lt;br&gt;
&lt;p&gt;
      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/238178/rss">
      <title>Collections in the XMMS2 music player</title>
      <link>http://lwn.net/Articles/238178/rss</link>
      <dc:date>2007-06-14T09:19:57+00:00</dc:date>
      <dc:creator>vblum</dc:creator>
      <description>
      Thanks for the interesting article. Could the Kraftwerk part be shipped by default ;-)&lt;br&gt;
      
      </description>
    </item>
</rdf:RDF>

