4 ms·
I'm a heavy user of iTunes 10.6.3. The old interface is beautiful, and it syncs music/contacts/calendars to my iPhone and iPod over USB without needing iCloud.
by peterburkimsher 9y ago
I'm a heavy user of iTunes 10.6.3. The old interface is beautiful, and it syncs music/contacts/calendars to my iPhone and iPod over USB without needing iCloud.
Next year I'm planning to rewrite iTunes as a personal project.
Essential features for me are:
- Multiple libraries
- Tags
- Playlists
- Playlist folders
- Sync
- AppleScript
- Mini player
I use iTunes as a general database manager, not only for music. I have a library for Facebook friends, where each person is stored as URL track. Clicking on the track triggers a PHP script, which opens my browser with their profile.
I also have other databases for Raspberry Pi projects, universities & departments, SMS text messages, and Chinese characters (a script on that library is what became https://pingtype.github.io https://pingtype.github.io ).
Before I start this huge project, could anyone tell me about alternatives? I've looked into FileMaker, Access, SQL, MongoDb, etc, but nothing has the ease of use, nested playlist folders, and scriptability of iTunes.
- shakna 9y agoWell of your essential features, the only one lacking in Amarok would be AppleScript, though you can still write scripts for Amarok in QTScript, which is fairly similar to JavaScript. [0] (Amarok runs on Linux, Windows and macOS). For what you're using it for, I'd probably using SQLite, and a mix of DB Browser for SQLite [1], which is kinda like Excel for SQL. DB Browser can also export records to file. So if you had something like watch running on a folder, you can trigger a script as soon as that happens. My vague thought process: DB Browser entry: kind entry play? music KickassSongILike You click KickASSSongILike, and type y in the play box. A Python script, called by watch watching the db, sees the change and uses something like mp123 to play the file. When it's done, or rather when the process for mp123 stops, so you can stop a song playing, it changes play? back to 'n'. But honestly, you'd do a lot better just building it as a GUI app from scratch. Easiest would be Python, which comes with Tk for graphics, and SQLite for database. Probably a weekend to get you 3/4, and then... Well it depends on the hard parts. The hard parts are: * Sync. Sync with what? And how does that thing officially support extensions? Or what workarounds are currently used instead? * AppleScript. AS doesn't get much love anymore, even from Apple. Integrating it isn't an easy thing. As a way to explain how simple most of this is, I'll explain it in terms of SQL: * Multiple libraries = Multiple tables. * Tags = A second table, filled with tags, that you query via JOIN. * Playlists = A second table that references primary keys of individual song records. * Sync = Compare last-updated fields between backup db and current db, then using developer API to update your sync service. [0] https://amarok.kde.org/en https://amarok.kde.org/en [1] http://sqlitebrowser.org/ http://sqlitebrowser.org/
- peterburkimsher 9y agoThanks for replying! I agree that the easiest way is probably to rewrite from scratch. DB Browser is like Excel. That's like seeing a single library playlist with lots of rows with songs on. I need playlist folders, which is a kind of nested data structure. I can drag-and-drop playlists between playlist folders, and also make Smart Playlists. Smart Playlists are basically SQL queries. But SQL databases are flat - I can't have tables inside tables.
- zdkl 9y agoI'm approaching the nested datastructure playlist problem by having playlists be nothing more than a special tag in the existing sqlite table. But then you have to reckon with explosive growth when dealing with that table, especially with (potentially ephemeral) machine generated tags. Anecdotaly, tagging attributes and relationships on a large library is a good way to DIY big-ish data, as my HD learned.
- peterburkimsher 9y agoWhat size is the big-ish data that you're talking about? iTunes slows down noticeably over 30k songs. My Facebook friends database is small by comparison (under 6000), but if I want to include all their Liked Pages, the database size increases to 223,783. The nested structure is really important to me. For example, my friend David is in the lists: Taiwan, Christians, Health & Medicine, KGCC Church, KTL Christian student group. The KGCC and KTL playlists are inside the Taiwan folder. I can use Smart Playlists to sort by the year when I added friends, but I want to manually manage some playlists as well. For example, if I go on holiday to New Zealand and add a new friend, then they belong in the New Zealand list, not the Taiwan list, even though the date added is during my time living in Taiwan. Some playlists are not in any country folder e.g. male/female, Limited Profile. The highly nested nature of the database means Excel isn't suitable, and my brief look at SQL tells me that it would quickly become a mess of tables. There must be some kind of database program that supports nested structure, but I haven't found it yet, and that's why I'm asking here.