
My Quest to Build the Ultimate Music Player - AndyKelley
http://andrewkelley.me/post/quest-build-ultimate-music-player.html
======
GuiA
Congrats! This is fantastic.

If you can write code, I highly recommend taking a stab at writing yourself
the tools that you use the most (whether that is a music player, chat client,
text editor, etc.).

Sure, it isn't trivial - but modern languages and libraries (I'm a big fan of
Python, both for the language and its ecosystem) make it a very reasonable
project. You can get an MVP working in a few weeks of work (if you spend 5-10
hours a week on it), and then you can add features and tweak the thing over
the months and years as you use it.

And in the end, you get a piece of software that you deeply know, to which you
can add any feature you want, that is customized to fit perfectly in your
workflow, etc. It's a bit of work, but it's really cool and IMO one of the
neatest things you can do for yourself as a programmer. Additionally, if it's
something that works well for you, chances are that other people will like it-
open sourcing it and getting other people to use it is a high of its own.

I'm working on a few such apps myself (todo list, mail client, and a few
others), as console applications using ncurses to make something with a
responsive, smart, effective and efficient style of UI that I don't think has
been done before (mostly because no one has been trying to innovate in the
domain of console applications in the past 20 years- but I think interesting
things can be done). When I'm at an interesting point, I'll open source it and
write a few posts about it.

I hear the naysayers saying that it's a waste of time, that there are already
8000 different open source mail clients and music players and todo lists apps
and that it's better to contribute to old open source projects than create
your own, etc... those arguments aren't wrong, but IMO they don't outweigh the
pros I outlined above.

