SoundCloudExplode is a library that provides an interface to query metadata of SoundCloud tracks and playlists, as well as to resolve and download streams.
- 📦 NuGet:
dotnet add package SoundCloudExplode(main package)
SoundCloudExplode exposes its functionality through a single entry point — the SoundCloudClient class.
Create an instance of this class and use the provided operations to send requests.
To retrieve the metadata associated with a Soundcloud track, call Tracks.GetAsync(...):
usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();vartrack=awaitsoundcloud.Tracks.GetAsync("https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description");vartitle=track.Title;varduration=track.Duration;You can get the metadata associated with a Soundcloud playlist by calling Playlists.GetAsync(...) method:
usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();// Get a playlist basic informationvarplaylist=awaitsoundcloud.Playlists.GetAsync("https://soundcloud.com/tommy-enjoy/sets/aimer");// Or get playlist and load all related tracks at the same timevarplaylist=awaitsoundcloud.Playlists.GetAsync("https://soundcloud.com/tommy-enjoy/sets/aimer",true);vartitle=playlist.Title;varartworkUrl=playlist.ArtworkUrl;vartracks=playlist.Tracks;
...To get the tracks included in a playlist, call Playlists.GetTracksAsync(...):
usingSoundCloudExplode;usingSoundCloudExplode.Common;varsoundcloud=newSoundCloudClient();varplaylistUrl="https://soundcloud.com/tommy-enjoy/sets/aimer";// Get all playlist tracksvartracks=awaitsoundcloud.Playlists.GetTracksAsync(playlistUrl);// Get only the first 20 playlist tracksvartracksSubset=awaitsoundcloud.Playlists.GetTracksAsync(playlistUrl).CollectAsync(20);// Get only the first 20 playlist tracks (by setting a limit)vartracksSubset=awaitsoundcloud.Playlists.GetTracksAsync(playlistUrl,limit:20);// Setting offsetvartracksSubset=awaitsoundcloud.Playlists.GetTracksAsync(playlistUrl,offset:10,limit:5);You can also enumerate the tracks iteratively without waiting for the whole list to load:
usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();varplaylistUrl="https://soundcloud.com/tommy-enjoy/sets/aimer";awaitforeach(vartrackinsoundcloud.Playlists.GetTracksAsync(playlistUrl)){vartitle=track.Title;varduration=track.Duration;}If you need precise control over how many requests you send to SoundCloud, use Playlists.GetTrackBatchesAsync(...) which returns tracks wrapped in batches:
usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();varplaylistUrl="https://soundcloud.com/tommy-enjoy/sets/aimer";// Each batch corresponds to one requestawaitforeach(varbatchinsoundcloud.Playlists.GetTrackBatchesAsync(playlistUrl)){foreach(vartrackinbatch.Items){vartitle=track.Title;varduration=track.Duration;}}Note: Use the same method as retrieving playlists to get albums because they are the same.
You can execute a search query and get its results by calling Search.GetResultsAsync(...). Each result may represent either a track, a playlist, an album, or a user, so you need to apply pattern matching to handle the corresponding cases:
usingSoundCloudExplode;usingSoundCloudExplode.Common;varsoundcloud=newSoundCloudClient();awaitforeach(varresultinsoundcloud.Search.GetResultsAsync("banda neira")){// Use pattern matching to handle different results (tracks, playlists, users)switch(result){caseTrackSearchResulttrack:{varid=track.Id;vartitle=track.Title;varduration=track.Duration;break;}// NOTE: Soundcloud handles playlist and albums the same way.casePlaylistSearchResultplaylist:{varid=playlist.Id;vartitle=playlist.Title;break;}caseUserSearchResultuser:{varid=user.Id;vartitle=user.Title;varuserName=user.Username;varfullName=user.FullName;break;}}}To limit the results to a specific type, use Search.GetTracksAsync(...), Search.GetPlaylistsAsync(...), or Search.GetUsersAsync(...)
usingSoundCloudExplode;usingSoundCloudExplode.Common;varsoundcloud=newSoundCloudClient();vartracks=awaitsoundcloud.Search.GetTracksAsync("banda neira");varplaylists=awaitsoundcloud.Search.GetPlaylistsAsync("banda neira");varusers=awaitsoundcloud.Search.GetUsersAsync("banda neira");usingSystem;usingSystem.IO;usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();vartrack=awaitsoundcloud.Tracks.GetAsync("https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description");vartrackName=string.Join("_",track.Title.Split(Path.GetInvalidFileNameChars()));awaitsoundcloud.DownloadAsync(track,$@"{Environment.CurrentDirectory}\Download\{trackName}.mp3");You can request the download url for a particular track by calling Tracks.GetDownloadUrlAsync(...):
usingSoundCloudExplode;varsoundcloud=newSoundCloudClient();vartrack=awaitsoundcloud.Tracks.GetAsync("https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description");vardownloadUrl=awaitsoundcloud.Tracks.GetDownloadUrlAsync(track);