Giter VIP home page Giter VIP logo

dmix's Introduction

MPDroid

MPDroid is a MPD client for Android. It is a fork of PMix.

You can browse your library, control the current song and playlist, manage your outputs, and stream music right to your mobile device. And all of this wrapped up in a beautiful modern Holo design!

What's not to like?

Now Playing/library Screenshot

Compatibility

MPDroid works on all devices from 4.0.3 (API 15) to 4.4+

Get it on F-Droid

Libraries

  • JMPDComm - The core MPD interface lib. Heavily modified.
  • DragSortListView - Really nice and widely used TouchInterceptor replacement.
  • ActionBar-PullToRefresh - Pull to refresh for library.

Known issues

  • Limited multi server support (based on WLAN name)

Roadmap

New features will most likely be delayed. MPDroid is, in my opinion, almost fully-featured and pushes (hits) MPD's API limits. Widely requested features (like better search, better library browsing) can't be done without duplicating MPD's database locally. This is a huge project, and it will take a lot of time (if ever done).

Also, MPDroid's speed isn't that great, but considering that MPD's API was never made for 3G (read crappy) connections, it is also not that bad.

So, the current roadmap is:

####1.1

  • Make MPDroid configurable for multiple servers (Better implementation than the hackish WLAN based one)
  • Add Bonjour support
  • Rework Streams storage
  • Split album details by CD and allow only one CD to be added to the playlist

Donations

Since MPDroid is a fork of dmix and that a lot of people helped me with some huge patches (see special thanks), I don't really believe it would be ethical to accept donations.

If you still want to donate, I have a PayPal address at [email protected], you can send how much you want to it :)

Please consider donating to some of the developers down there :)

Special thanks

Obviously, PMix for their work on the original application. There is not much of PMix left, but their core code is still here.

Everybody who blogged about MPDroid, allowing it to gain a large user base. Mopidy, for working with me on the search support.

Developers

There are a lot of people here. Developers who crossed my path now and then, working on MPDroid and fixing some things. This project wouldn't be the same without you!

Kent Gustavsson - Cleaned up a lot of PMix's old bugged core and polished the interface. Huge refactoring work on the activities.

Phil Chandler - Various fixes and improvements to internal stuff. Added more options to the way it handles the library.

Guillaume Revaillot - Tablet layout work

Andrew Blackburn - Various stuff, suggestions and layout work

Stefan Richter - Refactoring and … Widget ! I was really too lazy about this one, and it was a much requested feature. Also added a way to build MPDroid from the command line, which I didn't even try.

Matt Black - Also worked on ant building. Reported a log of bugs/improvement suggestions. We may not agree on everything but it's been useful!

Craig Drummond - Helped me integrate new features while cleaning up old internal code that I did not really wanted to change. Lots of new interface code and feedback on my experimentations while reworking the whole interface.

jcnoir - Contributor. Reworked cover art support, and many other improvements.

hurzl - MPD Backend improvement (cached MPD), various tweaks and bug fixes.

Avuton Olrich - Behind the scenes fixes, cleanup and Git support.

Other patch submitters : Jörg Thalheim, Florian Weile, Daniel Schoepe, John Bäckstrand, ...

And if I forgot you… I'm sorry, it's kinda hard to remember everybody who worked on a 2 year old project, feel free to mail me :)

Thanks a lot guys!

dmix's People

Contributors

02strich avatar abarisain avatar avuton avatar benoitduffez avatar chenzhang22 avatar dschoepe avatar felixb avatar grevaillot avatar hurzl avatar jcnoir avatar jcsaaddupuy avatar jpeitz avatar kingosticks avatar lauregch avatar madill avatar mafrosis avatar mic92 avatar mschuerig avatar nomis avatar nowaker avatar orrche avatar pandermusubi avatar philchand avatar philippea avatar psergy avatar rcohen2000 avatar roadt avatar sandos avatar ssmy avatar zudov 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

dmix's Issues

Password does not work

