Python
Install
pip install resemble
Usage
Authentication
Before using the library, set your api key.
1
2
3
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
Projects
Get all projects
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
page = 1
page_size = 10
response = Resemble.v2.projects.all(page, page_size)
projects = response['items']
Create a project
1
2
3
4
5
6
7
8
9
10
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
name = 'My project'
description = 'My description'
is_archived = False
is_collaborative = False
response = Resemble.v2.projects.create(name, description, is_collaborative, is_archived)
project = response['item']
Update a project
1
2
3
4
5
6
7
8
9
10
11
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
name = 'My project (archived)'
description = 'My description (this project has been archived)'
is_archived = True
is_collaborative = False
response = Resemble.v2.projects.update(project_uuid, name, description, is_collaborative, is_archived)
project = response['item']
Get a project
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
response = Resemble.v2.projects.get(project_uuid)
project = response['item']
Delete a project
1
2
3
4
5
6
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
response = Resemble.v2.projects.delete(project_uuid)
Voices
Get all voices
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
page = 1
page_size = 10
response = Resemble.v2.voices.all(page, page_size)
voices = response['items']
Create a voice
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
name = 'Test Voice'
response = Resemble.v2.voices.create(name, dataset_url="http://../dataset.zip", callback_uri="http://example.com/cb")
voice = response['item']
Build a voice
1
2
3
4
5
6
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
response = Resemble.v2.voices.build(voice_uuid)
Get a voice
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
response = Resemble.v2.voices.get(voice_uuid)
voice = response['item']
Delete a voice
1
2
3
4
5
6
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
response = Resemble.v2.voices.delete(voice_uuid)
Recordings
Get all recordings
1
2
3
4
5
6
7
8
9
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
page = 1
page_size = 10
response = Resemble.v2.recordings.all(voice_uuid, page, page_size)
recordings = response['items']
Create a recording
1
2
3
4
5
6
7
8
9
10
11
12
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
name = 'recording'
text = 'This is a test'
is_active = True
emotion = 'neutral'
with open("path/to/audio.wav", 'rb') as file:
response = Resemble.v2.recordings.create(voice_uuid, file, name, text, is_active, emotion)
recording = response['item']
Update a recording
1
2
3
4
5
6
7
8
9
10
11
12
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
recording_uuid = '<uuid>'
name = 'recording'
text = 'This is a test'
is_active = True
emotion = 'neutral'
response = Resemble.v2.recordings.update(voice_uuid, recording_uuid, name, text, is_active, emotion)
recording = response['item']
Get a recording
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
recording_uuid = '<recording_uuid>'
response = Resemble.v2.recordings.get(voice_uuid, recording_uuid)
recording = response['item']
Delete a recording
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
voice_uuid = '<voice_uuid>'
recording_uuid = '<recording_uuid>'
response = Resemble.v2.recordings.delete(voice_uuid, recording_uuid)
Clips
Get all clips
1
2
3
4
5
6
7
8
9
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
page = 1
page_size = 10
response = Resemble.v2.clips.all(project_uuid, page, page_size)
clips = response['items']
Create a clip (sync)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
voice_uuid = '<voice_uuid>'
body = 'This is a sync test'
response = Resemble.v2.clips.create_sync(
project_uuid,
voice_uuid,
body,
title=None,
sample_rate=None,
output_format=None,
precision=None,
include_timestamps=None,
is_archived=None,
raw=None
)
clip = response['item']
Create a clip (async)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
voice_uuid = '<voice_uuid>'
callback_uri = 'https://example.com/callback/resemble-clip'
body = 'This is an async test'
response = Resemble.v2.clips.create_async(
project_uuid,
voice_uuid,
callback_uri,
body,
title=None,
sample_rate=None,
output_format=None,
precision=None,
include_timestamps=None,
is_archived=None
)
clip = response['item']
Create a clip (streaming)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
# It's very important that you configure the resemble library with the syn_server_url. Streaming will not
# work otherwise. You can obtain this URL by contacting resemble.
Resemble.syn_server_url('<syn_server_url>')
project_uuid = '<project_uuid>'
voice_uuid = '<voice_uuid>'
body = 'This is a streaming test'
try:
for chunk in Resemble.v2.clips.stream(project_uuid, voice_uuid, body):
# handle the returned chunk of data contained in the chunk variable
# The chunk variable is a byte array of shorts (int 16) representing a chunk of a WAV audio file.
pass
except:
# handle exceptions
pass
Update a clip (async)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
clip_uuid = '<clip_uuid>'
voice_uuid = '<voice_uuid>'
callback_uri = 'https://example.com/callback/resemble-clip'
body = 'This is an updated async test'
response = Resemble.v2.clips.update_async(
project_uuid,
clip_uuid,
voice_uuid,
callback_uri,
body,
title=None,
sample_rate=None,
output_format=None,
precision=None,
include_timestamps=None,
is_archived=None
)
clip = response['item']
Get a clip
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
clip_uuid = '<clip_uuid>'
response = Resemble.v2.clips.get(project_uuid, clip_uuid)
clip = response['item']
Delete a clip
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '<project_uuid>'
clip_uuid = '<clip_uuid>'
response = Resemble.v2.clips.delete(project_uuid, clip_uuid)
Batch
Get all batches
1
2
3
4
5
6
7
8
9
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '..'
page = 1
page_size = 10 # optional parameter
response = Resemble.v2.batches.all(project_uuid, page, page_size)
batches = response['items']
Create a batch
Without title for each clip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '..'
voice_uuid = '..'
# you can pass an additional options object as the last parameter with following structure. each option is optional
# refer https://docs.app.resemble.ai/docs/generate_speech/action_synthesize/resource_batch/create for more info
# options = {
# 'callback_uri': <CALLBACK_URI>
# 'precision': 'PCM_32' | 'PCM_24' | 'PCM_16' | 'MULAW'
# 'sample_rate': 8000 | 16000 | 22050 | 44100
# 'output_format': 'wav' | 'mp3'
# }
response = Resemble.v2.batches.create(
project_uuid,
voice_uuid,
["Content A", "Content B", "Content C"]
)
With title for each clip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '..'
voice_uuid = '..'
# you can pass an additional options object as the last parameter with following structure. each option is optional
# refer https://docs.app.resemble.ai/docs/generate_speech/action_synthesize/resource_batch/create for more info
# const options = {
# 'callback_uri': <CALLBACK_URI>
# 'precision': 'PCM_32' | 'PCM_24' | 'PCM_16' | 'MULAW'
# 'sample_rate': 8000 | 16000 | 22050 | 44100
# 'output_format': 'wav' | 'mp3'
# }
response = Resemble.v2.batches.create(
project_uuid,
voice_uuid,
[["Title A", "Content A"], ["Title B", "Content B"], ["Title C", "Content C"]]
)
Get a batch
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '..'
voice_uuid = '..'
response = Resemble.v2.batch.get(project_uuid, batch_uuid)
Delete a batch
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
project_uuid = '..'
voice_uuid = '..'
response = Resemble.v2.batch.delete(project_uuid, batch_uuid)
Phoneme
Get all phonemees
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
page = 1
page_size = 10 # optional parameter
response = Resemble.v2.phonemes.all(page, page_size)
phonemes = response['items']
Create a phoneme
1
2
3
4
5
6
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
response = Resemble.v2.phonemes.create('Vodaphone', 'Voduhphone')
phonemes = response['items']
Delete a phoneme
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
phoneme_uuid = '...'
response = Resemble.v2.phonemes.delete(phoneme_uuid)
Term Substitution
Get all term substitutions
1
2
3
4
5
6
7
8
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
page = 1
page_size = 10 # optional parameter
response = Resemble.v2.term_substitutions.all(page, page_size)
substitutions = response['items']
Create a term substitution
1
2
3
4
5
6
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
response = Resemble.v2.term_substitutions.create('Original', 'Replacement')
substitutions = response['items']
Delete a term substitution
1
2
3
4
5
6
7
from resemble import Resemble
Resemble.api_key('YOUR_API_TOKEN')
substitution_uuid = '...'
response = Resemble.v2.term_substitutions.delete(substitution_uuid)