-
-
Save duggi/4dfada92d8cd92411bd9 to your computer and use it in GitHub Desktop.
| (* Script to record and tag spotify tracks, by Lloyd Moore *) | |
| (* Modified by Tiffany G. Wilson to resolve audio splitting issues, automate starting/stopping, and add recording customization *) | |
| (* Modified by github.com/duggi on 7/18/2014 -- replace slash with dashin new filename to prevent directory write errors *) | |
| (* Snippets for controlling Spotify are from Johnny B on tumblr (http://johnnyb.tumblr.com/post/25716608379/spotify-offline-playlist) *) | |
| (* The idea of using delayed tagging/filename updating is from a guest user on pastebin (http://pastebin.com/rHqY0qg9) *) | |
| (* The only thing to change in the script is the output format; you must change the file extension and the recording format to match *) | |
| (* Run this script once a song you want to record is queued (stopped at beginning) or playing *) | |
| (* Running the script will initiate hijacking, recording and audio playback *) | |
| (* To stop script, pause Spotify or wait for album/playlist to end*) | |
| (* To set id3 tags, use application Kid3 (http://sourceforge.net/projects/kid3/) and copy '%{artist} - %{album} - %{track} - %{title}' from file name to Tag 2 *) | |
| set output_folder to (choose folder with prompt "Please choose an output directory") | |
| set folder_path to POSIX path of output_folder | |
| property file_extension : ".mp3" | |
| -- property file_extension : ".m4a" (* If format is changed to AAC *) | |
| property check_delay : 0.1 (* How often to check for a new track *) | |
| property write_delay : 2 (* How long to wait before updating file name *) | |
| property stop_delay : 1 (* How long to wait before updating final file after playback stops *) | |
| set track_counter to 1 | |
| tell application "Spotify" | |
| if player state is playing then pause | |
| end tell | |
| tell application "Audio Hijack Pro" | |
| activate | |
| set theSession to my getSession() | |
| tell theSession | |
| -- Recording file settings | |
| set output folder to output_folder | |
| set output name format to "%tag_title" | |
| set title tag to track_counter | |
| -- Audio format settings | |
| set recording format to {encoding:MP3, bit rate:256, channels:Stereo, style:VBR} | |
| --set recording format to {encoding:AAC, bit rate:256, channels:Stereo} | |
| end tell | |
| if hijacked of theSession is false then start hijacking theSession | |
| start recording theSession | |
| end tell | |
| set track_counter to (track_counter + 1) | |
| tell application "Spotify" | |
| -- Start playing Spotify from beginning of current track | |
| set player position to 0 | |
| play | |
| set track_name to (name of current track) | |
| set track_artist to (artist of current track) | |
| set track_album to (album of current track) | |
| set track_number to (track number of current track) | |
| repeat until player state is not playing | |
| -- On change of track | |
| if track_name is not equal to (name of current track) then | |
| tell application "Audio Hijack Pro" | |
| tell theSession | |
| set title tag to track_counter | |
| split recording | |
| end tell | |
| end tell | |
| delay write_delay | |
| -- Update the file name from track_counter.mp3 to artist - ... - track.mp3 | |
| my update_filename(track_counter - 1, track_artist, track_name, track_album, track_number, folder_path) | |
| set track_counter to (track_counter + 1) | |
| -- Get new track data | |
| set track_name to name of current track | |
| set track_artist to artist of current track | |
| set track_album to album of current track | |
| set track_number to track number of current track | |
| end if | |
| delay check_delay | |
| end repeat | |
| -- Stop recording and edit final file name once playback has stopped | |
| delay stop_delay | |
| tell application "Audio Hijack Pro" | |
| stop recording theSession | |
| stop hijacking theSession | |
| end tell | |
| my update_filename(track_counter - 1, track_artist, track_name, track_album, track_number, folder_path) | |
| end tell | |
| on replace_chars(this_text, search_string, replacement_string) | |
| set AppleScript's text item delimiters to the search_string | |
| set the item_list to every text item of this_text | |
| set AppleScript's text item delimiters to the replacement_string | |
| set this_text to the item_list as string | |
| set AppleScript's text item delimiters to "" | |
| return this_text | |
| end replace_chars | |
| -- Update file name so it can be tagged using Kid3 | |
| on update_filename(track_counter, track_artist, track_name, track_album, track_number, folder_path) | |
| set old_file to ("\"" & folder_path & track_counter & file_extension & "\"") | |
| set new_file to (track_artist & " - " & track_album & " - " & track_number & " - " & track_name & file_extension & "\"") | |
| set temp_final_file to replace_chars(new_file, "/", "-") | |
| set final_file to ("\"" & folder_path & temp_final_file) | |
| do shell script ("mv " & old_file & " " & final_file) | |
| end update_filename | |
| -- Set Spotify session in Audio Hijack Pro | |
| on getSession() | |
| tell application "Audio Hijack Pro" | |
| set sessionName to "Spotify" | |
| try | |
| set theSession to (first item of (every session whose name is sessionName)) | |
| theSession is not null | |
| on error | |
| set theSession to (make new application session at end of sessions) | |
| set name of theSession to sessionName | |
| end try | |
| end tell | |
| return theSession | |
| end getSession |
I'm getting an error on mine. This happens after I choose the directory. Would you assist me please?
AppleScript Error: -10000
Audio Hijack Pro got an error: AppleEvent handler failed.
Found at character position, length: 784, 16
@muzicktrash looks like that happens when Audio Hijack Pro is already set to be hijacking Spotify. Click on the "Hijack" button to de-activate the hijacking session and try again.
Thanks to all who have worked on this script. Works great except when the song, album, or artist have a single or double quote in them. Any ideas on how to fix this in the replace_chars function?
This one seems to work:
Remove double quotes from artist name, track name and album name as they cause errors
https://gist.github.com/coreyk/390a0a565f2db958f7af
Thank you! This versions works perfectly for me! :-)