When I enable a password in mpd.conf, it works with all my clients (using ario for example), except mpdroid (dmix) or pmix. I specify the right password, but it cannot connect, nothing happens, and in tcpdump or wireshark, I can see the error message "{status} you don't have permission for "status".

I use the last apk (which is old) : MPDroid_24070212.apk.

Could you generate a new one please in download section ?

Sound....

hi,

Do I suppost to hear sound from my Android than song is playing?
As seems, that I cant control volume , and no sound from my android

Edit playlist

It would be useful to add "delete all" to the playlist editor. Currently it takes a long time to flag each track in a long list.

Option to prevent screen disabling

Hi,

Just like previous feature request about wifi automatic disabling, why not also implement an option preventing the screen from shutting down?

I expect it to work that way :

Setting name : "Prevent the screen from shutting down"
Settings possibles :

  • "Never" (default)
  • "When plugged in"
  • "Always"

Multiple server configuration

Hi again,

I got another idea for MPDroid.
If you want to manage/use streaming of multiple servers, it can really become a pain to always edit servers configuration.

There could be an editable list of servers configuration so we can easily switch between them without always editing hosts and ports fields.

Something like a Spinner list should do the trick + actions inside options menu to add/remove/delete a server configuration

Connexion by 3G don't work

Hi,

When I'm connected by Wifi it's working great but when i try to connect by 3G with my domain name it's not working and give "Echec de la connexion" "Transport endpoint is not connected". And if I switch MPD Droid Client ( another app for mpd on android ) it's working.

I don't use default port for mpd and stream, but the host are the same.

Thank for this great apps by the way, good job.

Port settings being ignored

I have a server running 4 instances of MPD on different ports, including various HTTP streams on different ports. When I try to connect to any of the instances running on the non-default ports MPDroid will just connect to the instance on the default port.

So, for example, I'll set MPDroid to connect to port 6601 for MPD and 8001 for HTTP, when I go to control or stream from the server I am connected to the instance on port 6600 and 8000. Restarting MPDroid does nothing, I tried connecting to the stream individually with the android music player and it works fine, as does connecting to the MPD instances with other Droid and desktop clients, so the server configuration is correct.

Add A-Z browser in song library

An A-Z browser on top or on the right side of the song library lists would enhance user experience a lot. Especially when you have very long lists.
For an example, have a look at the Android contacts app.

Add new-ui setting

The new UI is not yet ready in landscape and for mdpi devices.
I want to release another version and get some feedback before I work too much on something people don't like.

I think a setting should be added so the users can rollback to the "old" UI in the meantime.

Option to use streaming only

Hi,
I have configured my MPD Server only to output using streaming. But sometimes I think it switches back to its main purpose, which is using MPDroid as a remote to play a sound where the MPD Server runs.

But I think it would be nice to force MPDroid using streaming (in an option for example), so there is no more need to go to Options key -> Streaming again to get streaming back. (For the moment, I only use MPDroid for this purpose)

ip address fields should sanitize numbers

Hi. thank you for this software, now i can get rid of ampache from my server which i had installed for just this reason.

In any case I spent some time troubleshooting a small problem with streaming. it appears my phone keyboard added a space to the end of the ip address, so consequently it streaming failed. It would be nice if whitespace was stripped from the ip and port fields just in case.

thanks again
-Jason

Caching

Some stuff needs to be cached. The iPhone client, MPoD goes as far as caching the whole library. With the recent performance boosts I don't think that it is THAT necessary anymore, but caching the last.fm covers could be really nice. There's a support for filesystem cache in the last.fm library, I think we should try to use it.

Jump to current son (feature request)

In playlist view it would be nice if it automatically would show the current song. Furthermore a click on "Now Playing" should jump to the current song, too. BitMPC does it this way.

And could the current song be better highlighted? The small play symbol is easily overseen.

Add search to song library

