Giter VIP home page Giter VIP logo

mopidy's Introduction

Mopidy

Mopidy is an extensible music server written in Python.

Mopidy plays music from local disk, Spotify, SoundCloud, Google Play Music, and more. You edit the playlist from any phone, tablet, or computer using a variety of MPD and web clients.

Stream music from the cloud

Vanilla Mopidy only plays music from files and radio streams. Through extensions, Mopidy can play music from cloud services like Spotify, SoundCloud, and Google Play Music. With Mopidy's extension support, backends for new music sources can be easily added.

Mopidy is just a server

Mopidy is a Python application that runs in a terminal or in the background on Linux computers or Macs that have network connectivity and audio output. Out of the box, Mopidy is an HTTP server. If you install the Mopidy-MPD extension, it becomes an MPD server too. Many additional frontends for controlling Mopidy are available as extensions.

Pick your favorite client

You and the people around you can all connect their favorite MPD or web client to the Mopidy server to search for music and manage the playlist together. With a browser or MPD client, which is available for all popular operating systems, you can control the music from any phone, tablet, or computer.

Mopidy on Raspberry Pi

The Raspberry Pi is a popular device to run Mopidy on, either using Raspbian, Ubuntu, or Arch Linux. Pimoroni recommends Mopidy for use with their Pirate Audio audio gear for Raspberry Pi. Mopidy is also a significant building block in the Pi Musicbox integrated audio jukebox system for Raspberry Pi.

Mopidy is hackable

Mopidy's extension support and Python, JSON-RPC, and JavaScript APIs make Mopidy a perfect base for your projects. In one hack, a Raspberry Pi was embedded in an old cassette player. The buttons and volume control are wired up with GPIO on the Raspberry Pi, and are used to control playback through a custom Mopidy extension. The cassettes have NFC tags used to select playlists from Spotify.

Getting started

To get started with Mopidy, begin by reading the installation docs.

Contributing

Begin by reading the contributing section of our documentation. If you are a developer, please also read Development environment and/or Extension development. We welcome all kinds of help with bug fixing, testing, documentation, and supporting other users.

Project resources

Latest PyPI version

Read the Docs build status

Test coverage

Chat on Zulip

mopidy's People

Contributors

adamcik avatar alexandreptj avatar ali avatar alzeih avatar arjunrn avatar btjones711 avatar connrs avatar djmattyg007 avatar dublok avatar eisnerd avatar fatg3erman avatar girst avatar ifosch avatar ismailof avatar jaedb avatar janiversen avatar jcass77 avatar jjok avatar jodal avatar kingosticks avatar klette avatar knutz3n avatar matthewflamm avatar rawdlite avatar ronaldz avatar tkem avatar trefis avatar trygveaa avatar txomon avatar zenithdk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mopidy's Issues

Support 'automatic track replacement' in Spotify playlists

As of the April 2010 releases of Spotify they support "automatic track replacement":

Automatic track replacement: Spotify will now automatically try to find a replacement for any track you can’t play. So if a friend in another country sends you a playlist with tracks you can’t play or a local file, we’ll search our catalogue and link to a playable track when possible. A ‘link’ icon next to the track name represents replaced tracks.

Currently, Mopidy cannot play these tracks and just prints e.g.:

WARNING  Play spotify:track:6R81HhHxetvaWqQoM9K4Ll failed: The track cannot be played

As far as I can see from the API docs, libspotify can tell us that this is a autolinked to another track: http://developer.spotify.com/en/libspotify/docs/group__track.html#g4eeb86de13187697cd9dfe0b0934988d

Make OS X installation simpler

