Skip to content

ericcarraway/soundslice-data-api

Repository files navigation

soundslice-data-api

Unofficial Node.js client for the Soundslice data API

1. Install

https://www.npmjs.com/package/@percuss.io/soundslice-data-api

$ npm install @percuss.io/soundslice-data-api

2. Import & Instantiate the Client

// Soundslice data API keys from
// https://www.soundslice.com/help/data-api/
const { SOUNDSLICE_APPLICATION_ID, SOUNDSLICE_PASSWORD } = process.env;

// create an instance of the Soundslice data API client
const apiClient = require('@percuss.io/soundslice-data-api').default({
  SOUNDSLICE_APPLICATION_ID,
  SOUNDSLICE_PASSWORD,
});

3. Usage

See the examples folder on GitHub for detailed usage examples.

apiClient.listSlices().then(handleSuccess).catch(handleError);

function handleSuccess(res) {
  const { data } = res;

  console.log(data);
}

function handleError(err) {
  const { response } = err;

  console.error(response.status);
  console.error(response.statusText);
}

Client Methods

Each method returns an Axios Promise.

NOTE: Not all API methods have been implemented yet.

createSlice(paramsObj)

// all params are optional
apiClient.createSlice({
  // "Title" in Soundslice's form modal
  name: 'The Quick Brown Fox',

  artist: 'Lazy Dog',

  // allow embedding on whitelist domains
  // disabled when omitted
  embed_status: 4,

  // the folder in which to create the slice
  // created in the root folder when omitted
  folder_id: '12345',

  // allow printing
  // disallowed when omitted
  print_status: 3,

  // viewable by anyone who knows its URL
  // private when omitted
  status: 3,
})

duplicateSliceByScorehash(scorehash)

  • Deletes the slice with scorehash scorehash, including all its associated data such as recordings.
  • Soundslice documentation: "Delete slice"
apiClient.duplicateSliceByScorehash('abcde')

deleteSliceBySlug(slug) (deprecated)

  • DEPRECATED Use duplicateSliceByScorehash instead.
  • Deletes the slice with slug slug.
apiClient.deleteSliceBySlug('123456')

listSlices()

  • Retrieves metadata for all slices in your account.
  • Soundslice documentation: "List slices"
  • This method takes no arguments.
apiClient.listSlices()

getSliceByScorehash(scorehash)

  • Retrieves metadata for the slice with scorehash scorehash.
  • Soundslice documentation: "Get slice"
apiClient.getSliceByScorehash('abcde')

getSliceBySlug(slug) (deprecated)

  • DEPRECATED Use getSliceByScorehash instead.
  • Retrieves metadata for the slice with slug slug.
apiClient.getSliceBySlug('123456')

getSliceNotationByScorehash(scorehash)

  • Retrieves the original notation file for the slice with scorehash scorehash.
  • Soundslice documentation: "Get slice’s notation"
apiClient.getSliceNotationByScorehash('abcdef')

getSliceNotationBySlug(slug)

apiClient.getSliceNotationBySlug('123456')

moveSliceToFolder(paramsObj)

apiClient.moveSliceToFolder({
  // Required - The slice's slug.
  slug: '123456',

  // Required - The ID of the new folder.
  // Use 0 (zero) to move the slice to your account's root folder.
  folder_id: '2048',

  // Optional - The ID of the user account to move this slice into.
  // This will only work for the ID of an organization you belong to.
  // If not provided, this value will default to the user you're accessing the
  // API with.
  user_id: 4,
})

duplicateSliceByScorehash(scorehash)

  • Duplicates the slice with the scorehash scorehash.
  • Soundslice documentation: "Duplicate slice"
apiClient.duplicateSliceByScorehash('C1FVc')

getSliceRecordingsByScorehash(scorehash)

apiClient.getSliceRecordingsByScorehash('HD8Nc')

getSliceRecordingsBySlug(slug) (deprecated)

  • DEPRECATED Use getSliceRecordingsByScorehash instead.
  • Gets data about all recordings in the slice with slug slug.
apiClient.getSliceRecordingsBySlug('123456')

reorderSliceRecordings(paramsObj)

  • Reorder a slice's recordings.
  • Sets the order of the recordings in the slice with a given scorehash.
  • Soundslice documentation: "Reorder slice’s recordings"
