Dynascore (1.0.0)

Download OpenAPI specification:Download

Get to Know Dynascore

Dynascore is a dynamic music engine that allows filmmakers to quickly and easily score video. With Dynascore you can choose from a rich library of original and classic scores, set a video length, and add pauses, transitions, and other timing markers, and our proprietary algorithm magically transforms it. It's like having your own personal composer.

Dynascore API

We designed the Dynascore API for our own use, but also for yours! The Dynascore desktop application and Premiere Pro extension are built on top of the Dynascore REST API, which allows you to integrate dynamic tracks into your workflow or platform. We look forward to seeing what you do with it.

Accounts and Authentication

To get access to the Dynascore API, sign up for a Wonder account. Each account allows you to invite as many members as you like, although authentication and usage tracking are tied to the account, not the members within an account. Once you’re logged in to your Wonder account, visit the Developer tab, and you’ll be able to enter payment information and then generate a unique API key, as well as manage any keys you’ve already generated. Once you start Composing and Hatching Tracks as described below, you’ll be charged at the end of each month according to the number of minutes of music you create.

Example Use Case: A Car Commercial

Let’s say you’ve filmed a car commercial that is 60 seconds long. You want to add music to it that is peppy but also traditional. You need a lull in the music to happen from 27-32 seconds, when the couple in the car share a witty joke. You need a musical transition at 10 seconds when a bird flies overhead, and 45 seconds when the car suddenly takes a big curve. The audio should have a mini flourish beginning at 4 seconds before the end, and begin to fade out on a bump note 2 seconds before the end.

Step 1: Search for a Dynascore

First, you’ll see what music is available in the Dynascore library that sounds right for your commercial. The Dynascore search logic is based on strings, which are parsed by the Dynascore engine into “facets,” such as genre and mood. All Dynascores have multiple facets that were added by Dynascore’s team of composers. You can search by multiple facets with a single string. In the example below, we’ll search for a piece of music that is both “happy” and a “masterwork.”

The types of facets are:

  • Genre
  • Subgenre
  • Mood
  • Video Theme
  • Special Occasion
  • Musical Attribute
  • Instrument
  • Tempo
  • Time Signature

You can also choose the number of responses you’ll get in a search, from 10 to 50, with 20 as the default.

You’ll get back a set of Dynascores that meet your search criteria with information about each one. Each Dynascore also has the URL of a sample WAV file so you can listen to a representative sample and decide if it’s the right music for your video.

curl -X 'GET' \
'https://dynascore.wonder.inc/api/v1/dynascores?search=masterworks%20happy' \
-H 'X-API-KEY: your_api_key'
{
  "results": [
    {
      "id": 10,
      "name": "Carmen - Les Toreadors",
      "artist": "Georges Bizet",
      "facets": [
        { "id": "1c887b93-50db-41f6-bdb2-783ab3cfc27f", "name": "Opera", "facetType": "Subgenre" },
        { "id": "3169306d-ad6b-40e6-916d-aa44b0af7fba", "name": "Fun", "facetType": "Mood" },
        . . .
      ],
      "sampleWav": "https://dynascore.wonder.inc/downloads/dynascores/verylongstring",
      "sampleDurationMS": 130000,
      "defaultEnding": { "endingStartMS": 5000, "bumpMS": 2000 },
      "bpm": 125
    },
    . . .
  ]
}

Step 2: Compose a Track

Once you’ve chosen a Dynascore, you’ll compose a track by adding timing markers that match your video. To do this, you’ll make a POST request to /tracks with a JSON request body that includes the below parameters. Note that there can be multiple transitions and pauses, and that pauses require a beginning and end time.

To help visualize a set of timings, in the below graphic you’ll see musical transitions for your car commercial track at 10s and 45s, the pause at 27-32s, the flourish beginning at 56s, and the bump starting at 58s and ending in silence at 60s.

Dynascore sample track visualization with indications of transitions, pauses and ending marker

If any of your timing parameters aren’t spaced correctly, your POST request will get a helpful error message explaining what needs to be changed.

curl -X 'POST' \
'https://dynascore.wonder.inc/api/v1/tracks' \
-H 'accept: application/json' \
-H 'X-API-KEY: your_api_key' \
-H 'Content-Type: application/json' \
-d '{
  "name": "API track 2",
  "dynascoreId": 10,
  "durationMS": 60000,
  "transitionsMS": [10000, 45000],
  "pauses": [{ "startMS": 27000, "endMS": 32000 }],
  "endTimings": { "endingStartMS": 56000, "bumpMS": 58000 }
}'
{
  "uuid": "458cd62c-2191-47c6-99f4-0778d1ab9d9d",
  "dateCreated": "2021-03-25T20:47:11.028Z",
  "name": "API track 2",
  "wav": "https://dynascore.wonder.inc/downloads/dynascores/verylongstring",
  "dynascoreId": 10,
  "durationMS": 60000,
  "transitionsMS": [10000, 45000],
  "pauses": [{ "startMS": 27000, "endMS": 32000 }],
  "endTimings":{ "endingStartMS": 56000, "bumpMS": 58000 },
  "percentComplete":  0.05,
  "status": "creating"
}

Step 3: Watch Your Track Hatch

