Клонирование голоса в Suno через API: от аудиофайла до готового трека

Клонирование голоса для генерации музыки — задача, которая ещё пару лет назад требовала собственной ML-инфраструктуры и обучения моделей. Сегодня это можно сделать одним HTTP-запросом. В этой статье разберём, как через единый endpoint https://api.acedata.cloud подключить API клонирования голоса Suno и использовать полученный голосовой профиль для генерации песен с моделями chirp-v4-5 и выше.

Зачем это нужно

API клонирования голоса Suno позволяет создать кастомного «персонажа» из любого аудиофайла — записи собственного голоса, вокала артиста (с соответствующими правами) или дублирующей дорожки — и затем использовать этот тембр при генерации новых композиций. В отличие от готовых Persona, которые формируются из audio_id, здесь на вход подаётся публично доступный audio_url — то есть можно клонировать голос из собственного WAV/MP3 файла, загруженного на любой публичный хостинг.

Требования к исходному аудио

  • Формат — WAV или MP3
  • Длительность не менее 10 секунд, оптимально 30–60 секунд чистой записи
  • Один чёткий, узнаваемый голос — речь или пение
  • Без фонового шума, музыкального сопровождения, эха и реверберации
  • Не допускается несколько говорящих или наложенных голосов
  • Тихая, невнятная или зашумлённая запись может привести к сбою клонирования или низкому качеству результата

Важный нюанс: голосовой профиль, созданный загрузкой аудио, — приватный ресурс. Он не подходит для повторного использования на других аккаунтах, и рекомендуется использовать его вскоре после создания — при долгом простое профиль может стать недоступным.

Шаг 1. Создание голосового профиля

Отправляем POST-запрос с публичной ссылкой на аудиофайл. Параметр audio_url обязателен, name и description — опциональны, но помогают потом находить профиль в списке.

curl -X POST 'https://api.acedata.cloud/suno/voices' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "audio_url": "https://example.com/my-voice-sample.mp3",
  "name": "My Voice Test",
  "description": "Чистая запись голоса, 45 секунд"
}'

Ответ содержит persona_id — именно этот идентификатор понадобится на следующем шаге:

{
  "success": true,
  "task_id": "b9150e51-d87c-4556-a55e-100947a63bdf",
  "data": {
    "persona_id": "e95013f8-eaee-4741-a42f-1d559a9d0b2b",
    "name": "My Voice Test",
    "is_public": false
  }
}

Шаг 2. Генерация песни с клонированным голосом

Теперь используем persona_id в вызове генерации аудио. Обязательно указываем action: "generate" и модель не ниже chirp-v4-5 — клонирование голоса не поддерживается на chirp-v4.

curl -X POST 'https://api.acedata.cloud/suno/audios' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "action": "generate",
  "model": "chirp-v5-5",
  "prompt": "A warm synth-pop song about city nights",
  "persona_id": "e95013f8-eaee-4741-a42f-1d559a9d0b2b"
}'

То же самое на Python — удобно, если клонирование голоса встраивается в бэкенд-пайплайн:

import requests

TOKEN = "your_token_here"
BASE = "https://api.acedata.cloud"
headers = {
    "accept": "application/json",
    "authorization": f"Bearer {TOKEN}",
    "content-type": "application/json",
}

# 1. Создаём голосовой профиль
voice_resp = requests.post(
    f"{BASE}/suno/voices",
    headers=headers,
    json={
        "audio_url": "https://example.com/my-voice-sample.mp3",
        "name": "My Voice Test",
    },
)
persona_id = voice_resp.json()["data"]["persona_id"]
print("persona_id:", persona_id)

# 2. Генерируем песню этим голосом
audio_resp = requests.post(
    f"{BASE}/suno/audios",
    headers=headers,
    json={
        "action": "generate",
        "model": "chirp-v5-5",
        "prompt": "A warm synth-pop song about city nights",
        "persona_id": persona_id,
    },
)
data = audio_resp.json()["data"][0]
print(data["title"], data["audio_url"])

Результат — массив с готовыми треками, у каждого есть прямая ссылка на аудио и превью-обложку:

{
  "success": true,
  "data": [
    {
      "id": "16463960-077c-4700-bbb3-3c7897b943d3",
      "title": "Soft Neon on My Skin",
      "audio_url": "https://cdn1.suno.ai/16463960-077c-4700-bbb3-3c7897b943d3.mp3",
      "model": "chirp-v5-5",
      "state": "succeeded",
      "duration": 156.28
    }
  ]
}

Ещё один сценарий: cover с новым тембром

Тот же persona_id можно передать не только с action: "generate", но и с action: "cover" — это позволяет перепеть существующую композицию клонированным голосом, сохранив аранжировку оригинала. Полезно для локализации кавер-версий или адаптации референс-трека под нужный тембр.

Инженерные заметки

  • Проверяйте state в ответе — генерация асинхронна, и при статусе, отличном от succeeded, стоит опрашивать задачу по task_id с экспоненциальной задержкой
  • Не переиспользуйте один и тот же persona_id спустя длительное время без проверки — если профиль истёк, API вернёт ошибку, и профиль нужно будет пересоздать
  • Так как endpoint единый для всех моделей платформы, тот же токен и тот же паттерн запросов работают для GPT, Claude, Gemini, Midjourney, Flux и других моделей — не нужно поддерживать десяток разных SDK

Как начать

Зарегистрируйтесь на platform.acedata.cloud/ru, создайте приложение и токен в разделе console/applications, а полную документацию по всем эндпоинтам, включая параметры Suno Voices и Suno Audios, смотрите на странице platform.acedata.cloud/documents. Для разработчиков, работающих с несколькими моделями одновременно, единый endpoint и единый биллинг существенно упрощают архитектуру приложения — не нужно держать отдельные интеграции и отдельные ключи для каждого провайдера.

Comments

Popular posts from this blog

Artistic QR Code API Integration Guidance

How to Configure Claude Code with CC Switch and Ace Data Cloud

How to Build a Server-Side Image Editing Workflow with GPT-Image-2