Download OpenAPI specification:Download
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.
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.
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.
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.
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:
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
},
. . .
]
}
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.
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"
}
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"
}
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.
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 |
We're here! support@wonder.inc
[- {
- "facetType": "Genre",
- "values": [
- {
- "id": "a9c85d5f-f551-472c-81b2-b46b79082269",
- "name": "Rock",
- "facetType": "Genre"
}, - {
- "id": "a2981962-1d41-49ca-88d2-61ec3ff2384e",
- "name": "Masterworks",
- "facetType": "Genre"
}
]
}
]
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.
[- [
- "masterworks",
- "william tell overture",
- "happy",
- "driving music",
- "funny video"
]
]
Get Dynascores, optionally filtering by facets
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 |
{- "results": [
- {
- "id": 4,
- "name": "Surf Legends",
- "artist": "The Waveriders",
- "facets": [
- {
- "id": "a9c85d5f-f551-472c-81b2-b46b79082269",
- "name": "Rock",
- "facetType": "Genre"
}
], - "sampleDurationMS": 60000,
- "defaultEnding": {
- "endingStartMS": 0,
- "bumpMS": 0
}, - "bpm": 120
}
], - "nextPageKey": "string"
}
Get a list of previously hatched tracks, returned in reverse chronological order
pageKey | string Opaque key returned by prior calls for paging |
limit | integer <int32> [ 10 .. 50 ] Default: 20 Maximum number of items to return |
{- "results": [
- {
- "uuid": "47a5b992-b873-4c10-9526-adfb32d3a62e",
- "dateCreated": "2021-04-09T23:00:00.000Z",
- "name": "Gym workout advertisement track",
- "dynascoreId": 0,
- "durationMS": 30000
}
], - "nextPageKey": "string"
}
Hatch a track after timing adjustments to a Dynascore are complete
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 |
{- "name": "Gym workout advertisement track",
- "dynascoreId": 14,
- "durationMS": 30500,
- "transitionsMS": [
- 7000,
- 15000
], - "pauses": [
- {
- "startMS": 20000,
- "endMS": 21000
}
], - "endTimings": {
- "endingStartMS": 26500,
- "bumpMS": 28500
}
}
{- "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": [
- 7000,
- 15000
], - "pauses": [
- {
- "startMS": 20000,
- "endMS": 21000
}
], - "endTimings": {
- "endingStartMS": 26500,
- "bumpMS": 28500
}
}
Retrieve the details of the track identified by uuid
uuid required | string <uuid> Track UUID |
{- "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": [
- 7000,
- 15000
], - "pauses": [
- {
- "startMS": 20000,
- "endMS": 21000
}
], - "endTimings": {
- "endingStartMS": 26500,
- "bumpMS": 28500
}
}