This talk by Gary Bernhardt is relevant:
[https://www.destroyallsoftware.com/talks/a-whole-new-
world](https://www.destroyallsoftware.com/talks/a-whole-new-world)

~~~
phaylon
If it is just for a first try to experiment with structuring those kinds of
application, or if your needs aren't even that complicated, it can even be
quite close to trivial sometimes. But it's hard to know what is out there, and
how useful it would be. Things that I've done on the side that weren't too
hard and even more fun than I imagined beforehand:

* Media Players (Video and Audio) with GStreamer (0.10 can be okay'ish, 1.0 is very nice so far)

* Text Editors (via Gtk-Source or embedded GVim)

* I've tried building a specialized browser with WebKit. Was also quite easily used, except that I gave up when trying to get the Flash plugin to run turned out to be not-fun. Others may have more motivation.

Note that I mostly try these things in Gtk2/3 with either Perl 5 or Vala.
Python seems to have very good Gtk/GObject bindings as well, so that should
mostly apply the same way. And I'm sure if you look at the Qt and Wx
ecosystems there will also be many preexisting useful components, or ways to
plug them in.

------
ecdavis
One problem that really interests me is the "dynamic playlist." Once your
music library becomes sufficiently large and diverse, simply shuffling songs
ceases to be an acceptable way to listen to music. You'll randomly switch
between vastly different genres, come across tracks that aren't enjoyable
outside the context of an album, jump in halfway through some pieces. It's a
mess.

I wrote a simple script which uses Last.fm data to generate a "path" through
the artists in my music library based on their similarities. It's very far
from perfect, but it suffices to build an album playlist which slowly takes me
through several genres. Some day I'll improve it to work based on albums
rather than artists.

Ideally, I'd like to be able to run queries on my music library and have an
interesting playlist returned to me.

~~~
AndyKelley
I'd love to read more about this idea. You might consider doing some research
and writing a piece on it.

~~~
ecdavis
I've been meaning to work more on this, but my free time is fairly limited. At
the very least I should probably put my script on GitHub (although it's far
from groundbreaking).

For me, one of the pain points is quality of metadata. It's all very well
collecting genres, tags, and similar artists from a service like Last.fm, but
you need to be reasonably confident that they align with your own ideas about
music. Since everyone's ideas about music are different, this puts you in a
tight spot.

~~~
r721
rateyourmusic.com's genre system works pretty well, it's based on user voting
on genres for an album (genres are selected from a list, which is constantly
being updated by democratic process too)

Here is their current genre tree:
[http://rateyourmusic.com/rgenre/](http://rateyourmusic.com/rgenre/) (caution,
huge page)

However, they don't have an API, so you would need to scrape web pages to get
genres for your albums.

------
splat
This looks really cool! As a classical music fan, the one feature that I've
always wanted but have never found is the ability to link several tracks
together. Often times classical CDs break up a single piece into multiple
tracks, so if you're listening to your library on shuffle, you will often jump
into the middle of a piece, which is annoying. It would be so cool if there
were a music player where you could link several tracks together as one piece
so that shuffle would always start from the beginning and wouldn't shuffle
away until the end.

~~~
gagege
iTunes can (or used to) do that, believe it or not.

~~~
silviogutierrez
It seems like that's only possible now when importing/ripping CDs. For
existing tracks, it doesn't work.

However, you can right click a group of tracks, then edit the info to add a
unique Grouping label. This allows you to shuffle by grouping.

In fact, iTunes purchases - at least some of them - already include this.
Screenshot: [http://cl.ly/image/3w0R0y1I0E0V](http://cl.ly/image/3w0R0y1I0E0V)

------
anigbrowl
_The solution is to analyze each song before playing it to figure out how
"loud" it sounds to humans. Then the music player adjusts the playback volume
of each track to compensate for the perceived loudness. This way, the user
does not have to adjust the volume for each track that comes on._

This is just going to perpetuate the arms race, because it's not hard to spoof
that sort of thing by monkeying around with crest factors in transient
designers, plus people seem to have quite different preferences for
compression/limiting. Just tweaking gain and falling back to
compression/limiting past a certain threshold is just going to lead to pumping
on some program material.

There is a standard for measuring this stuff, and thanks to years of people
like me complaining about jumps in volume during commercial breaks on TV and
the like, a loudness-measuring standard has been formalized and is being
demanded by broadcast regulators (so it will become standard in audio
production software over the next year or three). It's here:
[http://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-
BS.1770-3-2...](http://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-
BS.1770-3-201208-I!!PDF-E.pdf)

Waves, Dolby, Izotope etc. have all released plugins or free updates for
1770-3 comaptibility so it should become ubiquitous by mid-decade, as will
automatic loudness normalization at the mastering stage, which wasn't
previously possible in the absence of an industry-standard metric.

~~~
AndyKelley
This is exactly what the EBU R128 standard specifies. It references ITU-R
BS.1770. So Groove Basin is already doing exactly what you have prescribed!

~~~
anigbrowl
I missed the bit about R128, thanks for pointing that out.

------
daurnimator
This article rings true with me on so many points.

I spent years searching for, and coding my dream music player/manager. Going
through tens of different backends, servers, etc, not limited to: \-
MediaMonkey: windows only \- Amarok: terrible interface, slow and hard to
extend \- foobar2000: closed source/windows only/columns UI stopped working \-
MPD: Just not enough, also poor codec support (I use wavpack) \- xmms2: was a
baby at the time \- ExFalso

I started coding my own, dubbed lomp:
[https://code.google.com/p/lomp/](https://code.google.com/p/lomp/) I solved so
many interesting issues that seemed to plague other music software: I got
client/server working, output redirection, even ended up coding my own library
management, then tagging library. Tangentaly, tagging is HARD, no one does it
correctly. The best library I found on ANY platform or in ANY language was
Mutagen, part of the Quodlibet
[https://code.google.com/p/quodlibet/](https://code.google.com/p/quodlibet/)
project; but even it got a few things wrong. I eventually tried to split off
my efforts as 'lamt'
[https://github.com/daurnimator/lamt](https://github.com/daurnimator/lamt) but
didn't dedicate enough time. Also worked on a wide range of front ends:
console, web, etc.

But as I coded this media player, I could never settle on a decoding or output
library; I went through SO many: \- controling mplayer/cplay/aplay via a pipe
\- libvlc \- gstreamer \- Phonon \- libavcodec But none were enough, or way
too buggy... After years of failing, I decided I better just do it myself, so
I started again:
[https://github.com/daurnimator/lomp2/](https://github.com/daurnimator/lomp2/)
This time using LuaJIT's brand new (at the time) ffi to directly talk to libao
(which I found to be the best cross platform audio output solution)

I ran out of time to work on lomp when I was at university, and now I have a
job that keeps me busy. I wonder how many of my pain points you guys have
solved.....

Feel free to reach out to me if you want to discuss more.

~~~
AndyKelley
I'm particularly interested in your opinions on tagging. Can you explain what
most software gets wrong about tagging?

Here's the plan so far, although it's not implemented:
[https://github.com/andrewrk/groovebasin/issues/30](https://github.com/andrewrk/groovebasin/issues/30)

The idea is that you might edit tags for a file which doesn't even support
tags, such as AAC. So it would let you do that, and the changes would then be
reflected in the DB. However we would also have a UI pane for "Suggested
Library Fixes" or something like that. This would be things like moving files
to their canonical location, updating incorrect duration tags, duplicate file
detection, etc. It would also have suggestions like this:

* These songs have tag edits that you have made but they cannot be saved. Do you accept this change? (Proposed change: wrap the file in a container format which supports tags)

~~~
adamzochowski
There are many issues with tags:

\- multi language - id3v2 tags support having multiple title tags. Yet
software will assume there is only one, and won't show alternative titles.
This becomes problem when exactly same song has multiple names, one in
original script, one transliterated, one English translation.

\- old international tags - most software can't deal with Russian KOI8 and
Polish Mazovia at the same time

\- multiple artists - there are songs that are collaborations of multiple
artists. For example: 'Will.I.Am & Brittney Spears' gets treated as own
artist, as opposed to collaboration. Music Brainz and Discogs handles this in
their data.

\- alternative artist names - Some artists produce under alternative names.
Most tags assume that 'Norman Cook' and 'FatBoy Slim' are two different
artists. Same with 'Richard James' and 'Aphex Twin'. Discogs handles this

\- hierarchical, multiple genre tags - Most software supports simple genre
tags. Few applications can handle multiple genre tags. What about tag
hierarchy (ie: Rock -> Symphonic Rock -> Kraut Rock?).

\- Extended info tags: mood, style, bpm, key - Sometimes when I am melancholy
I care for love songs, I don't care for genre, it can be jazz, or death metal
(last.fm data contains enough to map mood/style/decades). When I DJ, I need
info on BPM and Key (ie: A Minor), so that one song fits the next. (from
Echonest / Beatport support this)

\- composer vs performer - for classical music it is as important to know who
composed a piece (ie: Chopin - Funeral March) as who was the perfomer (was it
Rubenstein or Padarewski)

\- spoken word - music listening is quite different from spoken word, like
audiobooks. Most software sees just a music file and doesn't handle proper
spoken word distinction, while use case is _very_ different

\- tag sources - while writting tags, there should be additional tag saying
where it came from. Foobar's Foo_discogs and Foo_musicBrainz plugins will
write source ID, so that at a later time songs can be updated to online db
(assuming discogs/musicbrains has updated their db entry)

\- song popularity - there are tags to track song popularity and ratings, yet
most software ignores it, or does this badly themselves

\- stand alone songs vs mixed songs - some albums / artists have stand alone
songs. These can be listened to randomly. Other albums will have songs flow
one into another (listen to any Jean Michelle Jarre album, or live dance music
split into tracks). There is no proper handling of how these flow

\- replay gain - most software is not smart to handle album vs song replay
gain properly. Not to mention that there are two types of replay gain for mp3s
alone. One will change quantization values, one will write tags.

\- images - APIC tag adds image support, yet most software barely reads cover
APIC, and ignores remaining APIC (like label logos). Not to mention that this
is lost space as each song in album will contain own APIC, making a duplicate
of images.

\- label tags - Some people like to listen music based on the label that
published it. UKF Dubstep, Monstercat, or Ninja Tune are just some labels that
people keep track of.

\- alternative versions - some songs will have alternative versions, I don't
mean remixes or covers by someone else, but main artist will often release few
copies of the song. Sometimes the difference is in swear words (explicit vs
censored), othertimes it is matter of length (original 7 minute mix vs radio 3
minute mix), other times it is matter of single having vocal vs instrumental
versions. Sometimes it is a matter of live recording (ie: mtv unplugged). Most
software will either assume songs are different because title tag is
different, or will assume they are exactly same.

\- sort tag - artists have one name they are to be displayed while should be
sorted differently. For example: The Beatles should be under letter 'B'. Most
software sucks at this, even though we have the tags, they are not there.

\- album subtitle - some albums will have CD1 and CD2 with a subname. For
example two cd album 'Destination Lounge: New York City', has CD1 subtitled
'Relax' and CD2 'Revive'. Most software either will need to drop the per cd
subtitle, or will split and consider CD1 as separate album from CD2.
[http://musicbrainz.org/release/cec1efa8-6541-4f9c-8f55-c86b1...](http://musicbrainz.org/release/cec1efa8-6541-4f9c-8f55-c86b142eb51f)

These are just some off top of my head.

------
asgard1024
I also had a quest to build the ultimate music player. My motivation was that
most music players got complicated to the point I was unable to use them.

My player is 200 lines of Python, utilizing MPD and Qt (for Docker icon), and
has about 3 features. It plays all the mp3 in a directory (including subdirs)
randomly, and you can "like" or "dislike" song, which modifies the probability
of it being played (and these data are remembered in MPD database). Also has
"pause" and "next song" buttons (from the tray menu) and that's it, literally.

To each his own, but that's my personal definition of "ultimate".

~~~
aaronem
I'd try something like that, but most of what I listen to is from the common-
practice era, so the quantum of content is not an individual file, but a
playlist. "Shuffle" therefore doesn't work for me; what I really need is a
player whose playlists can contain either individual files or other playlists.

I wouldn't have thought this would be all that _outré_ a desire, but
apparently everyone who's ever implemented a music player disagrees with me...

~~~
maxerickson
Foobar 2000 has a 'Shuffle Albums' mode. I guess other players would too.

Even if your music doesn't quite fit into that box, it could be abused to do
what you want (multi song collections turn into albums given the same album
name, a single file has some other album name so is it's own album).

I made sure to check that the mode respects order within the albums.

Edit: And you can tweak the album grouping, so you wouldn't have to destroy
album tags to make it work, just use some custom tag for the grouping.

~~~
aaronem
I should've mentioned earlier that I've run across that and found it not
really suitable for my purposes; I have close to a hundred gigabytes of music,
much of which is not properly tagged so that "Shuffle (albums)" does what I
want. It's also not broken down into directories by piece (a lot of it's in
FLAC/CUE-per-album format, and one album usually contains several pieces), so
"Shuffle (directories)" wouldn't work either.

I appreciate you taking the time to mention it, though, all the same.

Edit in re: to your edit: True, but even so, I can't see a way of making that
work that doesn't involve many hours of manual tagging effort, which is
something I'm sort of trying to avoid.

~~~
maxerickson
Yeah, bad tags are a problem and they aren't any fun to fix.

I would think that you could mechanically recognize many of the multi track
pieces though (and then just dump some identifier in a grouping tag). So it's
"just" a scripting problem, at least if you ignore finding decent and reliable
libraries to do the tagging.

~~~
aaronem
Sure, I could do that, and I don't mind driving command-line tools to do the
tag modification so that's no real problem, but even with a 99.9% success
rate, the size of my music library makes manually fixing up the ones that
don't come out right a considerable task -- to say nothing of identifying them
in the first place, another problem which doesn't really admit of easy
programmatic solution.

In theory, I suppose I should just block out a weekend day or so, put on my
headphones, and bite the bullet. But being able to add playlists, as
playlists, to playlists, would neatly solve the problem without requiring me
to spend a day engaged in such drudgery, and would offer other UI benefits
besides. What I've got right now works well enough to be going on with for
most of my purposes, and I suppose I just keep hoping someone will come along
and satisfy my now rather forlorn hopes as to the rest.

------
Touche
This post makes me feel bad about myself. How many "passion projects" have I
started and gave up on the first time something difficult came up? Too many to
count.

There are several lessons to be learned from this post. Perseverance. Starting
small. Not sacrificing your vision. Willingness to go as low-level as needed.
Patience. This is an inspiring post. I think I'm going to dust off one of my
old projects now and get back to work.

~~~
AndyKelley
> How many "passion projects" have I started and gave up on the first time
> something difficult came up?

Probably not as many as I have. This is the one project that I keep coming
back to and the only reason it has survived so long is that I dogfood it.

------
endgame
Really good article, but if you're going to bundle libraries, PLEASE provide a
way to make configuration fail if you can't get to the system copy.

A lot of projects (libgroove included) will try the system copy and then fall
back to the bundled copy if the system one wasn't found. That's nice for users
(maybe), but it's a pain for packagers. If the packager just happens to have
one of the dependencies installed, the package will automagically find it but
it will have incorrect deps.

Further reading: [https://blog.flameeyes.eu/2009/01/bundling-libraries-for-
des...](https://blog.flameeyes.eu/2009/01/bundling-libraries-for-despair-and-
insecurity)

------
ammmir
That's funny, seems like a lot of us have built music players because none
have seemed adequate :)

I built CloudPlay ([http://cloudplay.fm](http://cloudplay.fm)) because I
wasn't satisfied with Mac music players and none supported streaming from
YouTube or SoundCloud. At the time, I had also been itching to build my first
Mac app, so what better opportunity to learn Objective-C/Cocoa and improve my
music listening experience?

It turned out to be a longer journey than it should have. I got most of it
working in a month or two, but I spent too much time with unnecessary detours
like:

 _\- writing a low-level audio streaming framework that I scrapped once I
discovered a higher-level API_

 _\- building a basic search index and deciding to use LuaJIT (!) to implement
it, thereby requiring me to build my own Objective-C /Lua bridge, only to
discover that the OS already provided a full-text search framework_

Yes, I could've read the documentation more carefully, but it's also easy to
get sucked down a rabbit hole building stuff from scratch for the sake of
exploration. Sometimes building at a lower level helps you appreciate and
understand the higher level and why you shouldn't always reinvent the wheel :)

~~~
jfb
_Yes, I could 've read the documentation more carefully, but it's also easy to
get sucked down a rabbit hole building stuff from scratch for the sake of
exploration. Sometimes building at a lower level helps you appreciate and
understand the higher level and why you shouldn't always reinvent the wheel :)
_

But that's what's fun about what we do.

------
sandGorgon
Quick question - are people listening to a lot of music through their laptops
?

do note I wrote "through" not "on" \- which means that you may still have your
music on your laptop, but you could be listening through your mobile
(streaming through plex, dlna,etc)

I find the audio quality of listening through mobile phones to be far better
than my laptop (and I have a latitude - the highest end of its generation). In
general the music player is of far better quality as well (Poweramp, etc.).

The only drawback I can think of is battery consumption, which is easily
solvable via a USB cable. It also works great because an incoming call will
pause the music and resume when done - as opposed to manually pausing and
resuming on the laptop.

And if you are on earphones with a mic, then you understand the true meaning
of "gapless" \- or do you prefer taking off your foam-covered in-ear 'phones
every time you get a call ?

------
baddox
The thing about loudness compensation is that it only _further reduces_ the
dynamic range of your music collection (unless you have programmatic control
over the analog gain of your amplifier, which you probably don't), so the
arguments for it shouldn't really appeal to dynamic range.

~~~
AndyKelley
The end result is that the music comes out _sounding quieter_ , so the user
ends up increasing the analog gain of their amplifier. This increases dynamic
range because the alternative is having the highly compressed music sound very
loud resulting in users keeping their amplifier gain low.

~~~
baddox
If you take the loudest song in your library, and make it quieter in software,
you have further reduced the dynamic range of that song.

~~~
creeble
That's why ReplayGain doesn't do that. It takes the quietest song in your
library and makes it louder.

~~~
baddox
Which means you have to reduce the dynamic range of the quiet songs.

~~~
creeble
Only if they're clipped after raising the level, which is often unavoidable
but also often not noticeable for the brief transients that end up getting
clipped.

In the end, digital volume leveling can't be lossless. So you don't have to
use it. But for mixed playlists, it's very nice.

~~~
baddox
The argument of whether it would be noticeable is a valid one, but it also
weakens the strict dynamic range argument. All you can do is use a limiter,
which is a special case of a compressor, which is so named precisely because
it limits the dynamic range of a signal.

~~~
creeble
I guess I missed the "strict dynamic range" argument. You can't adjust
amplitude _at all_ without affecting dynamic range, of course.

------
eqbridges
Great idea for a project! I too was a big fan of Amarok, and have been
disappointed by music players since having used it.

One thing I haven't seen mentioned, which Amarok, excelled at but other
players haven't, was dealing with large (>100gb) collections hosted over a
network. Hopefully you'll include this in your testing. As well Amarok allowed
you to store metadata in arbitrary databases (which QT had support for) hosted
on a network, thus allowing for metadata to be shared by computers for a given
account. Quite common nowadays is to use SQLite locally; however SQLite does
not support working over a network :-/

Anyway, kudos and fare-thee-well!

------
aaronem
A general observation, which the comments in this thread have brought to the
point of perceptibility:

Perhaps only in the field of music management and playback is it considered so
reasonable to suggest that an acceptable solution to lousy user interface
design is to modify the otherwise well-formed data presented by that
interface, rather than just to fix the interface and be done with it.

I'm not sure why this is, and I don't mean by it to denigrate people who
develop music player software, but it does seem awfully odd to me by
comparison with pretty much any other specialization of software design.

~~~
AndyKelley
What about the whole "everybody is doing loudness compensation wrong" issue I
pointed out? That's an example of something that is not merely a user
interface design issue.

~~~
aaronem
If you're referring to the comment I'm thinking of, in which you mentioned mpd
not knowing how to read but one format of ReplayGain tags, then it's a good
example of what I'm talking about. The correct solution to that problem is to
teach mpd about other tag formats, not to require that users retag their
entire music libraries to compensate.

Update: The comment I'm thinking of wasn't yours, so presumably it's not the
one to which you're referring. I've looked through the thread, but I'm not
sure to what you _are_ referring. Can you link it, so that I'll be able to
update this comment with a response to what you're actually talking about,
instead of merely to what I incorrectly gathered you were? Thanks!

~~~
AndyKelley
Oh, I meant the original article. I must have misunderstood your comment.

~~~
aaronem
Oh, sorry, I see what you mean now.

I don't know if I agree that that falls within the scope of my plaint, because
as far as I'm concerned, the modern habit of mismastering albums with half a
decibel of dynamic range produces a result which can't reasonably be called
"well-formed". Worse, not only is it broken, it's irretrievably so, because
there is no way to restore the information thrown out in the mastering
process.

(I think that's actually why I misapprehended your question so badly; with
only the most occasional exception, if something's mastered that badly, I
can't stand to listen to it anyway because it's either too quiet to hear or a
constant assault on my eardrums.)

------
lawn
What a great effort you've done! I'm certainly tempted to try it out on a
raspberry. I would appreciate a tutorial article on how to get it running.

------
mrweasel
It may just be me being old fashion, but I haven't seen or used a good music
player since XMMS. Every single new media player seems want to take up a huge
amount of screen space or have a ton of useless feature.

XMMS was great, simple and pretty interface, just add the files you want to
play and you could queue up tracks (A feature that seem to elude iTunes ).

------
johnchristopher
> At some point I plan to write a tutorial article detailing exactly how to
> get this application running on a Raspberry Pi. It's mostly straightforward
> but there are enough "gotchas" here and there that I think it could be a
> useful article.

I'd be really interested in reading that.

------
romainvv
I was wondering what is the differences (pro/cons) between DLNA/UPNP protocols
and your solution ? With a XBMC server, you can play song over network from
any sources thanks to UPNP

~~~
ubercow13
UPnP doesn't work well over the internet

------
jxn
xmms2 seems like it fits the required bill the best, though the project is
pretty stagnant and there's never been a real release. It does seem to get all
the big issues right.

------
FranOntanaya
As simple as Audacious is, I've stuck to it for the LADSPA and Sample Rate
conversion filters. I wouldn't take UI improvements over sound itself.

~~~
AndyKelley
What does Audacious's sample rate conversion filters have over libswresample?

------
callesgg
Really really nice work thought the loudness videos was very interesting.

Personally I have moved on to spotify and more or less abandoned my old music
collection.

------
Edmond
seems like a lot of work...any reason you didn't just hack on something like
rhythmbox? It has an API for interfacing via a browser.

I built a python plugin with a web and android interface a few years back:
[http://code.google.com/p/rhythmote/](http://code.google.com/p/rhythmote/)

Still serves my needs excellently.

~~~
zenbowman
The number one reason is that you learn more when you experiment and try doing
it on your own.

Same reason Ritchie and Thompson didn't continue to try to improve MULTICS.

~~~
mbrock
Well, you learn more about some things and less about some other things.

------
neumann
I will definitely be trying this out. I have been very happy with
gmusicbrowser.

------
kudu
Just wondering, does this modify the actual music files?

~~~
AndyKelley
Currently no. But it's planned that it will:
[https://github.com/andrewrk/groovebasin/issues/30](https://github.com/andrewrk/groovebasin/issues/30)

All modifications to music files will be done in a separate temporary file on
the same device and then rename(2) will be used to atomically overwite the old
file. This way race conditions and power failure have no chance of corrupting
the file.

~~~
kudu
I actually think the current behaviour is a good thing. I wouldn't want my
original music files to be modified.

~~~
AndyKelley
It's planned that all modifications to music files would be on a "suggested
library improvements" pane. In other words, Groove Basin would propose actions
such as writing the updated tags you just typed in to the music files, and the
user would accept or reject these proposals.

So it's a compromise between wanting to take over and help you organize, yet
respecting your file system.

------
thebiglebrewski
Hey way to go Andrew! -Zach

------
Jupiterlyght
Badass. Nicely done, sir.

------
dsirijus
Interesting quest. But princess is in another castle, in bed with Peter
Pawlowski, listening to Zelda soundtrack in foobar2000.

~~~
EC1
For the love of god, WHAT is a good music player for Mac? Going from
Foobar2000 (PC) -> iTunes (MAC) is awful.

~~~
smutticus
I'm relatively happy with Nightingale. Could be better but it works fine for
90% of my needs. [http://getnightingale.com/](http://getnightingale.com/)

~~~
xj9
I used to think Songbird (now Nightingale) was going places. I remember being
_so_ excited when Songbird 0.1a came out! Unfortunately things went downhill
after a couple of years until POTI killed the project and progress on the
community fork has been excruciatingly slow. I want to get involved, but its
hard to know where to start.

------
Dewie
OT:

> Gapless Playback

I find this to be an incredibly annoying feature, when it is the default. For
the most part, I like to listen to songs the way they have been recorded,
especially if I'm listening to albums. In addition, many of the albums that
I've listened to already have somewhat of a gapless playback, in that one song
bleeds into or is immediately cut off by next song. With gapless playback in
the music player, then the small gap between the songs end up just being like
dialing down the volume and then back up again in the span of one fifth of a
second, which sounds silly.

~~~
stan_rogers
Whereas, with most of the albums I listen to, the "cuts" are just time markers
and the music is continuous across tracks, and a lack of gapless playback is
jarring. Classical/baroque, much of classic and progressive rock, a fair
amount of jazz and perhaps the entire genre of ambient/trance work out pretty
much that way.

~~~
Dewie
> Whereas, with most of the albums I listen to, the "cuts" are just time
> markers and the music is continuous across tracks, and a lack of gapless
> playback is jarring.

 _Whereas_? That is exactly what I described in the last part of my post. The
music bleeds into/continues or change mood at exactly the beginning of the
next song. Why "whereas"?

~~~
AndyKelley
Dewie I think you're confusing "gapless playback" and "crossfade playback".
Gapless playback just means playing the songs exactly as you would hear them
on a CD. Groove Basin doesn't even support crossfade playback and I'm not sure
that it ever will.

~~~
Dewie
Yes I think you're right, I'm thinking of the effect where they _try_ to make
the transition between tracks seamless.