apiClient.reorderSliceRecordings({
  // The slice whose recordings you'd like to reorder.
  scorehash: 'abcde',

  // An array of recording IDs in your requested order.
  // **OR** a string of recording IDs separated by commas.
  //
  // The first recording ID is the top-most recording in the Soundslice UI, and so forth.
  // The last recording ID is the default.
  // Every recording in the slice must be included in this data.
  order: [222226, 222227, 222225],

  // Optionally, pass a comma-delimited string:
  // order: '222226,222227,222225'
})

changeRecording(paramsObj)

  • Changes data for the recording with ID recordingId.
  • It's possible change a recording's name, and/or source_data, and/or hls_url.
  • Makes a POST request with the given parameters.
  • Other than recordingId, all params are optional.
  • If you don’t want to change a particular value, simply don't send its key with the request.
  • Soundslice documentation: "Change recording"
apiClient.changeRecording({
  // Required
  recordingId: 123456,

  // The attribute of the recording that you'd like to change.
  name: 'Changed Recording Name',

  // Optionally, 'source_data' can be changed if `source` is 3 or 8.

  // Optionally, 'hls_url' can be changed if `source` is 3.
})

deleteRecordingByRecordingId(recordingId)

  • Deletes the recording with the given recordingId, including all its associated data such as syncpoints and uploaded audio.
  • Soundslice documentation: "Delete recording"
apiClient.deleteRecordingByRecordingId('123456')

getSyncpointsByRecordingId(recordingId)

apiClient.getSyncpointsByRecordingId('123456')

putRecordingSyncpoints(paramsObj)

apiClient.putRecordingSyncpoints({
  // Required
  recordingId: '494055',

  // Required - an array of syncpoint arrays
  //   each entry is an array with the following numbers:
  //   index 0 - bar (required)
  //   index 1 - time (required)
  //   index 2 - percentage into the bar (optional)
  //             between 0 & 480 (50% is 240)
  syncpoints: [
    [0, 0],
    [1, 0.57],
    [1, 0.8, 240],
    [2, 1.3],
  ],

  // Optional - floating-point number
  // crop_start: 59.0,

  // Optional - floating-point number
  // crop_end: 65.0,
})

createFolder(paramsObj)

apiClient.createFolder({
  // Required - The name of the folder.
  name: 'New Example Folder',

  // Optional - Integer. The folder's parent ID.
  // Use this if you want to nest a folder within another one.
  parent_id: 12345,
})

renameFolder(paramsObj)

apiClient.renameFolder({
  // Required - The folder's ID.
  folderId: '12345',

  // Required - The new name of the folder.
  name: 'Renamed Folder',
})

deleteFolderByFolderId(folderId)

  • Deletes the given folder within your account’s slice manager.
  • The folder must be empty. It can’t contain any slices or other folders.
  • Soundslice documentation: "Delete folder"
apiClient.deleteFolderByFolderId('12345')

listFolders()

  • Lists top-level folders within your account’s slice manager.
  • Soundslice documentation: "List folders"
  • This method takes no arguments.
apiClient.listFolders()

listSubfoldersByParentId(parentId)

  • List subfolders within a given parent folder.
  • Soundslice documentation: "List folders"
apiClient.listSubfoldersByParentId('12345')

Methods for Uploading Media

Uploading media is a multi-step process. Here's a high-level example of a three-step process to upload a recording:

  • STEP 1: Call apiClient.createRecording with the slug of the slice. This will return an object with an id property of the new recording.
  • STEP 2: Call apiClient.getRecordingUploadUrlByRecordingId with the id from step 1 as recordingId. This will return an object with a url property.
  • STEP 3: Call apiClient.uploadFile with the url from step 2 as uploadUrl.

Uploading Notation

  • STEP 1: Call apiClient.getNotationUploadUrlByScorehash with the scorehash of the slice. This will return an object with a url property.
  • STEP 2: Call apiClient.uploadFile with the url from step 1 as uploadUrl.

See the examples folder on GitHub for information about using these methods.

Versioning

Until this package reaches a 1.0 release, breaking changes may be released.

BREAKING CHANGES

  • Starting with v0.14.0, environments using a CommonJS import system (i.e. vanilla Node.js with require statements) may need to append .default when importing this package.

About

Unofficial Node.js client for the Soundslice data API

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published