This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| music_management [2023/09/24 03:17] – qlyoung | music_management [2026/05/19 03:37] (current) – [Phone] simplify qlyoung | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | I'm a big music enjoyer. What I'm not a big enjoyer of is streaming services. Maybe I'll write another article about that, but the short of it is that instead of paying a tech company to rent temporary access their music library which they pay to license from a label who gives some tiny fraction of their revenue to the artist, I prefer a more traditional model where an artist makes some music, you pay the artist for a copy, and then you own that copy. That way the artist gets the money and you own something in return for your money. | + | ====== music management ====== |
| + | I'm a big music enjoyer. What I'm not a big enjoyer of is streaming services. Maybe I'll write another article about that, but the short of it is that instead of paying a company to rent temporary access | ||
| - | One of the benefits of owning | + | - you find some new music |
| + | - you listen to it a few times to see if you like it | ||
| + | - if you like it, you pay the artist for a copy | ||
| + | - you own that copy | ||
| - | ====== Methods | + | That way the artist gets money for making art and you pay once to own a copy of it instead of renting temporary access. |
| + | |||
| + | Streaming is good for the first two steps. Finding new music is hard, and you have to listen to it a few times at different times, since it might only hit in a certain mood. Starting from music you already like and letting the recommender algorithm drive discovery is a good way to find new music. After that though, I prefer to pay the artist for their work instead of paying rent, and prefer to download the data once rather than every time I want to listen to it. Bandwidth is a limited resource! | ||
| + | |||
| + | One of the benefits of owning music is that you can put it on whatever device you want and use whatever program you prefer to play it. However, if you have multiple devices then getting your music collection available on all of them becomes an exercise in file management. Music also has its own inherent taxonomical structure (artist, album, label etc) that benefits from specific treatment in terms of organization. This article roughly depicts how I do all that. | ||
| + | |||
| + | ===== Methods ===== | ||
| Here's a chart that shows a rough outline of data flow: | Here's a chart that shows a rough outline of data flow: | ||
| - | <code mermaid> | + | < |
| - | flowchart | + | flowchart |
| - | Source -.-> |download| | + | Source -.-> |download| |
| - | W["Windows VM"] | + | beet --> |
| - | | + | |
| - | staging --> |beet import| library | + | laptop <-.-> |syncthing| desktop((" |
| - | library | + | |
| - | end | + | |
| - | subgraph devices["devices_____"] | + | |
| - | | + | |
| - | W -.-> |tunefusion| phone((" | + | |
| - | | + | |
| click phone " | click phone " | ||
| - | </code> | + | </mermaid> |
| In short: | In short: | ||
| - | - Acquire | + | - Download |
| - | - Download it to a " | + | - Run '' |
| - | - Log into the server and run '' | + | |
| - | The rest of the diagram depicts how the 3 devices I play my library | + | Since my music library |
| - | For my desktop and laptop, they have the filesystem where my music library resides mounted using NFS. For my laptop (well, all my devices) this works even when I am on the other side of the planet because network access is via [[https:// | + | ==== Playback ==== |
| - | The phone is a little trickier. Ideally I would like to run a sync daemon in the background on my server and phone that syncs the music directory to the device, but that's not how things work on iOS. For one, background daemons cannot really exist on iOS (there are exceptions to this - iCloud for example - but nothing worth using). For two, there is not really a place to put the music. Due to how sandboxing works on iOS, you need to pick an app to put the music " | + | For playback |
| - | I can already hear you saying, why don't you [[just]] | + | On my iPhone, I use [[https:// |
| + | |||
| + | ==== Phone ==== | ||
| + | |||
| + | The phone is a little tricky. Ideally I would use the same approach as for my desktop and laptop - run a sync program to keep the music library up to date on my iPhone disk. Unfortunately, | ||
| + | |||
| + | - background daemons cannot really exist on iOS | ||
| + | - the concept of a filesystem that is shared between apps does not exist on iOS | ||
| + | |||
| + | Regarding backgrounding, | ||
| + | |||
| + | Even if a sync program was viable on iOS, we would hit another blocker. iOS does not have the concept of a shared filesystem. Apps may only write to their sandboxed filesystems. Consequently any files downloaded by a sync app would not be accessible by a music player app. | ||
| + | |||
| + | The upshot is that to solve this problem you need a music playback app that also has its own syncing service built in. Obviously this is [[https:// | ||
| + | |||
| + | I can already hear you saying, | ||
| - | Anyway, as luck would have it, the [[https:// | + | Anyway, as luck would have it, the [[https:// |
| + | |||
| + | - is Windows only | ||
| + | - is closed source | ||
| + | - costs money | ||
| + | |||
| + | However, it is surprisingly full featured and works very well. Since it's Windows only, I run it inside a windows VM on my hypervisor (which also hosts the file server | ||
| The end result is that every time I open the foobar2000 app on iOS, any new music in my library downloads to my device. After that it's available for local playback. Since my phone is also on Tailscale, this works anywhere. | The end result is that every time I open the foobar2000 app on iOS, any new music in my library downloads to my device. After that it's available for local playback. Since my phone is also on Tailscale, this works anywhere. | ||
| Line 135: | Line 165: | ||
| </ | </ | ||
| - | {{tag> | + | {{tag> |
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International