To enhance the user experience, a search function should be added to the library. mpd provides a search API.
The search could be...

  1. simple search: just a single input field which search for any type
  2. advanced search: an input field with additional checkboxes to choose types from:
    Artist|Album|AlbumArtist|Title|Track|Name|Genre|Date|Composer|Performer|Comment|Disc|MUSICBRAINZ_ARTISTID|MUSICBRAINZ_ALBUMID|MUSICBRAINZ_ALBUMARTISTID|MUSICBRAINZ_TRACKID (taken from mpc cli client)

Loss of MPD info

Sometimes when a rotation occurs or when the user switches to another app and comes back to MPDroid, the current song info is lost.
Changing the song refreshes the info until it gets lost again.

play after selecting playlist sends no id

Im not 100% sure this is a mpdroid bug, but mopidy refuses to start playing after I select a playlist (add and replace) and then simply click play. This sends a "play" command to mopidy without id, but the spec says this:

play [SONGPOS] 
Begins playing the playlist at song number SONGPOS.

Implying you need to send the id.

Caching

Some stuff needs to be cached. The iPhone client, MPoD goes as far as caching the whole library. With the recent performance boosts I don't think that it is THAT necessary anymore, but caching the last.fm covers could be really nice. There's a support for filesystem cache in the last.fm library, I think we should try to use it.

Sort track by album number not working properly, sort order wrong for albums with more than 9 tracks

I've got the "Sort Album by track number" preference turned on, and while it does make it so that the tracks are no longer sorted alphabetically, the tracks are not sorted properly by track numbe when there are more than 9 tracks on an album. When there are 10 or more tracks, they are sorted as follows:

Track #:
1
10
11
2
3
4
etc

This seems to be a problem with MPDroid and not mpd or the tags in the files; I've checked the mpd tag_cache and confirmed that the track numbers are correct, and I've also run other mpd clients and confirmed that they sort the tracks correctly.

Here's a real example:

Correct tracklisting for Artist: Liars, Album: Liars (and the order in tag_cache as well):

1 - Plaster Casts of Everything
2 - Houseclouds
3 - Leather Prowler
4 - Sailing to Byzantium
5 - What Would they Know
6 - Cycle Time
7 - Freak Out
8 - Pure Unevil
9 - Clear Island
10 - The Dumb in the Rain
11 - Protection

Sort order in MPDroid:

Plaster Casts of Everything
The Dumb in the Rain
Protection
Houseclouds
Leather Prowler
Sailing to Byzantium
What Would they Know
Cycle Time
Freak Out
Pure Unevil
Clear Island

Please let me know if you need any other info.

Backgrounding

Many parts of the program are NOT backgrounded. (As in, almost every context menu and the update() function of the main activity) Since mpdroid needs to work over 3G (which pmix didn't care about), backgrounding needs to be setup (with "Loading ..." popups or not).
I think that it implies wrapping a lot of stuff into AsyncHelpers

Enter Full Stream URL

My MPD server streams to an icecast server where the IP address, port, and URL are all custom, so the "Streaming Port" is inadequate. Further, I saw your commit allowing to also edit the IP address; this is still inadequate because you don't provide the chance to give the mount name.

The full path of the URL for the stream for me is something like http://example.com:12345/stream.mp3

where "example.com" is different from the IP/domain name of the MPD server, "12345" is different from the MPD port, and "/stream.mp3" is a required URL component that cannot currently be entered with mpdroid at all because the URL suffix is hard-coded as "/" in StreamingService.java, line 243. This behavior will be inadequate for anyone who uses an Icecast server, because it requires you to define mount names like that. The document root doesn't lead anywhere.

I cooked up a patch in case you're interested, and it basically touches the same things as your commit that adds the "Stream Address" setting. But instead of adding a setting, I simply replaced the streamingPort setting with the streamURL setting. The streamURL setting is a user-defined String that is meant to contain a well-formed HTTP URL to the stream. The software is capable of streaming from an arbitrary HTTP URL that yields an audio stream in a supported format, so I don't see why this won't work. I tested my code on an API 8 device, Motorola Droid 2, and it works fine. Let me know if you're interested, though the patch is quite trivial (replace streamingPort with streamURL, and change data type from int to String; remove the Integer.parseInt in MPDApplication.java, edit strings.xml, etc.)

(Probably) should use Album Artist for album art

As subject: probably should use Album Artist for album art download, esp when the "Album Artist" option is selected.

I have some CDs tagged with MusicBrainz that have elaborate artist info (XX feat YY) which breaks album art on some of the tracks, I'm guessing this is why.

Brilliant app, thanks for the work.

Wrong song added when song selected from album

Hi

If you select a song from an album it's likely it will add the wrong song. This is because the album songs list (gui) is sorted in alphabetically, probably done by the gui class automatically. but the selection of a song results in a index number of the position the song is in the gui list, this index is used redirect on the internal song class (dispMusic.get()). Unfortunately because the gui has re-order the list the index number relation are no longer the same :-(

Easy kludge is to add a track number in front of the song title, so array index order is maintained, like so:

@@ -72,11 +72,13 @@ public class SongsActivity extends BrowseActivity {
            MPDApplication app = (MPDApplication) getApplication();
            dispMusic = new ArrayList(app.oMPDAsyncHelper.oMPD.find(MPD.MPD_FIND_ALBUM, album));
        } catch (MPDServerException e) {
        }
 
+       int tn = 1; //Track number may not be populated
        for (Music music : dispMusic) {
-           items.add(music.getTitle());
+           items.add(String.format("%02d", tn) + " " +  music.getTitle());
+           tn++;
        }
    }
 
 }

