HardySparkle

Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.

Summary

sparkle is a visually pleasing cover-browser for rhythmbox with undeniable influences from cover-flow. It is a spare-time hack for fun, so don't expect it to have a high priority.

Release Note

A cover-browser plugin for rhythmbox based on OpenGL with emphasis on visually very clean and seamless integration in rhythmbox' UI.

Rationale

The standard application for music-playback in Ubuntu needs to be a bit more in line with the graphical attractiveness of the rest of the system. Especially considering systems which allow running compiz by default, although compiz is not needed to be running to make the sparkle-plugin work. Besides I always wanted to write something like this myself and never found a well-done or finished cover-browser for any OpenSource music-player.

Use Cases

Here is a list of real-world situations, where a cover-browser is very nice thing to have.

  • At a weekend-party with some friends an Ubuntu-powered machine is used for providing musical entertainment. rhythmbox (the sparkle-plugin) is set to kiosk/fullscreen-mode in order to "lock down" the machine and present people a very simple and inviting interface to explore the songs available to them for playback.

Assumptions

The plugin will test for OpenGL 1.3 and the following extensions:

  • GL_ARB_multitexture
  • GL_ARB_fragment_program
  • GL_ARB_texture_rectangle
  • GLX_EXT_texture_from_pixmap

Required OpenGL-limits are:

  • GL_MAX_TEXTURE_SIZE >= 2048

Design/Mockups

Intended look of normal/windowed mode embedded in rhythmbox UI.

http://people.ubuntu.com/~mmueller/sparkle-mockup-1.png

Intended look of fullscreen/kiosk-mode of the sparkle-plugin.

http://people.ubuntu.com/~mmueller/sparkle-mockup-2.png

Two possible layouts for the arrangement of covers (I know that the reflections are wrong in these layout-examples).

http://people.ubuntu.com/~mmueller/sparkle-mockup-3.png

http://people.ubuntu.com/~mmueller/sparkle-mockup-4.png

Possible idea for an equalizer-screensaver faded to from fullscreen-mode.

http://people.ubuntu.com/~mmueller/sparkle-mockup-2.pnghttp://people.ubuntu.com/~mmueller/arrow-right.pnghttp://people.ubuntu.com/~mmueller/sparkle-mockup-5.pnghttp://people.ubuntu.com/~mmueller/arrow-right.pnghttp://people.ubuntu.com/~mmueller/sparkle-mockup-6.png

Implementation

The OpenGL-binding for gtk+, gtkglext, will be used. To allow seamless blending of OpenGL and gtk+-widgets (player-controls) in one GL-drawing-context the GLX-extension GLX_EXT_texture_from_pixmap will be needed. These on-drawing-context player-controls and the cover-images will be animated via implicit animation methods. There will be two modes of operation. The first is normal windowed mode and the second one is fullscreen- or kiosk-mode. There will probably be two available layout-modes for the arrangement of the covers (see the mockups). These will be set in the plugins settings available in rhythmbox usual plugin-preferences.

Most of the widgets seen in the mockups should be pretty selfexplanatory. The left GtkHScale is meant to allow skimming through the collection of covers. The same can be achieved by just dragging on the covers themselves. That's also very useful on tablet-PC displays which allow touch-operation. A double-click on the center cover starts the play-back of that song. A single-click on a cover not in the center rearranges the collection to make that clicked-on cover the center one. A double-click on a non-center cover causes the same effects as a single-click, but also starts the play-back of the respective song.

The previous-, play/pause- and next-buttons should probably not be visible in windowed mode. The same applies to the volume-control.

The loading of cover images into textures has to happen in a separate thread to avoid blocking the rendering and user-interacition. A stand-in image has to be used for cover-textures, which have not been fully loaded (or are simply missing) at the time of rendering the current frame.

The sparkle-plugin will test at runtime if the system is capable of running it. It will always display the collection of songs which reflect the last search a user did via rhythmbox' search-function.

Depending on available time and motivation the fullscreen-mode should be made to disable the normal gnome-screensaver and act as a screensaver itself. After a period of x-minutes (set via plugin-preferences) the normal display of the cover-browser should fade to some visual-equalizer graphics. Moving the mouse, a button or a key should fade back to the normal cover-view.

UI Changes

When enabled the plugin will take up the area usually occupied by the listviews displaying the track-, artist and album-lists. The plugin will introduce only one additional string, which will be the error-message displayed to the user in case the plugin could not start due to missing OpenGL-features.

Code Changes

There are no expected code-changes to rhythmbox itself. The code for the sparkle-plugin has to be added of course. Furthermore the .deb-package for rhythmbox will need changes to ship with the sparkle-plugin enabled by default.

Migration

There are no data-migration issues. Only system-wide settings for rhythmbox need to be changed in order to enable the sparkle-plugin by default on systems, which meet the needed OpenGL-requirements for it.

Test/Demo Plan

It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during CD testing, and to show off after release.

This need not be added or completed until the specification is nearing beta.


CategorySpec

DesktopTeam/Specs/HardySparkle (last edited 2008-08-06 16:28:58 by localhost)