• Stars
    star
    134
  • Rank 270,967 (Top 6 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 4 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A SoundCloud API v2 wrapper for Node.js

node-soundcloud-downloader

Zack Radisic downloads Node.js CI

Download Soundcloud tracks with Node.js

npm install soundcloud-downloader

I couldn't find any packages that worked with a Discord bot I was working on so I created my own.

Features

  • Extremely fast (interacts directly with the Soundcloud API)
  • Download/manipulate audio from Soundcloud (it is returned as a stream)
  • Get information about tracks and playlists
  • Filter and download specific formats
  • Search and find related tracks/playlists/albums/users

Table of Contents

API / Documentation

Here are the two most commonly used functions:

scdl.download(url, clientID?)

scdl.getInfo(url, clientID?)

  • Returns a JSON object containing the track's information, as well as media links.

Read the docs for more.

Examples

The easiest way to get Soundcloud audio is with the scdl.download(url: string) function, which returns a Promise containing a ReadableStream.

const scdl = require('soundcloud-downloader').default
const fs = require('fs')

const SOUNDCLOUD_URL = 'https://soundcloud.com/askdjfhaklshf'
const CLIENT_ID = 'asdhkalshdkhsf'

scdl.download(SOUNDCLOUD_URL).then(stream => stream.pipe(fs.createWriteStream('audio.mp3')))

You can do anything you like with the stream that is returned, an example with Discord.js:

const client = new Discord.Client()
const url = 'https://soundcloud.com/taliya-jenkins/double-cheese-burger-hold-the'
const clientID = 'asdlkajasd'
const channelID = '123456789'
client.on('ready', () => {
  const channel = client.channels.cache.get(channelID)
  channel.join().then(connection => {
    scdl.download(url, clientID).then(stream => {
      connection.play(stream)
    })
  })
})

You can also create a custom instance of the SCDL class with settings configured to your liking:

const scdlCreate = require('../').create
const axios = require('axios').default

const scdl = scdlCreate({
  clientID: 'adasdasd',
  saveClientID: true,
  filePath: './client_id.json',
  axiosInstance: axios.create()
})

You can view the code for these examples and find more in the example folder.

Client ID

You can obtain a Client ID by visting the Soundcloud website and inspecting network traffic (perhaps with Chrome DevTools or some HTTP proxy software) and looking for any requests to the Soundcloud API. Ex:

https://api-v2.soundcloud.com/me/play-history/tracks?client_id={CLIENT ID IS HERE}&limit=25&offset=0&linked_partitioning=1&app_version=1590494738&app_locale=en

Here is a picture of where you should be able to find it:

To-do

If I have the time and there is enough demand, I am interested in implementing the following functionalities:

  • Audio format selection ✅
  • Ability to use HTTP Live Streaming (HLS) ✅
  • Some more integrations with Discord.js like selecting best format for voice channels

If you have any feature requests, suggestions or questions do not hesistate to post them in the issues section

Disclaimer

I do not support piracy and this package is not designed for circumventing the technological measures employed by SoundCloud preventing unauthorized access to copyrighted works. This package is only for downloading audio you have access to.

More Repositories

1

aussieplusplus

Programming language from down under
Rust
612
star
2

tyvm

An experimental bytecode interpreter / type-checker for type-level Typescript
Zig
430
star
3

go-playground-wasm

A version of play.golang.org that runs completely in the browser
TypeScript
183
star
4

glyph

My own personal code editor built with Rust + OpenGL
Rust
157
star
5

rust-vs-zig

Comparing unsafe Rust vs Zig by writing a bytecode interpreter with GC in both langs
Rust
154
star
6

tyfsm

(wip) simple and typesafe finite automata based state management library. Inspired by zustand and xstate
TypeScript
123
star
7

tether

WIP high-performance code editor inspired by Doom Emacs and neovim. Comes with explosions.
Zig
65
star
8

lofi-cli

Listen to ChilledCow's lofi hip-hop stream from the command line
JavaScript
27
star
9

soundcloud-api

A SoundCloud API v2 wrapper for Go
Go
26
star
10

write-your-own-zod

Write your own Zod from scratch
TypeScript
14
star
11

force-directed-graph

experiment
Rust
11
star
12

bun-macros-flappy-bird

C
5
star
13

prisma2gql

prisma schema 2 graphql schema generator
Haskell
4
star
14

iszacksleeping

A way to actually contact me and hold me accountable to a sleep schedule
TypeScript
3
star
15

toilet-paper-twitter

a stupid graphics experiment
HTML
3
star
16

cheatsheets

TypeScript
2
star
17

rasta

Building a software rasterizer for fun
Rust
2
star
18

downloadsound.cloud-api-go

Go
1
star
19

c-template

Simple C project starter template
C
1
star
20

rust-emscripten-bug

Rust
1
star
21

youtube-rooms-frontend

TypeScript
1
star
22

learning-crdts-rust

Learning and implementing CRDTs in Rust
Rust
1
star
23

downloadsound.cloud-api

TypeScript
1
star
24

youtube-rooms

Go
1
star
25

downloadsound.cloud

TypeScript
1
star
26

sticky

Fixing my broken right arrow key
Objective-C
1
star