Given that we fix our broken support for OS X (see #25), it would be nice if we could simplify the installation procedure.

Mopidy itself and some dependencies may easily be installed from PyPI using pip. Though we need to have some way of easily installing GStreamer's Python bindings, preferably using Homebrew.

We've already done some work on this, and got GStreamer packaged and included in Homebrew. Though, getting the Python bindings included is still pending. See Homebrew/legacy-homebrew#1612 for some history and Python binding formulas which may be used as a starting point for up-to-date and functional Homebrew formulas.

Other suggestions for making the OS X installation easier are also welcome.

Random mode becomes non-random after all tracks has been played once

To reproduce:

  • Add tracks to the current playlist
  • Play
  • Turn on random mode
  • Continue playing/pressing next until all tracks have been played once, in random order
  • From now on, the tracks are played in the order they appear in the current playlist

Expected behaviour: the tracks should continue to be played in random order

No sound on Ubuntu 10.10

After the upgrade from Ubuntu 10.04 to 10.10, I get no sound using Mopidy's latest develop snapshot.

I also see new errors in the Mopidy output, which points to GStreamer being the problem:

jodal@kih:~/dev/mopidy:develop$ python mopidy
INFO     -- Starting Mopidy --
** Message: pygobject_register_sinkfunc is deprecated (GstObject)
INFO     Mopidy uses SPOTIFY(R) CORE
INFO     MPD server running at [::]:6600
INFO     Connected to Last.fm
INFO     Connected to Spotify
INFO     MPD client connection from [::ffff:127.0.0.1]:41369
INFO     MPD client connection from [::ffff:127.0.0.1]:41376
ERROR    Element doesn't implement handling of this stream. Please file a bug. gstbasetransform.c(2073): gst_base_transform_handle_buffer (): /GstPipeline:pipeline0/GstAudioConvert:convert:
not negotiated

Expose core API as a web service

One could add a frontend exposing Mopidy's core API over HTTP as a RESTful web service and/or WebSocket. As a bonus/proof-of-concept, we could bundle a JavaScript web client with the web service interface, e.g. created using jQuery Mobile.

Some initial work exists in the feature/http-frontend branch, which starts a Tornado web server as a frontend thread, and answers 'Hello, world!' upon requests.

Just as with the MPRIS frontend (see #50), this frontend depends one some nice way of accessing the backend controller API from a frontend thread.

'addid ""' crashes with SpotifyError

addid "" crashes with SpotifyError from backend.library.lookup(). This should be avoided both by validation code in the MPD frontend code and by validation/try-except in LibspotifyLibraryController.

SpytifyError: Timeout while browsing track(s)

Process CoreProcess-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/process.py", line 13, in run
    self._run()
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/process.py", line 36, in _run
    self._process_message(message)
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/process.py", line 45, in _process_message
    response = self._frontend.handle_request(message['request'])
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/mpd/frontend.py", line 69, in handle_request
    result = handler(self, **kwargs)
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/mpd/frontend.py", line 903, in _playback_playid
    return self.backend.playback.play(track)
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/backends/__init__.py", line 564, in play
    elif track is not None and self._play(track):
  File "/home/johannes/dev/workspaces/mopidy/mopidy/mopidy/backends/despotify.py", line 83, in _play
    self.backend.spotify.play(self.backend.spotify.lookup(track.uri))
  File "spytify.pyx", line 149, in spytify.Spytify.play (src/spytify.c:8534)
SpytifyError: Timeout while browsing track(s)

Add support for virtual directories in the library

It would be nice to have virtual directories in the library that does not reflect directories on some file system, but exposes various collections of tracks from the backends. Examples include:

  • Local music organized by artist name
  • Local music organized by album name
  • Local music organized by tag
  • Local music organized by year
  • Starred tracks from Spotify
  • Your inbox from Spotify
  • Top lists from Spotify

Possibly, each backend should be given its own top level namespace it could expose virtual directories within.

Crash when opening a library directory

When I, using the latest Mopidy develop and ncmpc, opened a library directory, I got the following crash:

ERROR    find_exact() keywords must be strings
Traceback (most recent call last):
  File "/Users/jodal/dev/mopidy/mopidy/utils/process.py", line 25, in run
    self.run_inside_try()
  File "/Users/jodal/dev/mopidy/mopidy/core.py", line 43, in run_inside_try
    self.process_message(message)
  File "/Users/jodal/dev/mopidy/mopidy/core.py", line 86, in process_message
    frontend.process_message(message)
  File "/Users/jodal/dev/mopidy/mopidy/frontends/mpd/__init__.py", line 44, in process_message
    response = self.dispatcher.handle_request(message['request'])
  File "/Users/jodal/dev/mopidy/mopidy/frontends/mpd/dispatcher.py", line 30, in handle_request   
    result = handler(self, **kwargs)
  File "/Users/jodal/dev/mopidy/mopidy/frontends/mpd/protocol/music_db.py", line 176, in list_
    return _list_album(frontend, query)
  File "/Users/jodal/dev/mopidy/mopidy/frontends/mpd/protocol/music_db.py", line 221, in _list_album
    playlist = frontend.backend.library.find_exact(**query)
TypeError: find_exact() keywords must be strings
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 121, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/Users/jodal/dev/mopidy/mopidy/__main__.py", line 17, in <module>
    main()
  File "/Users/jodal/dev/mopidy/mopidy/__main__.py", line 14, in main
    CoreProcess().run()
  File "/Users/jodal/dev/mopidy/mopidy/utils/process.py", line 37, in run
    raise e
TypeError: find_exact() keywords must be strings

Add a DLNA Media Renderer (DMR) backend

If we implemented a backend that would work as a DLNA Media Renderer (DMR) we could play music from DLNA Media Servers (DMS), which is a standard implemented by e.g. many NAS devices.

Coherence is a Python implementation of DLNA, and may help us implementing this.

Add support for password authentication in MPD frontend

It would be nice to support password authenticate in the MPD frontend since users may want to run Mopidy on public IPs or private networks with untrusted users. This is especially important when we add support for editing playlists, and also when the use of IPv6 increases and most installations will be publicly available unless firewalled.

Some initial work on this is available in the feature/mpd-password branch.

GStreamer fails to find a supported audio sink

This may not be an issue with Mopidy, but more likely with my installation?
I am running Voyage MPD Linux on an Alix board. I am trying to get audio through a connected USB DAC.

When working with normal mpd, I use alsa as audio output and this works:
audio_output {
type "alsa"
device "hw:0,0"
}

What are the settings I need to make Mopidy work?

see the error messages below:

INFO -- Starting Mopidy --
INFO Mopidy uses SPOTIFY(R) CORE
INFO Disabled: mopidy.frontends.lastfm.LastfmFrontend (No module named pylast)
INFO MPD server running at [::]:6600
INFO MPD client connection from [::ffff:192.168.1.214]:54659
INFO Connected to Spotify
ERROR Could not open resource for writing. oss4-sink.c(515): gst_oss4_sink_open (): /GstOss4Sink:autoaudiosink0-actual-sink-oss4:
system error: No such file or directory
WARNING Setting GStreamer state to READY: failed
ERROR Could not initialize supporting library. gstautoaudiosink.c(370): gst_auto_audio_sink_detect (): /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0:
Failed to find a supported audio sink
ERROR Could not open resource for writing. oss4-sink.c(515): gst_oss4_sink_open (): /GstOss4Sink:autoaudiosink0-actual-sink-oss4:
system error: No such file or directory
WARNING Setting GStreamer state to PLAYING: failed
ERROR Could not initialize supporting library. gstautoaudiosink.c(370): gst_auto_audio_sink_detect (): /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0:
Failed to find a supported audio sink

MPC calls 'listall ""' before 'add "<uri>"'

This is mainly an MPC issue as I can't see why this call is needed, however as long as mopidy does not support listall adding songs with MPC fails. Adding a NOP implementation of listall "solves" this issue. Furthermore commenting out the two relevant lines in MPC also solves this issue.

Various docs issues

These two issues just caused me a tortuous hour trying to install Mopidy. The both seem to be fixed in the develop docs, but master (which is your primary link on the homepage) is deeply unhelpful.

  • Getting and building pyspotify from git does not work.
  • 127.0.0.1 is a really unhelpful default, use "::"

Finally, now I have it built and running and connected to my Spotify Premium, all I see in MPoD on the iPhone are blank screens. Nothing in artists, albums or songs, and nothing in playlists. Plus, no response to searches. What am I missing?

Support Last.fm re-handshaking

After Mopidy has idled for a day or so, I get the following warning when trying to scrobble new tracks:

WARNING  Last.fm scrobbling error: Bad session id, consider re-handshaking

We should catch this exception and renew our Last.fm session.

"Password:" prompt in ncmpcpp 0.5.x

During normal usage, ncmpcpp 0.5.x (0.5.2 at least) will suddenly display a "Password:" prompt to the user. ncmpcpp must be restarted to get rid of it. I haven't seen anything special happening in Mopidy related to this.

Yesterday I got this behaviour after less than 10 minutes of usage. Today I've used ncmpcpp for about seven hours without it.

This has been observed by at least three users.

If we can find a solution to this, it is a candidate for a 0.1.1 bugfix release.

alsamixer error

INFO     2010-07-04 23:42:50,913 [5795:MainThread] mopidy.mpd.server
  MPD client connection from [::ffff:192.168.1.105]:49926
Process CoreProcess-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/process.py", line 13, in run
    self._run()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/process.py", line 33, in _run
    self._setup()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/process.py", line 40, in _setup
    core_queue=self.core_queue)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/backends/despotify.py", line 31, in __init__
    super(DespotifyBackend, self).__init__(*args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/backends/__init__.py", line 32, in __init__
    self.mixer = get_class(settings.MIXER)()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/mixers/alsa.py", line 17, in __init__
    self._mixer = alsaaudio.Mixer(self._get_mixer_control())
  File "/usr/local/lib/python2.6/dist-packages/mopidy/mixers/alsa.py", line 24, in _get_mixer_control
    if control in alsaaudio.mixers():
ALSAAudioError: No such file or directory

Add more powerful search capabilities

Currently, the search capabilities in the local backend is quite naive and simplistic. It would be nice to have more powerful search capabilities, maybe using an existing search solution.

An existing search solutions that seems interesting is Whoosh which is a pure Python search engine, available under the Apache 2 license, both from PyPI and as a Debian package.

despotify back-end and large number of playlists

When using the despotify backend and having a large number of playlists (around 200) it seems as if not all playlists are being loaded. Mopidy shows them to front-end clients as a list without a title (ie. "")

When using libspotify as backend those titles show up as "loading..." and after a couple of seconds they are loaded in and fully available. despotify doesn't seem to load in those extra playlists.

Using: Mopidy 0.1.0a3

Playback sometimes stops at end of track using Despotify

Using Mopidy 4e29754 and Despotify/spytify r508. At the end of a track, after having listened to a couple of tracks, Mopidy's core process (pid 28016 below) no longer responds upon requests from the MPD server process (pid 28015 below).

DEBUG    2010-06-24 20:56:03,647 [28016:Dummy-1] mopidy.backends.despotify
  Despotify signalled end of playlist
DEBUG    2010-06-24 20:56:04,049 [28015:MainThread] mopidy.mpd.server
  Input from [::ffff:127.0.0.1]:48995: status
... no response ...

Core process is waiting on something:

jodal@kih:~$ strace -p 28016
Process 28016 attached - interrupt to quit
futex(0x290a0a0, FUTEX_WAIT_PRIVATE, 2, NULL

The MPD server process is still living and accepting connections, but won't answer any requests as it is reusing the locked up core process.

Search not working properly in Sonata

Using mpd clients like Sonata, GMPC, ncmpd, and possibly others with Mopidy, the search function does not give good results (if any). This is caused by the implementation of the mpd search in MPD clients.

For instance in Sonata, the client make an mpd search request on the two first letter of the search terms and filter the resulting data to list only relevant result. Since spotify only returns about 100 results in search request, the client is unlikely to successfully filter the search results.

This is not a Mopidy bug but I hope that making it an issue will help people realize what is wrong with their settings.

GStreamer error when using OSS4

Experienced by xt at #mopidy:

(mopidy:14158): GStreamer-CRITICAL **: gst_caps_ref: assertion `GST_CAPS_REFCOUNT_VALUE (caps) > 0' failed

(mopidy:14158): GStreamer-CRITICAL **: gst_caps_is_fixed: assertion `GST_IS_CAPS (caps)' failed

(mopidy:14158): GStreamer-CRITICAL **: gst_pad_set_caps: assertion `caps == NULL || gst_caps_is_fixed (caps)' failed

(mopidy:14158): GStreamer-CRITICAL **: gst_caps_unref: assertion `GST_CAPS_REFCOUNT_VALUE (caps) > 0' failed
ERROR    2010-08-24 09:02:54,365 [14158:Thread-1] mopidy.outputs.gstreamer
  GStreamer encountered a general stream error. gstbasesrc.c(2507): gst_base_src_loop (): /GstPipeline:pipeline0/GstAppSrc:src:
streaming task paused, reason not-negotiated (-4)

And by myself:

(mopidy:6655): GStreamer-CRITICAL **: gst_caps_is_fixed: assertion `GST_IS_CAPS (caps)' failed

(mopidy:6655): GStreamer-CRITICAL **: gst_pad_set_caps: assertion `caps == NULL || gst_caps_is_fixed (caps)' failed

(mopidy:6655): GStreamer-CRITICAL **: gst_caps_unref: assertion `GST_CAPS_REFCOUNT_VALUE (caps) > 0' failed
ERROR    GStreamer encountered a general stream error. gstbasesrc.c(2507): gst_base_src_loop (): /GstPipeline:pipeline0/GstAppSrc:src:
streaming task paused, reason not-negotiated (-4)

AssertionError on play() on track that is not in the current playlist

Reported by xt at #mopidy.

Traceback:

ERROR    2010-08-24 09:15:00,465 [14157:MainThread] mopidy.utils.process

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/mopidy/utils/process.py", line 24, in run
    self.run_inside_try()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/core.py", line 44, in run_inside_try
    self.process_message(message)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/core.py", line 82, in process_message
    frontend.process_message(message)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/mpd/__init__.py", line 44, in process_message
    response = self.dispatcher.handle_request(message['request'])
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/mpd/dispatcher.py", line 30, in handle_request
    result = handler(self, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/mpd/protocol/playback.py", line 89, in next_
    return frontend.backend.playback.next()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/backends/base/playback.py", line 357, in next
    self.play(self.cp_track_at_next)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/backends/base/playback.py", line 393, in play
    assert cp_track in self.backend.current_playlist.cp_tracks
AssertionError
Traceback (most recent call last):
  File "/usr/local/bin/mopidy", line 5, in <module>
    main()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/__main__.py", line 14, in main
    CoreProcess().run()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/utils/process.py", line 36, in run
    raise e
AssertionError

Despotify/spytify segfaults when looking up playlists

Despotify/spytify segfaults when looking up playlists, both your own lists and other peoples shared lists. To reproduce:

>>> import spytify
>>> s = spytify.Spytify('alice', 'secret')
>>> s.lookup('spotify:user:klette:playlist:5rOGYPwwKqbAcVX8bW4k5V')
...
Segmentation fault

This is confirmed to still be a problem with Despotify r508.

CoreFoundation error on OS X

Both when using the OS X-bundled Python 2.6 and Homebrew's Python 2.7 I get the following error:

DEBUG    2010-08-14 13:15:11,782 [28425:MainThread] mopidy.frontends.mpd.server
  Input from [::ffff:10.37.3.10]:55068: playid "-1"
DEBUG    2010-08-14 13:15:11,782 [28426:MainThread] mopidy.backends.libspotify.playback
  Setting output state to READY ...
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.

Mopidy version: jodal/mopidy@da2a44f
Pyspotify version: jodal/pyspotify@e0a5fea
Libspotify version: 0.0.4
Python versions: 2.6.1 from OS X and 2.7.0 from Homebrew

This problem seems similar to http://github.com/ask/celery/issues/issue/146.

WiMP / Tidal support

It would be nice to have support for the Norwegian music streaming service, WiMP. They currently have no public API or library, unlike Spotify, but according to tweets from their official Twitter account they do have private APIs that it is possible to gain access to.

I guess they won't like their private APIs to be used in an open source project, but maybe we could get access and develop the backend as closed source, only to publish it once they make their API public?

Infinite recursion loop in play/next on end of track

During normal playback both myself and another user has experienced an infinite recursion loop in play/next upon end of track. This probably got to do with the "skip-to-next-track-upon-error" code.

Traceback:

... lots of WARNINGs like this ...
WARNING  Play spotify:track:2AVcyZ66hKKKkkFz58Hyhd failed: The track cannot be played
WARNING  Play spotify:track:2AVcyZ66hKKKkkFz58Hyhd failed: The track cannot be played
WARNING  Play spotify:track:2AVcyZ66hKKKkkFz58Hyhd failed: The track cannot be played
WARNING  Play spotify:track:2AVcyZ66hKKKkkFz58Hyhd failed: The track cannot be played
ERROR    maximum recursion depth exceeded
Traceback (most recent call last):
  File "/home/jodal/dev/mopidy/mopidy/utils/process.py", line 24, in run
    self.run_inside_try()
  File "/home/jodal/dev/mopidy/mopidy/core.py", line 43, in run_inside_try
    self.process_message(message)
  File "/home/jodal/dev/mopidy/mopidy/core.py", line 88, in process_message
    self.backend.playback.on_end_of_track()
  File "/home/jodal/dev/mopidy/mopidy/backends/base/playback.py", line 317, in on_end_of_track
    self.play(self.cp_track_at_eot)
  File "/home/jodal/dev/mopidy/mopidy/backends/base/playback.py", line 398, in play
    self.next()
  File "/home/jodal/dev/mopidy/mopidy/backends/base/playback.py", line 351, in next
    self.play(self.cp_track_at_next)
  File "/home/jodal/dev/mopidy/mopidy/backends/base/playback.py", line 398, in play
    self.next()
... lots of play() and next() calls ...

This is a candidate for a 0.1.1 bugfix release.

Wrong behavior after random mode has been used

User description:

09:46:03 < xt> can't reproduce, but basic steps was 'add playlist,
           turn on shuffle, add some more tracks, turn off shuffle,
           press next a couple of times only to observe I was getting
           the same some over and over'
09:46:18 < xt> *same song

This is a candidate for a 0.1.1 bugfix release.

Implement IDLE command in mpd frontend

Hi,
Do you plan implementing IDLE command in mpd frontend? Most of MPD clients use it. IMHO this is the only way for clients to update state smoothly.

Thanks

GStreamer error on OS X

After the fix for #24 was applied, Mopidy gets a step closer to working on OS X.

If I load a playlist and then press play, the following happens:

jodal@iota:~/dev/mopidy:develop$ GST_DEBUG_NO_COLOR=1 GST_DEBUG=2 python mopidy
INFO     -- Starting Mopidy --
** Message: pygobject_register_sinkfunc is deprecated (GstObject)
INFO     Mopidy uses SPOTIFY(R) CORE
INFO     Connected to Last.fm
INFO     MPD server running at [::]:6600
INFO     Connected to Spotify
INFO     MPD client connection from [::ffff:10.37.3.10]:48601
0:00:52.278484000 15391    0x104737370 WARN           basetransform gstbasetransform.c:1065:gst_base_transform_acceptcaps_default:<volume> transform could not transform 0x10098a240 in anything we support
Segmentation fault

Same situation with a bit more logging from both Mopidy and GStreamer:

jodal@iota:~/dev/mopidy:develop$ GST_DEBUG_NO_COLOR=1 GST_DEBUG=3 python mopidy -v
INFO     2010-10-22 00:29:41,934 [45465:MainThread] mopidy.core
  -- Starting Mopidy --
DEBUG    2010-10-22 00:29:41,934 [45465:MainThread] mopidy.utils
  Loading: mopidy.outputs.gstreamer.GStreamerOutput
0:00:00.000040000 45465    0x10101e270 INFO                GST_INIT gst.c:599:init_pre: Initializing GStreamer Core Library version 0.10.30
0:00:00.000059000 45465    0x10101e270 INFO                GST_INIT gst.c:600:init_pre: Using library installed in /usr/local/Cellar/gstreamer/0.10.30/lib
0:00:00.000082000 45465    0x10101e270 INFO                GST_INIT gst.c:610:init_pre: Darwin iota.obv20.jodal.no 10.3.0 Darwin Kernel Version 10.3.0: Fri Feb 26 11:58:09 PST 2010; root:xnu-1504.3.12~1/RELEASE_I386 i386
0:00:00.000149000 45465    0x10101e270 INFO                GST_INIT gstquery.c:105:_gst_query_initialize: init queries
0:00:00.000713000 45465    0x10101e270 INFO                GST_INIT gstmessage.c:73:_gst_message_initialize: init messages
0:00:00.000950000 45465    0x10101e270 INFO      GST_PLUGIN_LOADING gstplugin.c:348:_gst_plugin_initialize: registering 0 static plugins
0:00:00.001063000 45465    0x10101e270 INFO      GST_PLUGIN_LOADING gstplugin.c:254:gst_plugin_register_static: registered static plugin "staticelements"
0:00:00.001074000 45465    0x10101e270 INFO      GST_PLUGIN_LOADING gstplugin.c:256:gst_plugin_register_static: added static plugin "staticelements", result: 1
0:00:00.001111000 45465    0x10101e270 INFO            GST_REGISTRY gstregistry.c:1572:ensure_current_registry: reading registry cache: /Users/jodal/.gstreamer-0.10/registry.x86_64.bin
0:00:00.009053000 45465    0x10101e270 INFO            GST_REGISTRY gstregistrybinary.c:601:gst_registry_binary_read_cache: loaded /Users/jodal/.gstreamer-0.10/registry.x86_64.bin in 0.007927 seconds
0:00:00.009109000 45465    0x10101e270 INFO            GST_REGISTRY gstregistry.c:1442:scan_and_update_registry: Validating plugins from registry cache: /Users/jodal/.gstreamer-0.10/registry.x86_64.bin
0:00:00.010377000 45465    0x10101e270 INFO            GST_REGISTRY gstregistry.c:1534:scan_and_update_registry: Registry cache has not changed
0:00:00.010389000 45465    0x10101e270 INFO            GST_REGISTRY gstregistry.c:1601:ensure_current_registry: registry reading and updating done, result = 1
0:00:00.010395000 45465    0x10101e270 INFO                GST_INIT gst.c:786:init_post: GLib runtime version: 2.24.1

0:00:00.010400000 45465    0x10101e270 INFO                GST_INIT gst.c:788:init_post: GLib headers version: 2.24.1

0:00:00.010408000 45465    0x10101e270 INFO                GST_INIT gst.c:450:gst_init_check: initialized GStreamer successfully
** Message: pygobject_register_sinkfunc is deprecated (GstObject)
DEBUG    2010-10-22 00:29:41,962 [45465:GStreamerMessagesThread] mopidy.utils.process
  GStreamerMessagesThread: Starting thread
DEBUG    2010-10-22 00:29:41,962 [45465:GStreamerPlayerThread] mopidy.utils.process
  GStreamerPlayerThread: Starting thread
DEBUG    2010-10-22 00:29:41,962 [45465:MainThread] mopidy.utils
  Loading: mopidy.backends.libspotify.LibspotifyBackend
DEBUG    2010-10-22 00:29:41,962 [45465:GStreamerPlayerThread] mopidy.outputs.gstreamer
  Setting up GStreamer pipeline
0:00:00.034743000 45465    0x101601120 INFO            GST_PIPELINE gstparse.c:291:gst_parse_launch_full: parsing pipeline description 'audioconvert name=convert ! volume name=volume ! autoaudiosink'
DEBUG    2010-10-22 00:29:41,980 [45465:MainThread] mopidy.utils
  Loading: mopidy.mixers.gstreamer_software.GStreamerSoftwareMixer
0:00:00.035618000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstaudioconvert.so" loaded
0:00:00.035634000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "audioconvert"
INFO     2010-10-22 00:29:41,981 [45465:MainThread] mopidy.backends.libspotify
  Mopidy uses SPOTIFY(R) CORE
0:00:00.035915000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseTransform@0x101814020> adding pad 'sink'
0:00:00.035943000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseTransform@0x101814020> adding pad 'src'
DEBUG    2010-10-22 00:29:41,981 [45465:MainThread] mopidy.backends.libspotify
  Connecting to Spotify
DEBUG    2010-10-22 00:29:41,982 [45465:LibspotifySMThread] mopidy.utils.process
  LibspotifySMThread: Starting thread
0:00:00.036420000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstvolume.so" loaded
0:00:00.036433000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "volume"
0:00:00.036596000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseTransform@0x10181a030> adding pad 'sink'
0:00:00.036619000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseTransform@0x10181a030> adding pad 'src'
DEBUG    2010-10-22 00:29:41,982 [45465:MainThread] mopidy.utils
  Loading: mopidy.frontends.mpd.MpdFrontend
DEBUG    2010-10-22 00:29:41,982 [45465:MpdThread] mopidy.utils.process
  MpdThread: Starting thread
0:00:00.037074000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstautodetect.so" loaded
0:00:00.037094000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "autoaudiosink"
DEBUG    2010-10-22 00:29:41,982 [45465:MainThread] mopidy.utils
  Loading: mopidy.frontends.lastfm.LastfmFrontend
0:00:00.037194000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstAutoAudioSink@0x101816000> adding pad 'sink'
0:00:00.037883000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstcoreelements.so" loaded
0:00:00.037905000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "fakesink" named "tempsink"
0:00:00.038021000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseSink@0x101819000> adding pad 'sink'
0:00:00.038069000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:958:gst_element_get_static_pad: found pad tempsink:sink
0:00:00.038084000 45465    0x101601120 INFO                GST_PADS gstpad.c:1906:gst_pad_link_prepare: trying to link sink:proxypad0 and tempsink:sink
0:00:00.038093000 45465    0x101601120 INFO                GST_PADS gstpad.c:2089:gst_pad_link_full: linked sink:proxypad0 and tempsink:sink, successful
0:00:00.038115000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "pipeline"
0:00:00.038183000 45465    0x101601120 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking convert:(any) to volume:(any) (0/0) with caps "0x0"
0:00:00.038199000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstutils.c:1592:gst_element_link_pads_full: trying to link element convert:(any) to element volume:(any)
0:00:00.038210000 45465    0x101601120 INFO                GST_PADS gstutils.c:1046:gst_pad_check_link: trying to link convert:src and volume:src
0:00:00.038217000 45465    0x101601120 INFO                GST_PADS gstutils.c:1066:gst_pad_check_link: Sink pad volume:src is not sink pad, failed
0:00:00.038223000 45465    0x101601120 INFO                GST_PADS gstutils.c:1046:gst_pad_check_link: trying to link convert:src and volume:sink
0:00:00.038353000 45465    0x101601120 INFO                GST_PADS gstutils.c:1493:prepare_link_maybe_ghosting: convert and volume in same bin, no need for ghost pads
0:00:00.038374000 45465    0x101601120 INFO                GST_PADS gstpad.c:1906:gst_pad_link_prepare: trying to link convert:src and volume:sink
0:00:00.038474000 45465    0x101601120 INFO                GST_PADS gstpad.c:2089:gst_pad_link_full: linked convert:src and volume:sink, successful
0:00:00.038489000 45465    0x101601120 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking volume:(any) to autoaudiosink0:(any) (0/0) with caps "0x0"
0:00:00.038496000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstutils.c:1592:gst_element_link_pads_full: trying to link element volume:(any) to element autoaudiosink0:(any)
0:00:00.038504000 45465    0x101601120 INFO                GST_PADS gstutils.c:1046:gst_pad_check_link: trying to link volume:src and autoaudiosink0:sink
0:00:00.038694000 45465    0x101601120 INFO                GST_PADS gstutils.c:1493:prepare_link_maybe_ghosting: volume and autoaudiosink0 in same bin, no need for ghost pads
0:00:00.038710000 45465    0x101601120 INFO                GST_PADS gstpad.c:1906:gst_pad_link_prepare: trying to link volume:src and autoaudiosink0:sink
0:00:00.038903000 45465    0x101601120 INFO                GST_PADS gstpad.c:2089:gst_pad_link_full: linked volume:src and autoaudiosink0:sink, successful
DEBUG    2010-10-22 00:29:41,982 [45465:MpdThread] mopidy.frontends.mpd.thread
  Starting MPD server thread
0:00:00.041104000 45465    0x101601120 INFO           GST_PARENTAGE gstbin.c:3623:gst_bin_get_by_name: [pipeline0]: looking up child element convert
0:00:00.041214000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:958:gst_element_get_static_pad: found pad convert:sink
0:00:00.065286000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstapp.so" loaded
0:00:00.065307000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "appsrc" named "appsrc"
0:00:00.065468000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseSrc@0x10181a3e0> adding pad 'src'
DEBUG    2010-10-22 00:29:42,014 [45465:MpdThread] mopidy.frontends.mpd.server
  MPD server is binding to [::]:6600
0:00:00.072783000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:958:gst_element_get_static_pad: found pad appsrc:src
0:00:00.072831000 45465    0x101601120 INFO                GST_PADS gstpad.c:1906:gst_pad_link_prepare: trying to link appsrc:src and convert:sink
0:00:00.073554000 45465    0x101601120 INFO                GST_PADS gstpad.c:2089:gst_pad_link_full: linked appsrc:src and convert:sink, successful
DEBUG    2010-10-22 00:29:42,033 [45465:Dummy-6] mopidy.backends.libspotify.session_manager
  System message: 22:29:42.023 I [ap:1368] Connecting to AP A2.spotify.com:4070
DEBUG    2010-10-22 00:29:42,034 [45465:LastfmFrontendThread] mopidy.utils.process
  LastfmFrontendThread: Starting thread
INFO     2010-10-22 00:29:42,034 [45465:MpdThread] mopidy.frontends.mpd.server
  MPD server running at [::]:6600
INFO     2010-10-22 00:29:42,034 [45465:LastfmFrontendThread] mopidy.frontends.lastfm
  Connected to Last.fm
DEBUG    2010-10-22 00:29:42,171 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  User message: <a href="https://www.spotify.com/account/share/">Share Spotify</a> with friends and family, they'll love it.
DEBUG    2010-10-22 00:29:42,205 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  System message: 22:29:42.205 E [session:728] Not all tracks cached
INFO     2010-10-22 00:29:42,207 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Connected to Spotify
DEBUG    2010-10-22 00:29:42,207 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:42,774 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,134 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,178 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,434 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,527 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,761 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:43,932 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:44,132 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:44,399 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:44,739 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:45,113 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:45,648 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
DEBUG    2010-10-22 00:29:46,103 [45465:LibspotifySMThread] mopidy.backends.libspotify.session_manager
  Metadata updated, refreshing stored playlists
INFO     2010-10-22 00:29:50,284 [45465:MpdThread] mopidy.frontends.mpd.server
  MPD client connection from [::ffff:10.37.3.10]:51313
DEBUG    2010-10-22 00:29:50,284 [45465:MpdThread] mopidy.frontends.mpd.session
  Output to [::ffff:10.37.3.10]:51313: OK MPD 0.16.0
DEBUG    2010-10-22 00:29:55,249 [45465:MpdThread] mopidy.frontends.mpd.session
  Input from [::ffff:10.37.3.10]:51313: load "Döderlein"
DEBUG    2010-10-22 00:29:55,271 [45465:MpdThread] mopidy.frontends.mpd.session
  Output to [::ffff:10.37.3.10]:51313: OK
DEBUG    2010-10-22 00:29:56,448 [45465:MpdThread] mopidy.frontends.mpd.session
  Input from [::ffff:10.37.3.10]:51313: play
DEBUG    2010-10-22 00:29:56,451 [45465:MainThread] mopidy.backends.base
  Changing state: stopped -> playing
0:00:14.506304000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<tempsink> completed state change to NULL
0:00:14.506330000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstpad.c:1686:gst_pad_unlink: unlinking sink:proxypad0(0x10181c080) and tempsink:sink(0x1018186c0)
0:00:14.506342000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstpad.c:1729:gst_pad_unlink: unlinked sink:proxypad0 and tempsink:sink
0:00:14.506349000 45465    0x101601120 INFO           GST_PARENTAGE gstbin.c:1388:gst_bin_remove_func:<autoaudiosink0> removed child "tempsink"
0:00:14.506365000 45465    0x101601120 INFO         GST_REFCOUNTING gstelement.c:2850:gst_element_dispose:<tempsink> dispose
0:00:14.506372000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:830:gst_element_remove_pad:<tempsink> removing pad 'sink'
0:00:14.506394000 45465    0x101601120 INFO         GST_REFCOUNTING gstelement.c:2874:gst_element_dispose:<tempsink> parent class dispose
0:00:14.506406000 45465    0x101601120 INFO         GST_REFCOUNTING gstelement.c:2905:gst_element_finalize:<tempsink> finalize
0:00:14.506413000 45465    0x101601120 INFO         GST_REFCOUNTING gstelement.c:2916:gst_element_finalize:<tempsink> finalize parent
0:00:14.507106000 45465    0x101601120 INFO      GST_PLUGIN_LOADING gstplugin.c:800:gst_plugin_load_file: plugin "/usr/local/lib/gstreamer-0.10/libgstosxaudio.so" loaded
0:00:14.507121000 45465    0x101601120 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "osxaudiosink" named "autoaudiosink0-actual-sink-osxaudio"
0:00:14.507231000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:711:gst_element_add_pad:<GstBaseSink@0x101819000> adding pad 'sink'
0:00:14.507285000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:958:gst_element_get_static_pad: found pad autoaudiosink0-actual-sink-osxaudio:sink
0:00:14.533355000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<autoaudiosink0-actual-sink-osxaudio> completed state change to READY
0:00:14.533374000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<autoaudiosink0-actual-sink-osxaudio> posting state-changed NULL to READY
0:00:14.533420000 45465    0x101601120 INFO        GST_ELEMENT_PADS gstelement.c:958:gst_element_get_static_pad: found pad autoaudiosink0-actual-sink-osxaudio:sink
0:00:14.533431000 45465    0x101601120 INFO                GST_PADS gstpad.c:1906:gst_pad_link_prepare: trying to link sink:proxypad0 and autoaudiosink0-actual-sink-osxaudio:sink
0:00:14.533439000 45465    0x101601120 INFO                GST_PADS gstpad.c:2089:gst_pad_link_full: linked sink:proxypad0 and autoaudiosink0-actual-sink-osxaudio:sink, successful
0:00:14.533450000 45465    0x101601120 INFO              GST_STATES gstbin.c:2164:gst_bin_element_set_state:<autoaudiosink0-actual-sink-osxaudio> skipping transition from READY to  READY, since bin pending is READY : last change state return follows
0:00:14.533457000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<autoaudiosink0> child 'autoaudiosink0-actual-sink-osxaudio' changed state to 2(READY) successfully
0:00:14.533467000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<autoaudiosink0> completed state change to READY
0:00:14.533474000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<autoaudiosink0> posting state-changed NULL to READY
0:00:14.533487000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'autoaudiosink0' changed state to 2(READY) successfully
0:00:14.533498000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<volume> completed state change to READY
0:00:14.533504000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<volume> posting state-changed NULL to READY
0:00:14.533524000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'volume' changed state to 2(READY) successfully
0:00:14.533535000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<convert> completed state change to READY
0:00:14.533542000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<convert> posting state-changed NULL to READY
0:00:14.533551000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'convert' changed state to 2(READY) successfully
0:00:14.533560000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<appsrc> completed state change to READY
0:00:14.533566000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<appsrc> posting state-changed NULL to READY
0:00:14.533574000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'appsrc' changed state to 2(READY) successfully
0:00:14.533582000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<pipeline0> completed state change to READY
0:00:14.533588000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<pipeline0> posting state-changed NULL to READY
DEBUG    2010-10-22 00:29:56,479 [45465:GStreamerPlayerThread] mopidy.outputs.gstreamer
  Setting GStreamer state to READY: OK
DEBUG    2010-10-22 00:29:56,480 [45465:MainThread] mopidy.backends.libspotify.session_manager
  System message: 22:29:56.480 I [file_picker.cpp:88] File picker: track=deb73292c3114d1d837c0f42dd350af6, file=2f60f174cf3d00ef5e932b0d57f5a2647774c6d7, bitrate=160000, max=160000, target=160000, num=3
0:00:14.537346000 45465    0x101601120 INFO              GST_STATES gstbin.c:2449:gst_bin_change_state_func:<autoaudiosink0> child 'autoaudiosink0-actual-sink-osxaudio' is changing state asynchronously to PAUSED
0:00:14.537369000 45465    0x101601120 INFO              GST_STATES gstbin.c:2449:gst_bin_change_state_func:<pipeline0> child 'autoaudiosink0' is changing state asynchronously to PAUSED
0:00:14.537388000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<volume> completed state change to PAUSED
0:00:14.537396000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<volume> posting state-changed READY to PAUSED
0:00:14.537411000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'volume' changed state to 3(PAUSED) successfully
0:00:14.537426000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<convert> completed state change to PAUSED
0:00:14.537433000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<convert> posting state-changed READY to PAUSED
0:00:14.537442000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'convert' changed state to 3(PAUSED) successfully
0:00:14.537472000 45465    0x101601120 INFO               GST_EVENT gstevent.c:605:gst_event_new_new_segment_full: creating newsegment update 0, rate 1.000000, format bytes, start 0, stop -1, position 0
0:00:14.537538000 45465    0x101601120 INFO              GST_STATES gstelement.c:2236:gst_element_continue_state:<appsrc> completed state change to PAUSED
0:00:14.537551000 45465    0x101601120 INFO              GST_STATES gstelement.c:2249:gst_element_continue_state:<appsrc> posting state-changed READY to PAUSED
0:00:14.537562000 45465    0x101601120 INFO              GST_STATES gstbin.c:2443:gst_bin_change_state_func:<pipeline0> child 'appsrc' changed state to 3(PAUSED) successfully
DEBUG    2010-10-22 00:29:56,483 [45465:GStreamerPlayerThread] mopidy.outputs.gstreamer
  Setting GStreamer state to PLAYING: OK
DEBUG    2010-10-22 00:29:56,484 [45465:MpdThread] mopidy.frontends.mpd.session
  Output to [::ffff:10.37.3.10]:51313: OK
DEBUG    2010-10-22 00:29:56,485 [45465:LastfmFrontendThread] mopidy.frontends.lastfm
  Now playing track: James Brown - The Boss
0:00:14.651679000 45465    0x101601120 INFO           GST_PARENTAGE gstbin.c:3623:gst_bin_get_by_name: [pipeline0]: looking up child element appsrc
0:00:14.651748000 45465    0x101601120 INFO                   pygst gstbuffer.override:50:_wrap_gst_buffer_new: self:0x1048cc170
0:00:14.651773000 45465    0x101601120 INFO                   pygst gstbuffer.override:69:_wrap_gst_buffer_new: pyo:0x1048cc170 pyr:1 minio:0x100918630 minir:1
0:00:14.652334000 45465    0x1044461b0 WARN           basetransform gstbasetransform.c:1065:gst_base_transform_acceptcaps_default:<volume> transform could not transform 0x10098aa40 in anything we support
0:00:14.652473000 45465    0x1044461b0 INFO            audioconvert audioconvert.c:520:audio_convert_prepare_context: use int mixing
0:00:14.652485000 45465    0x1044461b0 INFO            audioconvert audioconvert.c:526:audio_convert_prepare_context: unitsizes: 4 -> 8
0:00:14.652492000 45465    0x1044461b0 INFO            audioconvert audioconvert.c:536:audio_convert_prepare_context: in default 0, mix passthrough 1, out default 0
0:00:14.652509000 45465    0x1044461b0 INFO            audioconvert gstaudioconvert.c:373:gst_audio_convert_get_unit_size:<convert> unit_size = 4
0:00:14.652519000 45465    0x1044461b0 INFO            audioconvert gstaudioconvert.c:373:gst_audio_convert_get_unit_size:<convert> unit_size = 8
0:00:14.652518000 45465    0x101601120 INFO           GST_PARENTAGE gstbin.c:3623:gst_bin_get_by_name: [pipeline0]: looking up child element appsrc
0:00:14.652549000 45465    0x101601120 INFO                   pygst gstbuffer.override:50:_wrap_gst_buffer_new: self:0x1048cc030
0:00:14.652562000 45465    0x101601120 INFO                   pygst gstbuffer.override:69:_wrap_gst_buffer_new: pyo:0x1048cc030 pyr:1 minio:0x1009186b0 minir:1
0:00:14.652942000 45465    0x101601120 INFO           GST_PARENTAGE gstbin.c:3623:gst_bin_get_by_name: [pipeline0]: looking up child element appsrc
0:00:14.652980000 45465    0x101601120 INFO                   pygst gstbuffer.override:50:_wrap_gst_buffer_new: self:0x1048cc170
0:00:14.652992000 45465    0x101601120 INFO                   pygst gstbuffer.override:69:_wrap_gst_buffer_new: pyo:0x1048cc170 pyr:1 minio:0x100918730 minir:1
Segmentation fault

Choppy playback when using libspotify

Mopidy works. Connects to the Spotify service and shows my playlists etc.

However playback sounds very chopyy. As if the stream isn't buffering enough. Regular sound plays without problems and internet connection is ok. The proprietary spotify client plays the stream without problems.

I'm running mopidy on CentOS 5.4 with Python 2.6.1 (r261:67515)

Wes

connection problems between client and mopidy

When I try to add a playlist to the playque this is what is seen on the mopidy server:

INFO MPD client connection from [::ffff:127.0.0.1]:35735
INFO MPD client connection from [::ffff:127.0.0.1]:35737
INFO MPD client connection from [::ffff:127.0.0.1]:35739
INFO MPD client connection from [::ffff:127.0.0.1]:35741
INFO MPD client connection from [::ffff:127.0.0.1]:35743
INFO MPD client connection from [::ffff:127.0.0.1]:35745
INFO MPD client connection from [::ffff:127.0.0.1]:35747
INFO MPD client connection from [::ffff:127.0.0.1]:35749
INFO MPD client connection from [::ffff:127.0.0.1]:35751
INFO MPD client connection from [::ffff:127.0.0.1]:35753
INFO MPD client connection from [::ffff:127.0.0.1]:35755
INFO MPD client connection from [::ffff:127.0.0.1]:35757
INFO MPD client connection from [::ffff:127.0.0.1]:35759
INFO MPD client connection from [::ffff:127.0.0.1]:35761
INFO MPD client connection from [::ffff:127.0.0.1]:35763

And nothing more happens on the ncmpcc client.

Python quit unexpectedly while using the spytify.so plug-in

So I'm just trying to send some basic commands to Mopidy on the command line. I'm using ruby as that's what I know & is the language my MPD client is built in.

~$ irb
>> s =TCPSocket.new("localhost", 6600)
=> #<TCPSocket:0x100e76c>
>> s.gets
=> "OK MPD 0.16.0\n"
>> s.puts("addid \"spotify:track:6Gq52E0FY2RV6XKh1hBIE0\"")
=> nil
>> s.gets

As soon as I run s.gets a dialogue box pops up saying: "Python quit unexpectedly while using the spytify.so plug-in "

Here's some of the output...

Process:         Python [8934]
Path:            /System/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python
Identifier:      Python
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  Python [8932]

PlugIn Path:       /Library/Python/2.6/site-packages/spytify.so
PlugIn Identifier: spytify.so
PlugIn Version:    ??? (???)

Date/Time:       2010-06-09 20:48:18.434 +0100
OS Version:      Mac OS X 10.6.3 (10D578)
Report Version:  6

Interval Since Last Report:          21489 sec
Crashes Since Last Report:           17
Per-App Crashes Since Last Report:   17
Anonymous UUID:                      591AB590-E290-423B-8222-F842054D1BFB

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
__abort() called

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libSystem.B.dylib               0x94f1e132 __kill + 10
1   libSystem.B.dylib               0x94f1e124 kill$UNIX2003 + 32
2   libSystem.B.dylib               0x94fb08e5 raise + 26
3   libSystem.B.dylib               0x94fc6931 __abort + 124
4   libSystem.B.dylib               0x94fa9674 release_file_streams_for_task + 0
5   spytify.so                      0x007cc6f2 __pyx_pf_7spytify_7Spytify_lookup + 4534 (spytify.c:8179)
6   org.python.python               0x00096206 PyEval_EvalFrameEx + 15995
7   org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
8   org.python.python               0x00097f74 PyEval_EvalCodeEx + 1720
9   org.python.python               0x00039d9f PyClassMethod_New + 1714
10  org.python.python               0x000176e0 PyObject_Call + 101
11  org.python.python               0x00097843 PyEval_EvalFrameEx + 21688
12  org.python.python               0x00097f74 PyEval_EvalCodeEx + 1720
13  org.python.python               0x000965a1 PyEval_EvalFrameEx + 16918
14  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
15  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
16  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
17  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
18  org.python.python               0x00097f74 PyEval_EvalCodeEx + 1720
19  org.python.python               0x00039e0c PyClassMethod_New + 1823
20  org.python.python               0x000176e0 PyObject_Call + 101
21  org.python.python               0x0002710d PyClass_New + 1603
22  org.python.python               0x000176e0 PyObject_Call + 101
23  org.python.python               0x0005ed8a _PyType_Lookup + 5617
24  org.python.python               0x00060bc1 PyType_GenericAlloc + 3133
25  org.python.python               0x000176e0 PyObject_Call + 101
26  org.python.python               0x00097812 PyEval_EvalFrameEx + 21639
27  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
28  org.python.python               0x000964e5 PyEval_EvalFrameEx + 16730
29  org.python.python               0x00097f74 PyEval_EvalCodeEx + 1720
30  org.python.python               0x00098019 PyEval_EvalCode + 87
31  org.python.python               0x000af0af Py_CompileString + 111
32  org.python.python               0x000af15b PyRun_FileExFlags + 139
33  org.python.python               0x000b0e7e PyRun_SimpleFileExFlags + 814
34  org.python.python               0x000be15c Py_Main + 3074
35  org.python.python.app           0x00001eb5 start + 53

Thread 1:
0   libSystem.B.dylib               0x94efa572 recvfrom$UNIX2003 + 10
1   libSystem.B.dylib               0x94f1a383 recv$UNIX2003 + 54
2   libdespotify.0.dylib            0x0109ee7e block_read + 60
3   libdespotify.0.dylib            0x0109bca1 packet_read + 42
4   libdespotify.0.dylib            0x0109eff8 despotify_thread + 46
5   libSystem.B.dylib               0x94eeaa19 _pthread_start + 345
6   libSystem.B.dylib               0x94eea89e thread_start + 34

Thread 2:  Dispatch queue: com.apple.libdispatch-manager
0   libSystem.B.dylib               0x94ee3b42 kevent + 10
1   libSystem.B.dylib               0x94ee425c _dispatch_mgr_invoke + 215
2   libSystem.B.dylib               0x94ee3719 _dispatch_queue_invoke + 163
3   libSystem.B.dylib               0x94ee34be _dispatch_worker_thread2 + 240
4   libSystem.B.dylib               0x94ee2f41 _pthread_wqthread + 390
5   libSystem.B.dylib               0x94ee2d86 start_wqthread + 30

Thread 3:
0   libSystem.B.dylib               0x94ebd2fa mach_msg_trap + 10
1   libSystem.B.dylib               0x94ebda67 mach_msg + 68
2   ....audio_hijack_server.hermes  0x014159b2 ah_serv_loop + 132
3   libSystem.B.dylib               0x94eeaa19 _pthread_start + 345
4   libSystem.B.dylib               0x94eea89e thread_start + 34

Thread 4:
0   libSystem.B.dylib               0x94eeb262 __semwait_signal + 10
1   libSystem.B.dylib               0x94eeaf1e _pthread_cond_wait + 1191
2   libSystem.B.dylib               0x94eecbb8 pthread_cond_wait$UNIX2003 + 73
3   spytify.so                      0x007c1379 thread_loop + 133 (audio_thread.c:31)
4   libSystem.B.dylib               0x94eeaa19 _pthread_start + 345
5   libSystem.B.dylib               0x94eea89e thread_start + 34

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0x00000000  ebx: 0x94fc68c1  ecx: 0xbfffcc8c  edx: 0x94f1e132
  edi: 0x000f8c90  esi: 0x0041d848  ebp: 0xbfffcca8  esp: 0xbfffcc8c
   ss: 0x0000001f  efl: 0x00000286  eip: 0x94f1e132   cs: 0x00000007
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
  cr2: 0xffe2a5c8

Ario reconnects to Mopidy continuously

When connecting the Ario MPD client to Mopidy, it reconnects all the time.

Ario issues an MPD request like this:

list Artist Artist "anartistname1" Artist "anartistname1"

This is a format we haven't seen before, and don't support. I'm not entirely sure of the intended semantics of repeating Arist "anartistname1" twice either.

This is a candidate for a 0.1.1 bugfix release.

lastfm frontend bug?

got thise messages in the server:

WARNING  Play spotify:track:4gZ4zzYrPp7y0gtxuKDSGC failed: The track cannot be played
WARNING  Play spotify:track:1V9X7CgeCY5dh6JPYPuo4k failed: The track cannot be played
WARNING  Play spotify:track:0ABR73lSYqrHLh1eX5CffD failed: The track cannot be played
ERROR    'NoneType' object has no attribute 'artists'
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/mopidy/utils/process.py", line 50, in run
    self.run_inside_try()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/lastfm.py", line 75, in run_inside_try
    self.process_message(message)
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/lastfm.py", line 94, in process_message
    self.started_playing(message['track'])
  File "/usr/local/lib/python2.6/dist-packages/mopidy/frontends/lastfm.py", line 101, in started_playing
    artists = ', '.join([a.name for a in track.artists])
AttributeError: 'NoneType' object has no attribute 'artists'
Exception in thread LastfmFrontendThread:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.6/dist-packages/mopidy/utils/process.py", line 62, in run
    raise e
AttributeError: 'NoneType' object has no attribute 'artists'

at the same time, the ncmpcpp lost connection

ncmpcpp is not rununning on the same machine as mopidy
mopidy is running on port 6601
another mpd is running on 6600

Have several times lost connection from client machine to mopidy server

On a machine where mopidy is the only mpd server, there has been no trouble at all.

Shuffle

Ubuntu 9.10 Server
mopidy version: 0.1.0a0
Backend: Despotify r507
ncmpcpp version: 0.3.4
built with support for: curl taglib unicode

It does not work. It can be set in the client but the server ignores it.

Mopidy and RelaXXPlayer

Hi,

I tried to access Mopidy trough the RelaXXPlayer client (http://relaxx.dirk-hoeschen.de/) unfortunatly it responds with:

Error
Could not connect to mpd-deamon.
Please check for HOST,PORT and PASSWORD in configuration and press F5.

Mopidy says:

  MPD client connection from [127.0.0.1]:34906
DEBUG    2010-06-01 13:26:34,933 [24236:MainThread] mopidy.mpd.server
  Output: OK MPD 0.16.0
DEBUG    2010-06-01 13:26:34,934 [24236:MainThread] mopidy.mpd.server
  Input: commands
DEBUG    2010-06-01 13:26:34,935 [24236:MainThread] mopidy.mpd.server
  Output: OK

Could someone help me out?

Kind Regards, Marcus

Add support for Last.fm radio streaming

It would be nice if Mopidy supported Last.fm radio streaming, e.g. through MPD commands like this:

add "lastfm://globaltags/Ambient"

This is already supported by the MPoD client.

Mopidy stream buffer

Hey there,

This is more of a question. Can the buffers be made larger through settings? Right now I have a lot of skipping which makes me think its because of buffering issues. Despotify doesn't have these issues, so its not the internet connection at a given time (as I then quickly switch to Despotify to make sure).

I'm using the Mopidy just before gstreamer got introduced as a dependency and have been having these buffering issues on/off with all versions prior.

Thanks!

Add test suite to ensure MPD compatibility

We would like to have some means of comparing Mopidy's MPD server with the original MPD server. For example by running the same test suite against both implementations and compare the results.

Some work on this have been done in the feature/blackbox-testing branch.

Collaborative playlists

Ubuntu 9.10 Server
mopidy version: 0.1.0a0
Backend: Despotify r507
ncmpcpp version: 0.3.4
built with support for: curl taglib unicode

I recently added a collaborative playlist to my playlists, when i try to to load it ncmpcpp starts playing the first track but there is no sound. If I then load another playlist ncmpcpp somtimes crashes with the message:

terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check

And the other times it begins playing the new playlist but no sound.

Also, the tracks that I have added to the playlist (Using the official client) shows up as "spotify:track:0000000000000000000000" in the playlist view.
Note that all the tracks that were added by others shows up just fine.

Repeat

Ubuntu 9.10 Server
mopidy version: 0.1.0a0
Backend: Despotify r507
ncmpcpp version: 0.3.4
built with support for: curl taglib unicode

It does not work. It can be set in the client but the server ignores it.

Expose Mopidy in the Ubuntu Sound Menu

We would like to make Mopidy controllable through the Ubuntu Sound Menu by implementing a MPRIS interface to Mopidy over D-Bus. This requires the addition of python-dbus as an optional dependency.

Work on a MPRIS frontend can be found in the feature/mpris-frontend branch. It has come quite far, and currently registration with the Ubuntu Sound Menu is working. The remaining part is implementing a way to call the backend controller API from a frontend thread without implementing a gazillion new message types. Pykka may be a solution for this.

Add support for using multiple backends simultaneously

It would be nice to be able to mix music from different backends, e.g. Spotify and local disk, in the current playlist. The library and search results should also include tracks from all backends.

Current work on this is in the features/multi-backend branch. There are largely two separate parts of work that needs to be done:

  • The backend controllers need to dispatch requests to one or more backend providers, depending upon the command and the playlist/track.
  • The GStreamer output needs to be able to play both URIs (file:// and http://) and raw audio data using the same pipeline.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.