Open flight16 opened 9 years ago
Seems cool. I'd be interested to see how much this would overlap with #1386—bi-directional sync could conceivably be useful for other players too. Building this in a player-generic way would be ideal.
An endeavoring git-peruser could find something similar for very far back in the beets revision history. For a time, a file (called itunes.py
, I think?) implemented a partial iTunes XML export for beets libraries.
Re bi-directional sync, there's no limitation in #1386 to not make that happen. The way I imagined it would be something like a -w switch which instead of reading values from an external application into beets would write values from beets into the external application, if supported. Complexity here really depends on the external application.
The storing of player metadata in custom beets fields is something that I don't see easily avoided. It's just much easier and safer to do it this way internally. However that is exposed to the user is a different story, but that's independent of the plugin implementation since it's UI stuff.
Even when talking about iTunes I don't really see the point. Why would you want to constantly translate between different formats in different players? Sounds like a lot of unnecessary complexity to me.
This is a key feature to me. It's needed to allow the single-command regeneration of an iTunes library. (I don't want to fiddle with other export plugins and make sure directory paths match up). It does add complexity to the plugin, but it removes complexity from the user.
There are several formats that iTunes doesn't support, such as FLAC. I like to have my master library as lossless and then transcode when needed. The plugin wouldn't transcode supported formats like mp3.
The transcoding isn't constant. The song is only converted when needed: the first time it is copied and does not yet exist in the destination. (eg. iTunes).
Media Monkey and JRiver Media Center both have similar options to transcode your library to a folder on disk based on a filter of non-supported formats, and then keep it up to date. This is very useful if you have a portable music player that is too small to hold your entire lossless collection.
The storing of player metadata in custom beets fields is something that I don't see easily avoided.
I assumed that beets supports rating and playcount fields. Examining the output of 'beet fields', it seems I was incorrect.
It's just much easier and safer to do it this way internally.
If you expose the mapping to the user, then they could choose what they want to do. For example, I'd place my rating in 'rating', while you might place yours in amarok_rating. My goal in placing it in 'rating' is to create a player-independent library of metadata. I want to avoid player-specific fields and naming in my beets library.
@pprkut It sounds like your aim is to create something more minimal implementation and a bit more manual usage, where I'm aiming for a fully integrated solution that is a bit more complex, but automatic from the user's perspective. If so, I think our designs and use cases might be quite different. Perhaps I will start by building a prototype, and we can see if we can't share some code while building two plugins? What do you think?
It sounds like your aim is to create something more minimal implementation and a bit more manual usage, where I'm aiming for a fully integrated solution that is a bit more complex, but automatic from the user's perspective. If so, I think our designs and use cases might be quite different. Perhaps I will start by building a prototype, and we can see if we can't share some code while building two plugins? What do you think?
Go ahead! Who would I be to try to stop you? It's open-source, go scratch your itch! :)
I'm a Slacker, for me "more manual" means "more powerful", so in that case I agree ;) My aim is not to create a minimal, but a versatile solution. That's why I don't see why one couldn't implement itunes syncing on top of it. But I know too little about itunes to comment on what exactly would be needed.
While it isn't a quite what you described, #1450 does implement a one-way sync (i.e., sync itunes ratings etc. to beets). Maybe it'll help you a bit, @flight16 .
was any progress made on this?
I would be satisfied with a workflow that makes a small portion of my beets library available to iTunes for syncing. transcoding FLAC to AAC. I haven't tried, but regenerating the entire library in iTunes would be too slow to be practical.
To put it another way, I would like an easy workflow to sync FLAC to iOS Music.app.
Necro bumping (it's an open feature request, so I hope it's ok 😀).
I think the feature as described by the OP would be really cool, but maybe it's worth thinking about the simplest useful version of this and building from there.
If a simple iTunes -> beets sync is supported, I think the next logical step would be a simple beets -> iTunes sync. Are there any good resources to start looking at for info on building itunes xml, or previous itunes export projects people can link to, or just other (non-itunes) export code that follows a similar pattern? Thanks!
Use case
You have an iOS device that you want to use to play and rate songs from your beets library.
Assumptions
Workflow A: Typical Workflow
Notes:
Workflow B: Something broke or a configuration changed and you want to force a refresh
Further thoughts
1386 appears to be a one-way sync from a 3rd party player to beets. This plugin would be bi-directional.
1386 syncs metadata only and doesn't handle transcoding (necessary since iTunes doesn't support FLAC).
1386 appears to store 3rd part player metadata in custom beets fields. In this plugin I propose a customizable mapping is exposed so users can shuffle play count and ratings into whatever beets field they choose.