Music player - endlessly plays your music
Pull request Compare This branch is 1555 commits behind albertz:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
chromaprint
lastfm
mac
.gitignore
DevelopmentNotes.md
README.md
RandomFileQueue.py
Search.py
Song.py
State.py
Traits.py
WhatIsAMusicPlayer.md
appinfo.py
attribs.txt
better_exchook.py
binstruct.py
compile.py
defs
ffmpeg.c
gui.py
guiCocoa.py
guiCocoaCommon.py
icon.icns
icon.png
icon.svg
itunes.py
main.py
mediakeys.py
notifications.py
player.py
preloader.py
queue.py
screenshot.png
song-thumbnail.png
songdb.py
stdinconsole.py
test_acoustid.py
test_bmpthumb.py
test_dumpallmusic.py
test_ffmpeg.py
test_ffmpeg_memleak.py
test_indexallmusic.py
test_replaygain.py
tracker.py
tracker_lastfm.py
utils.py

README.md

Music player

First, if you wonder about what is supposed to be a music player or what makes a music player different from a simple media player, read this: What is a music player

Annoyed by all existing players because some subset of:

  • not open source
  • missing sound format (FLAC, Ogg, ...)
  • bugs (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...)
  • missing output possibility (RAOP, PulseAudio, ...)
  • no or too limited DJ mode
  • no library / database

Features of this player:

  • open source
  • simple
  • support of most important sound formats
  • advanced intelligent DJ mode
  • simple music database
  • ReplayGain / audio volume normalization
  • Last.fm
  • AcoustID fingerprint

MusicPlayer screenshot

About the DJ mode, what I want (maybe some of these somewhat configurable):

  • continuously always add songs
  • liked songs more often
  • context-based choices, e.g. related songs more likely
  • possibility to easily manually add songs to the list
  • easy way to restrict to a subset of songs (like a genre, a playlist, a filesystem directory, etc.)

About the database:

  • main function: search
  • should be fast and optional for playback, i.e. music can be played even when the database is currently not ready for some reason
  • file-entries located on the local filesystem which don't exist anymore should automatically be deleted
  • file-entries located on a network filesystem which is not mounted should be marked as currently-not-available
  • file-entries located on a network filesystem which is mounted which don't exist anymore should automatically be deleted
  • should automatically be filled by a filesystem directory
  • import like-state from local players like iTunes and also online services like Last.fm

TODO / possible additional missing features:

  • Gapless playback. I think ffmpeg provides some way to get the exact specified start/end of a song. Otherwise this is just a question of buffering.
  • BPM determination and clever DJ-like fading
  • echoprint.me or similar song determination (mostly for metadata, esp. if missing)
  • use tags given by Last.fm (mostly more tags)
  • Last.fm streaming support
  • watch music directory for changes (e.g. new files added)

Installation:

So far, there is a prebuild MacOSX app bundle in the download section which should just work. Otherwise, to get the source working, you need these requirements (e.g. install on MacOSX via Homebrew):

  • ffmpeg
  • portaudio
  • chromaprint

(Debian/Ubuntu: apt-get install python-dev libsnappy-dev libtool yasm libchromaprint-dev portaudio19-dev. FFmpeg in Debian/Ubuntu is too old (lacks libswresample), so either do add-apt-repository ppa:jon-severinsson/ffmpeg && apt-get update && apt-get install libavformat-dev libswresample-dev or install it from source. Chromaprint depends on FFmpeg, so if you have a custom FFmpeg install, you might also want to install that manually. ./configure && make && sudo make install should work for FFmpeg and PortAudio. You might also want to use --enable-shared for FFmpeg. cmake . && sudo make install for Chromaprint.)

Then call ./compile.py to build the Python modules (it will build the Python modules ffmpeg.so and leveldb.so).

To start the player, just call ./main.py.

The current GUI is Cocoa only. Additional Qt support is planned. The music player also works without any GUI.

Authors: