Lyria 2
An advanced audio generation model designed to create high-quality audio tracks from textual prompts.
How to Make a Call
Quick Code Example
Here is an example of generation an audio file based on a prompt using the music model Lyria 2.
import time
import requests
# Insert your AI/ML API key instead of <YOUR_AIMLAPI_KEY>:
aimlapi_key = '<YOUR_AIMLAPI_KEY>'
# Creating and sending an audio generation task to the server (returns a generation ID)
def generate_audio():
url = "https://api.aimlapi.com/v2/generate/audio"
payload = {
"model": "google/lyria2",
"prompt": '''
Majestic orchestral film score recorded in a top-tier London studio. A full-scale symphony orchestra delivers sweeping, cinematic music with rich emotional depth. The composition features soaring themes, dynamic contrasts, and complex harmonies. Expect powerful percussion, expressive strings, and prominent French horns and timpani. The arrangement emphasizes a dramatic narrative arc with intricate orchestrations and a profound, awe-inspiring atmosphere.
'''
}
headers = {"Authorization": f"Bearer {aimlapi_key}", "Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
if response.status_code >= 400:
print(f"Error: {response.status_code} - {response.text}")
else:
response_data = response.json()
print("Generation:", response_data)
return response_data
# Requesting the result of the generation task from the server using the generation_id:
def retrieve_audio(gen_id):
url = "https://api.aimlapi.com/v2/generate/audio"
params = {
"generation_id": gen_id,
}
headers = {"Authorization": f"Bearer {aimlapi_key}", "Content-Type": "application/json"}
response = requests.get(url, params=params, headers=headers)
return response.json()
# This is the main function of the program. From here, we sequentially call the audio generation and then repeatedly request the result from the server every 10 seconds:
def main():
generation_response = generate_audio()
gen_id = generation_response.get("id")
if gen_id:
start_time = time.time()
timeout = 600
while time.time() - start_time < timeout:
response_data = retrieve_audio(gen_id)
if response_data is None:
print("Error: No response from API")
break
status = response_data.get("status")
if status == "generating" or status == "queued" or status == "waiting":
print("Still waiting... Checking again in 10 seconds.")
time.sleep(10)
else:
print("Generation complete:/n", response_data)
return response_data
print("Timeout reached. Stopping.")
return None
if __name__ == "__main__":
main()// Insert your AI/ML API key instead of <YOUR_AIMLAPI_KEY>:
const API_KEY = '<YOUR_AIMLAPI_KEY>';
async function generateAudio() {
const url = 'https://api.aimlapi.com/v2/generate/audio';
const payload = {
model: 'google/lyria2',
prompt: `
Majestic orchestral film score recorded in a top-tier London studio. A full-scale symphony orchestra delivers sweeping, cinematic music with rich emotional depth. The composition features soaring themes, dynamic contrasts, and complex harmonies. Expect powerful percussion, expressive strings, and prominent French horns and timpani. The arrangement emphasizes a dramatic narrative arc with intricate orchestrations and a profound, awe-inspiring atmosphere.
`
};
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
if (!response.ok) {
console.error(`Error: ${response.status} - ${await response.text()}`);
return null;
}
const data = await response.json();
console.log('Generation:', data);
return data;
}
async function retrieveAudio(generationId) {
const url = `https://api.aimlapi.com/v2/generate/audio?generation_id=${generationId}`;
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
}
});
if (!response.ok) {
console.error(`Error: ${response.status} - ${await response.text()}`);
return null;
}
return await response.json();
}
async function main() {
const generationResponse = await generateAudio();
if (!generationResponse || !generationResponse.id) {
console.error('No generation ID received.');
return;
}
const genId = generationResponse.id;
const timeout = 600000; // 10 minutes
const interval = 10000; // 10 seconds
const start = Date.now();
const intervalId = setInterval(async () => {
if (Date.now() - start > timeout) {
console.log('Timeout reached. Stopping.');
clearInterval(intervalId);
return;
}
const result = await retrieveAudio(genId);
if (!result) {
console.error('No response from API.');
clearInterval(intervalId);
return;
}
const status = result.status;
if (['generating', 'queued', 'waiting'].includes(status)) {
console.log('Still waiting... Checking again in 10 seconds.');
} else {
console.log('Generation complete:\n', result);
clearInterval(intervalId);
}
}, interval);
}
main();Listen to the track we generated:
"Majestic orchestral film score recorded in a top-tier London studio. A full-scale symphony orchestra delivers sweeping, cinematic music with rich emotional depth. The composition features soaring themes, dynamic contrasts, and complex harmonies. Expect powerful percussion, expressive strings, and prominent French horns and timpani. The arrangement emphasizes a dramatic narrative arc with intricate orchestrations and a profound, awe-inspiring atmosphere."API Schemas
Generate a music sample
This endpoint creates and sends a music generation task to the server — and returns a generation ID and the task status.
Bearer key
The prompt to generate audio.
A description of what to exclude from the generated audio
A seed for deterministic generation. If provided, the model will attempt to produce the same audio given the same prompt and other parameters.
{
"id": "text",
"status": "queued"
}Retrieve the generated music sample from the server
After sending a request for music generation, this task is added to the queue. Based on the service's load, the generation can be completed in 30-40 seconds or take a bit more.
Bearer key
{
"audio_file": {
"url": "https://example.com"
},
"id": "text",
"status": "queued",
"error": null
}Last updated
Was this helpful?