/scdl-core-js

Module for SoundCloud to download and get info tracks and playlists. Support Typescript and Javascript.

Primary LanguageTypeScriptMIT LicenseMIT

scdl-core

  • Module for SoundCloud to download and get info tracks and playlists.
  • Support Typescript and Javascript.

Usage

const fs = require("fs");
const { SoundCloud } = require("scdl-core");

await SoundCloud.connect();
const stream = await SoundCloud.download(
  "https://soundcloud.com/martingarrix/martin-garrix-feat-bonn-no-sleep"
);
stream.pipe(fs.createWriteStream("song.mp3"));

API

connect

// Used to get the SoundCloud client_id. Call 1 time at the top of your app.
const { SoundCloud } = require("scdl-core");
await SoundCloud.connect();
await SoundCloud.download(
  "https://soundcloud.com/martingarrix/martin-garrix-feat-bonn-no-sleep"
);
stream.pipe(fs.createWriteStream("song.mp3"));

search

const result = await SoundCloud.search({
  query: string,
  limit?: number, // Default: 20
  offset?: number, // Default: 0
  filter?: 'all' | 'albums' | 'playlists' | 'users' | 'tracks' // Default: "all"
});

tracks

getTrackByIds

const ids = [578933490, 499766382];
const tracks = await SoundCloud.tracks.getTracksByIds(ids);

getTrack

const permalink =
  "https://soundcloud.com/martingarrix/martin-garrix-feat-bonn-no-sleep";
const track = await SoundCloud.tracks.getTrack(permalink);

getTrending

const trendingTracks = await SoundCloud.tracks.getTrending({
  limit?: number, // Default: 20
  offset?: number // Default: 0
});

playlists/albums

getPlaylist/getAlbum

const permalink =
  "https://soundcloud.com/martingarrix/sets/martin-garrix-matisse-sadko";
const playlist = await SoundCloud.playlists.getPlaylist(permalink);

users

getUser

const permalink = "https://soundcloud.com/martingarrix";
const user = await SoundCloud.users.getUser(permalink);

download

const permalink =
  "https://soundcloud.com/martingarrix/martin-garrix-feat-bonn-no-sleep";
const stream = await SoundCloud.download(permalink);
stream.pipe(fs.createWriteStream("song.mp3"));

// For streaming, you can customize the `highWaterMark` value to reduce lag if the internet is not good.
// Example:
const stream = await SoundCloud.download(permalink, {
  highWaterMark: 1 << 25, // 32Mb, default is 16kb
});

Use with Discord.js

// Discord.js v12
const voiceChannel = message.member.voiceChannel;
voiceChannel
  .join()
  .then((connection) => {
    SoundCloud.download(trackPermalink).then((stream) => {
      connection.play(stream);
    });
  })
  .catch((err) => console.log(err));
// Discord.js v13
const audioPlayer = createAudioPlayer();
const voiceConnection = joinVoiceChannel({
  channelId,
  guildId,
  adapterCreator,
});
voiceConnection.subscribe(audioPlayer);
const stream = await SoundCloud.download(SONG_URL);
const audioResource = createAudioResource(stream);
audioPlayer.play(audioResource);

Install

npm install scdl-core --save

Or for Yarn users:

yarn add scdl-core

License

MIT