This seems to work and does not add any overhead to the app, and personally I can live with the track number for the moment.

Obviously the correct way is to use the "title" of the selected song to find it in the array, but there are problems with songs with duplicate names, and how to differentiate between them.

Regard

Phil

Closing connection

When using MPDroid for some time, my MPD server becomes unavailable because the max number of connections is reached.
It seems MPDroid does not close its connections.
It could be related to the wifi problems on the Nexus One (wifi dropping when idle) but it could help to have an option to close connection when we quite the app

Rotation bug

When rotating in the library view, application sometimes crash.
According to the stack trace, the async task succeeds after the View has been freed (a new view has been created since the device rotated)
I hate rotation :D

User message :
You fail, dreamteam. Death by screen rotation. <3
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.app.Dialog.dismissDialog(Dialog.java:278)
at android.app.Dialog.access$000(Dialog.java:71)
at android.app.Dialog$1.run(Dialog.java:111)
at android.app.Dialog.dismiss(Dialog.java:268)
at com.namelessdev.mpdroid.ArtistsActivity.OnArtistsLoaded(ArtistsActivity.java:131)
at com.namelessdev.mpdroid.ArtistsActivity.asyncExecSucceeded(ArtistsActivity.java:91)
at com.namelessdev.mpdroid.MPDAsyncHelper.handleMessage(MPDAsyncHelper.java:160)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

Make it possible to play icecast(shout) streams

Currently only httpd method of MPD is supported, there is other one: through icecast. Could it be possible to include support for it?

Playing through icecast is more attractive because there are two processes: one for control and playing, the other one for outputting.

WLAN and Default connection

The WLAN connection always seams to overrule the Default connection, even when one can not reach the WLAN in question. Removing the host/IP on the WLAN makes connection through the default connection possible again.

stream format support

The streaming feature seems to support only mp3 and doesn't warn the user when encountering an unsupported format (ogg, in this case) and only says it is buffering.
If I am not mistaken, in distributions like Debian, mpd is not compiled with mp3 streaming support, so I think you should put a warning or explain somewhere which format is supported.

Other than that, great app. The streaming feature is what is missing every mpd client.
Keep up the good work.

Pausing MPD kills the streaming service

When the song is paused, the MPD streaming service stops, showing the message "MPD Streaming Disabled".

This bug doesn't occur on 2.2 or when the song is paused using a remote (bluetooth/headset).

[suggestion] create side-by-side landscape layout for tablets

