Впровадження генерування музики з штучним інтелектом (Suno/Udio) в мобільному додатку
Suno та Udio — два основні API для генерування повноцінних треків із вокалом. Обидва приймають текстовий промпт, обидва повертають mp3/wav через асинхронну задачу. Інтеграція технічно простіша, ніж відеогенерація — файли менші, час генерування коротший — але є кілька нюансів.
Suno API: що реально доступно
Офіційний публічний API Suno в closed beta станом на березень 2025. Пряма інтеграція можлива через неофіційні API-обгортки (нестійко) або через Replicate, де розгорнуті open-source альтернативи (MusicGen від Meta, AudioCraft).
Для продакшену надійніше:
- ElevenLabs AI Music — REST API, треки до 3 хвилин, стилі за текстом
- Replicate + MusicGen — open-source, контрольовано, дешевше
- Udio API — early access, промпт + референс-трек для стилю
Приклад запиту до ElevenLabs Music:
POST https://api.elevenlabs.io/v1/sound-generation
xi-api-key: <key>
{
"text": "Upbeat electronic music for a fitness app, 120 BPM, energetic",
"duration_seconds": 30,
"prompt_influence": 0.5
}
Відповідь за 15–40 секунд — бінарний mp3 або JSON з URL.
Асинхронний флоу на iOS
class MusicGenerationService {
func generate(prompt: String, duration: Int) async throws -> URL {
// Для довгих треків - async job
let jobId = try await elevenLabsClient.createMusicJob(
prompt: prompt,
duration: duration
)
// ElevenLabs: polling або webhook
for delay in [5.0, 8.0, 10.0, 15.0, 20.0, 30.0] {
try await Task.sleep(nanoseconds: UInt64(delay * 1e9))
let status = try await elevenLabsClient.getJobStatus(id: jobId)
if status.state == "complete", let url = status.audioURL {
return try await downloadAudio(from: url)
}
if status.state == "error" { throw MusicGenError.failed }
}
throw MusicGenError.timeout
}
}
Час генерування 30-секундного треку — 15–30 секунд. Спіннер + прогрес достатньо, push не обов'язковий для таких коротких завдань.
Відтворення та управління аудіо
На iOS аудіогенерацію потрібно правильно інтегрувати з AVAudioSession:
// Налаштування сесії: відтворення навіть з мовчазним режимом
try AVAudioSession.sharedInstance().setCategory(
.playback,
mode: .default,
options: [.mixWithOthers]
)
try AVAudioSession.sharedInstance().setActive(true)
Якщо не налаштувати .playback category, музика замовчить при блокуванні екрану. Це частіша помилка в MVP-реалізаціях.
На Android: MediaPlayer для простого відтворення, ExoPlayer для черги треків з плавними переходами (DefaultCrossfadeHandler).
Ліцензування та авторські права
Головне юридичне питання: кому належать права на сгенеровану композицію? ElevenLabs: при paid плані — користувачу. MusicGen: MIT-ліцензія моделі, але статус комерційного використання треків не урегульований явно. Suno: за ToS треки належать користувачу при наявності платної підписки.
У програмі: явно інформувати користувачів про умови ліцензування вибраного провайдера. Якщо трек буде використовуватися в комерційних відео — рекомендувати paid план провайдера.
Інтеграція з відео
Генеруємо трек, потім накладаємо на пристрої з відео через FFmpeg:
// iOS: об'єднання аудіо з відео
let composition = AVMutableComposition()
let videoTrack = try composition.addMutableTrack(
withMediaType: .video,
preferredTrackID: kCMPersistentTrackID_Invalid
)
let audioTrack = try composition.addMutableTrack(
withMediaType: .audio,
preferredTrackID: kCMPersistentTrackID_Invalid
)
// Додаємо відео та аудіо з їх AVAsset джерел
Терміни
Базова генерація + UI відтворення — 3–4 дні. З синхронізацією відео, управлінням чергою, кастомним стилем — 1–2 тижні. Інтерфейс вибору музики з попереднім переглядом — додаткові 5 днів.







