First impressions

Discuss the development and future direction of Play.
Post Reply
Paul Gotch
Posts: 23
Joined: Mon Oct 30, 2006 10:54 pm

First impressions

Post by Paul Gotch » Mon Oct 30, 2006 11:22 pm

On playing with Play for a few minutes, and in no particular order.

I don't like the way the open dialog box is somehow embedded into the main window and isn't a normal dialog that can be moved so you can see what is underneath it.

It needs to be possible to add a the contents of a directory recursively to the library at the moment you only seem to be able to add single or multiply selected files.

Can the library and the current play list be separated such that you have a "current" play list which you can save and load play lists into. These could be from files or stored in the library. The library is then a separate entity which happens to be integrated such that playing something from the library adds it to the play list.

I know that would make it like WinAMP however it is a more functional design as it allows you to manipulate the media library independently of the what is happening right now. There's no real point in developing another iTunes clone which is the direction Cog seems to be going in.

Album Art acquisition from Amazon (presumably the code from Max can be reused).

Watch folders, the ability to automatically add to the library anything which is put in certain folders. You have to be a bit clever with background rescans so that it doesn't take eons to load Play and work out if any files had been added since the last invocation. obviously if Play is running it can just register for notifications to the directory that it is interested in. You also need options to be able to completely delete and recreate the library and options to prevent rescans totally, for example if you wanted to conserve battery power on a laptop for example.

Output patch: Ability to select which device and more importantly which channels of which device Play is going to play via.

User avatar
sbooth
Site Admin
Posts: 2445
Joined: Fri Dec 23, 2005 7:45 am
Location: USA
Contact:

Re: First impressions

Post by sbooth » Tue Oct 31, 2006 4:54 am

Paul Gotch wrote:On playing with Play for a few minutes, and in no particular order.

I don't like the way the open dialog box is somehow embedded into the main window and isn't a normal dialog that can be moved so you can see what is underneath it.
This is called a sheet- it is by design in this case so multiple Library windows can be open and simultaneously have open file sheets on them, and the application will continue to respond.
It needs to be possible to add a the contents of a directory recursively to the library at the moment you only seem to be able to add single or multiply selected files.
This is already done.
Can the library and the current play list be separated such that you have a "current" play list which you can save and load play lists into. These could be from files or stored in the library. The library is then a separate entity which happens to be integrated such that playing something from the library adds it to the play list.

I know that would make it like WinAMP however it is a more functional design as it allows you to manipulate the media library independently of the what is happening right now. There's no real point in developing another iTunes clone which is the direction Cog seems to be going in.
I'm not sure what this buys you- I am working on the playlist interface, more on this below.
Album Art acquisition from Amazon (presumably the code from Max can be reused).
It could be, yes.
Watch folders, the ability to automatically add to the library anything which is put in certain folders. You have to be a bit clever with background rescans so that it doesn't take eons to load Play and work out if any files had been added since the last invocation. obviously if Play is running it can just register for notifications to the directory that it is interested in. You also need options to be able to completely delete and recreate the library and options to prevent rescans totally, for example if you wanted to conserve battery power on a laptop for example.
This is on the drawing board. I foresee probably four kinds of playlists. 1) The collection playlist, essentially the library. 2) A normal, static playlist. 3) A folder playlist, which watches a specific folder. 4) A dynamic playlist, dynamically fetching streams that match one or more criteria.
Output patch: Ability to select which device and more importantly which channels of which device Play is going to play via.
Can you give an example of when the default output isn't good enough?

Mike1
Posts: 201
Joined: Thu Sep 21, 2006 3:55 pm

Re: First impressions

Post by Mike1 » Tue Oct 31, 2006 8:44 am

Paul Gotch wrote:There's no real point in developing another iTunes clone which is the direction Cog seems to be going in.
I doubt Vincent is. He'd not have hours in the day to clone iTunes. That program is a ripper/encoder, a tagger, a player/music-file manager, a front to the iTunes store, a podcast catcher and iPod manager (and now updater), an internet-radio application, and it handles iTMS/iPod video content, too. Arguably, it tries to do too much.