When you make the above POST request, the Dynascore engine will “hatch” your track, which means it rearranges the score according to your timing requirements. The hatching process typically takes 1-2 minutes. You can see the progress using the track’s UUID and /tracks or by logging in to the Dynascore application.

curl -X 'GET' \
'https://dynascore.wonder.inc/api/v1/tracks/458cd62c-2191-47c6-99f4-0778d1ab9d9d' \
-H 'accept: application/json' \
-H 'X-API-KEY: your_api_key'
{
  "uuid": "458cd62c-2191-47c6-99f4-0778d1ab9d9d",
  "dateCreated": "2021-03-25T20:47:11.000Z",
  "name": "API track 2",
  "wav": "https://dynascore.wonder.inc/downloads/dynascores/verylongstring",
  "dynascoreId": 10,
  "durationMS": 60000,
  "transitionsMS": [10000, 45000],
  "pauses": [{ "startMS": 27000, "endMS": 32000 }],
  "endTimings": { "endingStartMS": 56000, "bumpMS": 58000 },
  "percentComplete": 1,
  "status": "complete"
}

Step 4: Listen!

Once your custom track is hatched, the status will be set to complete, and it will be retrievable using its UUID with the same /tracks request you used to view hatching progress. You can then download it using the custom WAV URL, or you and your team can review and download it and all tracks in your Dynascore application interface.

API Pricing

Dynascore API usage is billed monthly based on how many minutes of track you hatched. For example, if you compose and hatch three 60-second tracks, you’ll be billed for three minutes. As you generate more and more tracks, you’ll automatically get volume discounts.

Quantity Price Per Minute
For the first 1 to 100 $0.75
For the next 101 to 500 $0.40
For the next 501 to 2,000 $0.35
For the next 2,001 to 7,000 $0.30
For the rest $0.25

Need Help?

We're here! support@wonder.inc

Authentication

ApiKeyAuth

Security Scheme Type API Key
Header parameter name: X-API-KEY

Facet

Get all facets

Authorizations:

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Search

Get search examples

Get a list of example search queries that can be used to filter Dynascores via natural language. Searches are not limited to just the returned examples.

If displaying search examples to end users, it is recommended to show either some or all examples in a random order so users can see a variety of different examples over time.

Authorizations:

Responses

Response samples

Content type
application/json
[
  • [
    ]
]

Dynascore

Get Dynascores

Get Dynascores, optionally filtering by facets

Authorizations:
query Parameters
search
string
Example: search=Chill pop song with acoustic guitar

A natural language string to use for searching the Dynascore library

id
number
Example: id=14

The ID of the Dynascore to retrieve

pageKey
string

Opaque key returned by prior calls for paging

limit
integer <int32> [ 10 .. 50 ]
Default: 20

Maximum number of items to return

Responses

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "nextPageKey": "string"
}

Track

Get tracks

Get a list of previously hatched tracks, returned in reverse chronological order

Authorizations:
query Parameters
pageKey
string

Opaque key returned by prior calls for paging

limit
integer <int32> [ 10 .. 50 ]
Default: 20

Maximum number of items to return

Responses

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "nextPageKey": "string"
}

Create track

Hatch a track after timing adjustments to a Dynascore are complete

Authorizations:
Request Body schema: application/json
dynascoreId
required
integer

ID of the Dynascore used to create this track

durationMS
required
integer

Length of track in milliseconds. durationMS must be at least 8000 ms.

required
object

Timing in milliseconds for the ending, which is the final musical sequence of a track. endingStartMS must be at least 5000 ms after any transitionMS or pause endMS and between 1000 - 5000 ms before the bumpMS. bumpMS must be between 1000 - 3000 ms before the durationMS.

name
string

User-provided string

transitionsMS
Array of integers

Timing in milliseconds from track start for each transition marker

Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "Gym workout advertisement track",
  • "dynascoreId": 14,
  • "durationMS": 30500,
  • "transitionsMS": [
    ],
  • "pauses": [
    ],
  • "endTimings": {
    }
}

Response samples

Content type
application/json
{
  • "uuid": "47a5b992-b873-4c10-9526-adfb32d3a62e",
  • "dateCreated": "2021-04-09T23:00:00Z",
  • "queueMessage": "Your track is queued for rendering",
  • "percentComplete": 0.3125,
  • "status": "creating",
  • "errorMessage": "lastNote is too far from end of track",
  • "name": "Gym workout advertisement track",
  • "dynascoreId": 14,
  • "durationMS": 30500,
  • "transitionsMS": [
    ],
  • "pauses": [
    ],
  • "endTimings": {
    }
}

Get details of a track

Retrieve the details of the track identified by uuid

Authorizations:
path Parameters
uuid
required
string <uuid>

Track UUID

Responses

Response samples

Content type
application/json
{
  • "uuid": "47a5b992-b873-4c10-9526-adfb32d3a62e",
  • "dateCreated": "2021-04-09T23:00:00Z",
  • "queueMessage": "Your track is queued for rendering",
  • "percentComplete": 0.3125,
  • "status": "creating",
  • "errorMessage": "lastNote is too far from end of track",
  • "name": "Gym workout advertisement track",
  • "dynascoreId": 14,
  • "durationMS": 30500,
  • "transitionsMS": [
    ],
  • "pauses": [
    ],
  • "endTimings": {
    }
}