I would love to use MPDroid on a tablet and it would be ideal to to have to a side-by-side layout which would allow the controls and song queue to be always be visible while you browse the library. I would imagine something like this:

Controls + Cover art Library
Now Playing (queue)

I think you could perhaps use the recently released Fragments API (backported to 1.6+) to achieve this while simply using the existing activities (http://android-developers.blogspot.com/2011/03/fragments-for-all.html).

Remember position in Playlist

Currently, MPDroid does not remember position in the playlist, so scrolling to go to the previous position is necessary.

Steps to reproduce:

  • Start mpdroid
  • Make long playlist
  • Go into playlist view
  • Scroll down, select title
  • Go back to main screen
  • Go back to playlist

Current behaviour:

  • MPDroid jumps back to beginning of playlist

Expected behaviour:

  • MPDroid should remember my current position in the playlist
  • Alternatively, jump to the currently playing song

I know you're busy, so I'll just throw this out there :)

Add Wiki Page about building MPDroid App from git

I'd like to test the latest development version. But I could not find out how to build an App out of the code in git. Maybe a wiki page could provide a little howto or point to external docs.
Also what additional software do I need? Android Development Kit?
IMHO this could help to attract more beta tester. At least me :)

MPDroid Connection Failed

edit: solved, see below

Hi

I get the following error when trying to connect MPDroid to MPD:

"Connection to MPD-Server failed! Check if the Server is runnning and reachable. (Transport endpoint is not connected)"

I installed MPDroid on an HTC Desire. MPD is running on ubuntustudio and is working correctly when using Gnome Music Player Client locally.
It is listening on port 6600:
netstat -an | grep "LISTEN "
gives:
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4025 0.0.0.0:* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::6600 :::* LISTEN

The phone is connected via wlan to the network. It receives an IP from the router (in the same subnet as the ubuntu computer). I can access internet, so the network seems to be working correctly.

In MPDroid config I use the ubuntu computer's IP and port 6600.
In mpd.conf I have

bind_to_address "any"

I can also enter the phone's IP, id does not change anything.

What am I doing wrong, can somebody please help me?

Ok, it was a firewall issue. The command

sudo iptables -A INPUT -p tcp -d 0/0 -s 0/0 --dport 6600 -j ACCEPT

solved the problem.
MPDroid could connect immediately afterwards.

This is a really great program! Many thanks to the author.

Albums with certain punctuation in titles display no track listing

I am able to reliably reproduce this with tracks with double-quotes in the title, which sometimes even causes the app to crash. In some cases commas seem to be breaking things, but it's not consistent. The one reliable example is an album with a comma in the title that is showing up twice in the album list, and neither shows any tracks. For albums with commas that only show up once, the track listing seems to work.

Songs with Artist but no Album

If a song has an Artist but no Album set, the artist will show up in the library but when clicking it you will get nothing because there is no album listed under that artist.

Publish APK regularly ?

Hi,

Could you publish (or give a script which creates the apk from the source) regularly new apk files please ?

I don't use Google Market (I don't accept their licence agreement), and some alternative markets need .apk to propose software.

Search for song lyrics

Hi,
when I'm listening to music on my couch I'm often interested in the song lyrics. So some button that automatically searches for >"artist name" "song name" lyrics< on Google would be nice.

Untranslated string

"mainMenu" in Option key menu from Playlist screen is not translated in my locale (fr.BE). Don't know if it's the case in other languages.

Two Albums with the same name

if there are two albums that have the same name from different artists and one goes from the Artist tab in the library to the albums and add the one that has a double both are going to be added.

I haven't been able to try this but from the code this is what should happen and it doesn't feel right.

MPDroid with Vortexbox

I have recently started using MPDroid with Vortexbox and really like it. I am not seeing my album artwork yet. Is this because you are using an internet service? It would be much preferred to display local album artwork. It would be more reliable and show what I want. Additionally it would eliminate the 3G overhead. Can that option be added? Please see the thread at Vortexbox: http://vortexbox.org/forum/vortexbox-player/better-mpod-and-mpad-support/

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.