Мы реализуем AI Voice Cloning в мобильных приложениях
Клонирование голоса (voice cloning) — технология создания речи искусственного интеллекта, имитирующей конкретного человека. Она позволяет добавить в приложение кастомный голос — пользовательский или персонажа. Клиенты часто сталкиваются с шумом в записи и некачественным клоном. Мы решаем эту проблему, выбирая правильного провайдера и настраивая процесс записи. Разберём технику реализации на примере ElevenLabs API — де-факто стандарта voice cloning. Команда имеет более 5 лет опыта в mobile-разработке и выполнила более 30 проектов с интеграцией AI-сервисов. Если вы хотите реализовать клонирование голоса в своем приложении, получите консультацию наших инженеров.
Сравнение провайдеров voice cloning
| Провайдер | Минимальное аудио | Качество | Поддержка RU | Стриминг |
|---|---|---|---|---|
| ElevenLabs | 1 мин (Instant) / 30 мин (Professional) | Высокое | Да | Да |
| Resemble AI | 5 мин | Среднее | Ограниченно | Да |
| PlayHT | 5–10 сек | Ниже | Да | Нет |
ElevenLabs — де-факто стандарт. Для русского языка достаточно 2–5 минут чистой речи в 16-битном WAV. Стоимость подписки ElevenLabs — от $5 до $22 в месяц в зависимости от тарифа. Экономия на дикторах может достигать 40% при регулярном синтезе.
Как обеспечить качество записи на устройстве?
Качество клона напрямую зависит от записи. Наши рекомендации:
| Параметр | Рекомендация |
|---|---|
| Частота дискретизации | 44100 Гц или 48000 Гц |
| Формат | WAV (PCM 16-bit) или FLAC |
| Минимальная длительность | 60 секунд (лучше 3–5 минут) |
| SNR | > 20 дБ |
На iOS записываем через AVAudioEngine с форматом pcmFormatFloat32, затем конвертируем в WAV:
func exportToWAV(pcmBuffer: AVAudioPCMBuffer, destinationURL: URL) throws {
let settings: [String: Any] = [
AVFormatIDKey: kAudioFormatLinearPCM,
AVSampleRateKey: 44100.0,
AVNumberOfChannelsKey: 1,
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsFloatKey: false,
AVLinearPCMIsBigEndianKey: false
]
let file = try AVAudioFile(forWriting: destinationURL, settings: settings)
try file.write(from: pcmBuffer)
}
На Android — AudioRecord с ENCODING_PCM_16BIT, 44100 Гц, запись в WAV с 44-байтным заголовком.
Загрузка голоса в ElevenLabs
После записи аудио загружается multipart-запросом:
func uploadVoice(audioURLs: [URL], name: String) async throws -> String {
var request = URLRequest(url: URL(string: "https://api.elevenlabs.io/v1/voices/add")!)
request.httpMethod = "POST"
request.setValue(apiKey, forHTTPHeaderField: "xi-api-key")
let boundary = UUID().uuidString
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
body.append("--\(boundary)\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\n\(name)\r\n".data(using: .utf8)!)
for (i, url) in audioURLs.enumerated() {
let audioData = try Data(contentsOf: url)
body.append("--\(boundary)\r\nContent-Disposition: form-data; name=\"files\"; filename=\"sample_\(i).wav\"\r\nContent-Type: audio/wav\r\n\r\n".data(using: .utf8)!)
body.append(audioData)
body.append("\r\n".data(using: .utf8)!)
}
body.append("--\(boundary)--\r\n".data(using: .utf8)!)
request.httpBody = body
let (data, _) = try await URLSession.shared.data(for: request)
let response = try JSONDecoder().decode(VoiceResponse.self, from: data)
return response.voice_id
}
voice_id сохраняем в Keychain (iOS) или SharedPreferences (Android) — он нужен для всех TTS-запросов.
Управление голосовыми профилями
Приложение должно позволять:
- Создавать несколько голосовых профилей (свой голос, голос персонажа, диктора).
- Переименовывать и удалять через
DELETE /v1/voices/{voice_id}. - Проверять качество: прослушать тестовую фразу сразу после создания.
Локально храним voice_id и метаданные. После успешной загрузки аудиообразцы можно удалить — они есть у провайдера.
Если вам нужна кастомизация управления профилями, закажите разработку модуля.
Почему важно получить согласие пользователя?
ElevenLabs требует подтверждения, что пользователь клонирует собственный голос или имеет разрешение. Реализуем чекбокс согласия и сохраняем timestamp. App Store Review Guidelines 5.1.4 требуют явного согласия на сбор биометрических данных. Кроме того, в юрисдикциях, подпадающих под GDPR, клонирование голоса может считаться обработкой биометрических данных — необходимо уведомление и согласие. Рекомендуем консультироваться с юристом, но в большинстве случаев достаточно информированного согласия.
Пошаговая инструкция по интеграции
Разверните для деталей
- Подготовка записи: Настройте
AVAudioSessionс частотой 44100 Гц на iOS,AudioRecordс 16-bit PCM на Android. Обеспечьте минимальный SNR > 20 дБ. - Загрузка образца: Отправьте WAV-файл через multipart-запрос к ElevenLabs. Сохраните полученный
voice_id. - Синтез речи: Используйте
voice_idв TTS-запросеPOST /v1/text-to-speech/{voice_id}. Передайте текст и настройки стабильности/чёткости. - Воспроизведение: Полученный аудиопоток (MP3) воспроизведите через
AVAudioPlayerилиExoPlayer. - Кэширование: Сохраняйте сгенерированные аудиофайлы локально для повторного использования.
Что входит в нашу работу
Мы поставляем проект под ключ:
- Разработка экрана записи с waveform, индикацией громкости, шумоподавлением.
- Интеграция с ElevenLabs (или другим провайдером) через REST/GraphQL.
- Управление голосовыми профилями с локальным кэшем.
- Синтез речи клонированным голосом через TTS API.
- Документация по настройке push-уведомлений (APNs/FCM) для фоновой загрузки аудио.
- Тестирование качества клона на реальных устройствах.
Опыт команды — более пяти лет в mobile-разработке, десятки проектов с интеграцией AI-сервисов. Гарантируем стабильную работу в соответствии с гайдлайнами App Store и Google Play. Если вы хотите получить консультацию по вашему проекту, свяжитесь с нами — мы оценим сроки и бюджет индивидуально.
Типичные ошибки
- Запись через
AVAudioSessionбез явного указанияpreferredSampleRate: 44100— система может выбрать 16000 Гц, что ухудшает клон. - Отправка несжатого WAF (WAV) объёмом ~30 МБ на мобильном интернете — используйте фоновую загрузку через
URLSession.background. - Игнорирование сниппетов согласия — приложение может быть отклонено модерацией.
Сроки реализации
Базовая интеграция (запись + загрузка + TTS) — 5–8 дней. Полный флоу с профилями, Recorder UI и тестированием — 2–3 недели. Оценим ваш проект бесплатно — просто напишите нам.







