I was going to post this as a reply to another topic but figured would post as separate topic
I DJ 2-3 Times a week in restaurants, pubs, bars, concerts and festivals (like Bass Coast and Shambhala)
I use Traktor, iTunes, Spotify, Kid3, dbPowerAmp, SoulSeek and my own custom scripts, appleScripts, ObjC Code.
Along with many various help code bits I have been in constant development of the following
- KTelHelperUtilities Framework mainly many categories / extensions to help
- like NSArray
-(BOOL)notEmpty
- so rather than
if (aArray.count > o) then
- use
if (aArray.notEmpty) then
- NSString
-(Range)fullRange
- so for RegEx stuff rather than
NSMakeRange(0, aString.length)
- use
aString.fullRange
- NSString
-(BOOL)matchesAllWordsInString:(NSString*)aString;
- NSString
-(BOOL)matchesAnyWordsInString:(NSString*)aString;
- above takes aString, splits into words, creates aPattern based on
matchingType, creates a regEx from aPattern, evaluates countOfMatches
- many of the above have further categories on each IE
regEx containsMatchesInString;
- also use above to filter an arrayOfStrings, using a [b]NSPredicate[/b] and [b]NSRegularExpression[/b].
- I have a further category on NSObject which extends use of
dictionaryWithValuesForKeys:
- its
-(NSArray*)objectNonNullValuesForKeys:(NSArray*)keys;
- have custom DJSpecific extensions
- using many of the above functions say want to find all tracks in iTunes whoās
title, sortTitle, artists, albumArtist, sortArtist, sortAlbumArtist, album contain aArtistName - once I create aRegEx from aArtistName I create a
- using many of the above functions say want to find all tracks in iTunes whoās
predicateWithBlock
- i get trackKeys for titles, sortTitle,artists, albumArtist, sortArtist, sortAlbumArtist, album
- get aArray of values using
aTrack objectNonNullValuesForKeys:trackKeys
- then use
aRegEx matchesAnyStringsInArray:aArray
to return a boolean for the predicate
- SoulSeek Search App
- automate searching SoulSeek/iTunes/Spotify
- automate searching from currently playing track in iTunes/Spotify
- Spotify Suggestions App
- take Spotify or iTunes playlist and import it, find matching Spotify Tracks
- use Spotify api to get suggested tracks for each track
- set of suggestions based only on that track
- set of suggestions based on that track plus surrounding tracks (-2/theTrack/+2)
- allow user to preview(listen) and rate the suggested tracks
- filter and combine tracks based on user scoring, number of suggestions, saved favorites
and create 5 different playlists based on above
- allow to create Spotify Playlists from these new playlists
- allow to search current iTunes library to find tracks that match these suggestions
- allow to export any tracks not matched to a file to be used for external fetching of tracks
- allow to create iTunes playlists from matched tracks
- will create dummy missing tracks in playlist for easy replacement later
- Traktor Current Track Suggestions App
- program gets the newly loaded track
- searches the Traktor history playlists and suggests best tracks to have played before
within a -5/+5 distance in each history playlist. Scores by distance and count.
- (in future will use Spotify api to see what Spotify suggests based on single track and
the history suggestions, then find matching tracks in iTunes library)
- allows the selection of suggested track to be loaded into Traktor
- iTunes Playlist Helper
- import folders as playlists
- checks for dupes
- allow tagging updates
-etc
My music tagging work flow:
1) Obtain new music
-use SoulSeek and have some scripts to automate this)
2) Use kid3 to preTag my music
- kid3 has some great scripting, regEx, automation that is easily customizable to my needs
- use some QML java scripts to further automate customizing)
- some customizing use regEx to calculate the source file type, and to set custom Traktor Tags
3) Use dBPowerAmp to convert Files
- I convert to m4a 512kb 24Bit / 96kHz files
- only program that can create higher res m4a files
- automated destination location based on source paths
- some automated tag scripting
4) Use custom App to import into iTunes
- can import multiple folders
- placing them in folders and playlists naming them based on the Finders Folder Name / Parent Folder Name
5) Once in iTunes continue further custom tagging:
- set episodeID to the tracks persistentID (persistentID is not stored in tag)
- use Kid3cli script to set Traktorās catalog number tag to the episodeID
[center]^^^^^^^^^ idea is to have each file tagged with itās persistentID in the epsodeIDā¦
this is the only constant in iTunes to use to find the unique file and want to make this availble to other programs
[/center]
6) Tag With my custom iTunes helper program
- gets selected files/playlists into āSource Filesā
- then finds all matching files based on the artists in the source files.
- Places these in āMatched Filesā and groups them by artist.
- For each group calculates best matched genres, similar artists, collab artists etc.
- Then the genre tagging allows many further functions from there.
7) Update the tracks genres
8) Anying Tagging Updates to Tracks Do the Following
- updates a custom taggingHistoryDict.
- with keys of persistentID, currentLocation, oldLocations, changedTags, previousTags etc
- looks like:
{
"currentLocation" : "/Volumes/Tekno/Users/kerry/Music/iTunes/iTunes Media/Music/Stevie Nicks/Bella Donna (Deluxe Edition) HD/Edge of Seventeen.m4a",
"persistentID" : "60AE4F2C160D5672",
"changes" : [
{
"dateCreated" : "2022-07-08, 06:02:45"
},
{
"newValues" : {
"genre" : "Rock - Classic - Pop - Female - 80s - FM Radio"
},
"oldValues" : {
"genre" : "Rock"
},
"dateChanged" : "2022-07-08, 06:02:45"
}
],
"locations" : [
"/Volumes/Tekno/Users/kerry/Music/iTunes/iTunes Media/Music/Stevie Nicks/Bella Donna (Deluxe Edition) HD/Edge of Seventeen.m4a"
]
}
- the above gets stored into the lyrics tag as JSONtext.
8) Update the files finder comments
- with a smaller version of above. Usually just the persistentID, and oldLocation
- i have been moving away from thisā¦
9) If Location Changes Do Following:
- Any time any of my scripts / programs change any tags.
- It compares the old location of the track. To itās new location.
- If it has changed. It sends the persistentID, oldPath, newPath info to
- my KTelTrackRelocator class. Which handles a plist file of a array of dictionaries
- Each dict looks like below:
-
I have been manually using this to help relocate tracks in my Traktor program and will in the future use this to help automate the process for me with Changing XML file in Traktor or performing User Interface scripting automation along with the Finder.
-
Also my tagging scripts and classes if the location changes. It will also automate the process of adding the changed track to a iTunes playlist called ā2022 Master Relocate Listā which I can use to tell which tracks tracks location has changed.
if anyone is interested in any bits or pieces let me know