Maurits
Posts: 117
Joined: Sun Jan 29, 2006 1:36 pm
Location: London, Europe

Re: First impressions

Post by Maurits » Tue Oct 31, 2006 4:46 pm

Mike1 wrote:
Paul Gotch wrote:There's no real point in developing another iTunes clone which is the direction Cog seems to be going in.
I doubt Vincent is. He'd not have hours in the day to clone iTunes. That program is a ripper/encoder, a tagger, a player/music-file manager, a front to the iTunes store, a podcast catcher and iPod manager (and now updater), an internet-radio application, and it handles iTMS/iPod video content, too. Arguably, it tries to do too much.
Not only that, I've never noticed any intention with Vincent to go in the direction of iTunes. He even makes the occasionally odd design choice to prevent Cog even looking like iTunes, let alone become it.

Paul Gotch
Posts: 23
Joined: Mon Oct 30, 2006 10:54 pm

Re: First impressions

Post by Paul Gotch » Wed Nov 01, 2006 1:00 am

sbooth wrote:This is called a sheet- it is by design in this case so multiple Library windows can be open and simultaneously have open file sheets on them, and the application will continue to respond.
Hum I see your logic but I don't see why a library window has to stop responding when a "add" dialog box is open.

Nothing that has to change the state of the program will happen until the user hits "OK". At this point you start to have issues as you have to read all the metadata of the files which could run into the thousands. Trying this on a directory with 3000 AAC files underneath it caused the current build of Play to beachball and start to eat RAM with the "sheet" still visible (I killed it when it had eaten 800MB and my PowerBook had started incurring swap death).

Metadata needs to be read in the background and added to a database via a transaction so the library window can continue to respond and query the same database. Handily CoreData provides an SQlite method that could be used to implement this.
sbooth wrote: I'm not sure what this buys you- I am working on the playlist interface, more on this below.
It buys you the ability to manipulate your music library, perhaps you want to search it or add new songs to it or edit the metadata of files referenced but it etc. while listening to a selection from the library.

To take iTunes as an example select an album via a search or the the Album filter and set it playing. Now change your search while the first track is playing to one which doesn't include the playing track. Observe that playback stops at the end of the track. As a second example start playing an album then change the sort order, for example descending track number rather than ascending. When playback reaches the end of the track it continues to the next track in the present order not the original order that I searched for.

Obviously you can create specific play lists in iTunes to solve this problem but it has no concept of a default play list i.e. what is playing at the moment and what is queued to play next and you end up with two windows open one which is a view onto your named play list and one which you are using to search the library.

A concrete use case here is that while I use iTunes for playing music while I am doing other work I use WinAMP or XMMS for playing music at parties as it enables people to queue music to play back without interrupting previously queued music. XMMS achieves something very similar without a library with just a "current" play list by allowing the user to specify the order in which the tracks get played in over riding the order they appear in the play list. WinAMP actually has a similar feature called JTFE which is hidden by default to prevent confusion.
sbooth wrote:This is on the drawing board. I foresee probably four kinds of playlists. 1) The collection playlist, essentially the library. 2) A normal, static playlist. 3) A folder playlist, which watches a specific folder. 4) A dynamic playlist, dynamically fetching streams that match one or more criteria.
This is nowhere near as powerful as having an abstract library which is essentially a database of the meta data extracted from files or from streaming servers which you can then query to create specific play lists which you can then load and save.

