Make this a command line utility that helps in download and syncing files from SoundCloud to your local hard drive.
There will be a few commands that are able to run from this jar:
- download
- sync
- syncCheck
- syncConfig
Downloads a specific songs or all songs from a particular artist. This command will have a few options of its own:
-s <songUrl>
-a <artistUrl>
-f <folder>
Downloads an individual song (can be present multiple times).
Downloads all songs from the specified artist (can be present multiple times).
Specifies the output folder of where the downloaded songs go (defaults to current directory).
Syncs all folders specified in the sync.config
file (that resides in the current directory the jar is ran from) based upon what is in the local folders and what is on SoundCloud. The way syncing will work is by matching song titles on SoundCloud to local file names.
Example: If an artist A
has songs titled X
, Y
, and Z
on their page and your sync config is pointing to a folder that has files X.mp3
and W.mp3
, then songs Y
and Z
will be downloaded to Y.mp3
and Z.mp3
.
Checks to see which songs from the various folders you have indicated to sync need to be downloaded to be fully synced with SoundCloud. This will use the same logic as the sync
command, however, this will just print out for which songs you are missing for each folder:
Local sync folder: <folderA>
Songs not synced from SoundCloud:
songA
songB
songG
Local sync folder: <folderB>
Songs not synced from Soundcloud:
Local sync folder: <folderC>
Songs not synced from SoundCloud:
songA
Allows users to easily create the sync config by answering questions instead of writing the config by hand. The config will be in a json format similar to the following:
{
"folderConfig": [
{
"artistUrl": "<SC artist url>",
"localFolder": "<local folder path>",
"downloadFolder": "<local folder path>",
"syncOn": <true/false>
},
...
]
}
This is a string property that points to the artists' SC page.
This is a string property that points to the local folder to sync.
This is a string property that points to the local folder where songs will be downloaded to (defaults to localFolder).
This is a boolean property to indicate if this folder should sync.
This file will be generated by asking the user a few questions and dynamically build the config file based on their input. Current thoughts on the questions are:
- Enter the artist's SoundCloud url:
- Enter the local folder to sync:
- Enter the local folder to download to (empty defaults to local sync folder):
- Should this folder sync (y/n):
Add the ability to "tag" songs as they're downloaded with various mp3 information. There is a java library that seems to be able to be able to do this already.
This ability to tag songs would be implemented by adding it to the sync.config
file:
{
"folderConfig": [
{
"artistUrl": "<SC artist url>",
"localFolder": "<local folder path>",
"downloadFolder": "<local folder path>",
"syncOn": <true/false>,
"metadata": {
"album": "<album>",
"artist": "<artist>",
"title": "<title>",
"duration": 19321344,
"genre": "<genre>"
}
},
...
]
}
This is a string property that indicates the song's album.
This is a string property that indicates the song's artist.
This is a string property that indicates the song's title.
This is a number property that indicates the song's duration.
This is a string property that indicates the song's genre.
Obviously adding this metadata changes would require changes both the syncConfig and sync commands.