Клонирование голоса в музыке: как подключить Suno Voices 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",
}

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)

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

Подключаем Codex CLI к Ace Data Cloud: пошаговая настройка через единый API