For example if you used CoreData/SQLite to store the data in then you could provide advanced users with the ability to construct queries of their library using SQL.
sbooth wrote: Can you give an example of when the default output isn't good enough?
I have a MOTU Ultralight Firewire audio interface. This essentially has 12 analog outputs. Now I have other software driving outputs 1-8 (QLab http://figure53.com/ which also doesn't have per channel patching but it's on the list of things to implement) I'm bored while doing my sound design (technical rehearsals can get very dull when the lighting designer is redesigning on the fly) and I want to listen to some music to pass the time. This means setting the default output device to the Ultralight, that's OK as I can redirect system sounds to the internal speakers and avoid making other noise however something lacking an output patch just uses outputs 1&2 not 11&12 where the headphone socket resides so my music goes out over the front of house PA rather than into my headphones.

User avatar
sbooth
Site Admin
Posts: 2445
Joined: Fri Dec 23, 2005 7:45 am
Location: USA
Contact:

Re: First impressions

Post by sbooth » Wed Nov 01, 2006 2:59 pm

Paul Gotch wrote:Hum I see your logic but I don't see why a library window has to stop responding when a "add" dialog box is open.

Nothing that has to change the state of the program will happen until the user hits "OK". At this point you start to have issues as you have to read all the metadata of the files which could run into the thousands. Trying this on a directory with 3000 AAC files underneath it caused the current build of Play to beachball and start to eat RAM with the "sheet" still visible (I killed it when it had eaten 800MB and my PowerBook had started incurring swap death).
I've noticed the performance issues while adding files as well. This isn't really an issue with the sheet dialog itself, it's more an issue with the way files are added. As you suggested I am working on spinning off file addition to a separate thread.
Metadata needs to be read in the background and added to a database via a transaction so the library window can continue to respond and query the same database. Handily CoreData provides an SQlite method that could be used to implement this.
Play is built using Core Data, so all the queries you mention are easily possible. You should be able to perform simple queries now using the Search field, and more complex ones when I add dynamic playlists.
It buys you the ability to manipulate your music library, perhaps you want to search it or add new songs to it or edit the metadata of files referenced but it etc. while listening to a selection from the library.

To take iTunes as an example select an album via a search or the the Album filter and set it playing. Now change your search while the first track is playing to one which doesn't include the playing track. Observe that playback stops at the end of the track. As a second example start playing an album then change the sort order, for example descending track number rather than ascending. When playback reaches the end of the track it continues to the next track in the present order not the original order that I searched for.

Obviously you can create specific play lists in iTunes to solve this problem but it has no concept of a default play list i.e. what is playing at the moment and what is queued to play next and you end up with two windows open one which is a view onto your named play list and one which you are using to search the library.

A concrete use case here is that while I use iTunes for playing music while I am doing other work I use WinAMP or XMMS for playing music at parties as it enables people to queue music to play back without interrupting previously queued music. XMMS achieves something very similar without a library with just a "current" play list by allowing the user to specify the order in which the tracks get played in over riding the order they appear in the play list. WinAMP actually has a similar feature called JTFE which is hidden by default to prevent confusion.
This is very good feedback! I understand now what you are looking for, and I think it's a great idea.
This is nowhere near as powerful as having an abstract library which is essentially a database of the meta data extracted from files or from streaming servers which you can then query to create specific play lists which you can then load and save.

For example if you used CoreData/SQLite to store the data in then you could provide advanced users with the ability to construct queries of their library using SQL.
I think we are talking apples and apples; the UI is just clunky right now. Currently a Play window is a Library, which represents a collection of streams. A Library can contain any numer of playlists, which are selected using the playlists drawer. The clunky part is that right now to show the whole library you have to deselect any playlists. Play does use CoreData for data management, but the backing store (performance issues aside) is somewhat irrelevant. Core Data doesn't let you compose SQL directly; it translates predicates and fetch requests into whatever is appropriate for the store type.
I have a MOTU Ultralight Firewire audio interface. This essentially has 12 analog outputs. Now I have other software driving outputs 1-8 (QLab http://figure53.com/ which also doesn't have per channel patching but it's on the list of things to implement) I'm bored while doing my sound design (technical rehearsals can get very dull when the lighting designer is redesigning on the fly) and I want to listen to some music to pass the time. This means setting the default output device to the Ultralight, that's OK as I can redirect system sounds to the internal speakers and avoid making other noise however something lacking an output patch just uses outputs 1&2 not 11&12 where the headphone socket resides so my music goes out over the front of house PA rather than into my headphones.
Wow- not your average home user's setup :)

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests