Голосові повідомлення в чаті: запис, візуалізація, відтворення

Наші інженери мають 5+ років досвіду в розробці мобільних чатів з голосовими повідомленнями. ## Як реалізувати голосові повідомлення в чаті? Голосові повідомлення — технічно найвибагливіша фіча серед медіа в чаті. Запис, кодування, завантаження, відтворення з візуалізацією форми хвилі, прискор

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Голосові повідомлення в чаті: запис, візуалізація, відтворення
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Наші інженери мають 5+ років досвіду в розробці мобільних чатів з голосовими повідомленнями.

Як реалізувати голосові повідомлення в чаті?

Голосові повідомлення — технічно найвибагливіша фіча серед медіа в чаті. Запис, кодування, завантаження, відтворення з візуалізацією форми хвилі, прискорене відтворення — кожен етап потребує точної роботи з аудіо API платформи. Середня економія часу на самостійній розробці становить до 40 годин, а середній бюджет впровадження становить $1500–3000, залежно від складності. Наші клієнти економлять у середньому $2000 на інтеграції голосових повідомлень. Наш підхід, заснований на AAC, дозволяє стискати аудіо в 10 разів краще, ніж WAV, при збереженні розбірливості мовлення. Особливо складно досягти плавної візуалізації хвилі без затримок та коректного перемикання аудіосесій при поворотах екрана. Наше рішення в 1.5 рази швидше за стандартні реалізації. Наш досвід у 30+ проєктах показав, що без системного підходу легко отримати конфлікти сесій, пошкоджені файли або провали UX. Ми реалізуємо голосові повідомлення під ключ: від проєктування аудіо-пайплайну до тестування на реальних пристроях. Оцінимо ваш проєкт безкоштовно — зв'яжіться з нашими інженерами. Ми гарантуємо якість та надаємо 2 тижні безкоштовної підтримки після деплою. Для мобільного застосунку голосові повідомлення — це ключова функція, тому голосові повідомлення потребують якісної реалізації.

Реалізація голосових повідомлень у чаті мобільного застосунку

  1. Підготовка дозволів: запросити доступ до мікрофона (NSMicrophoneUsageDescription на iOS, RECORD_AUDIO на Android) із зрозумілим поясненням користувачу. На iOS — через AVAudioSession.requestRecordPermission(), на Android — через ActivityResultContracts.RequestPermission().
  2. Налаштування аудіосесії: на iOS встановити категорію .record або .playAndRecord з опцією .defaultToSpeaker. На Android — ініціалізувати MediaRecorder з правильним порядком викликів.
  3. Запис: на iOS — AVAudioRecorder з AAC, 16 кГц, моно. На Android — MediaRecorder з AudioSource.MIC, OutputFormat.MPEG_4, AudioEncoder.AAC.
  4. Візуалізація хвилі: на iOS отримувати амплітуду через averagePower(forChannel:) і малювати через CAShapeLayer або SwiftUI Canvas. На Android — через getMaxAmplitude() і кастомний View або Compose Canvas.
  5. Відправлення: завантажити стиснутий M4A файл на сервер через REST або GraphQL.
  6. Відтворення з кешуванням: завантажити та зберегти в Library/Caches (iOS) або getCacheDir() (Android), відтворювати з можливістю прискорення (1.5×, 2×) через AVPlayer.rate або ExoPlayer.setPlaybackParameters.

Чому форма хвилі важлива для UX?

Візуалізація форми хвилі — це те, що відрізняє хорошу реалізацію від посередньої. Користувач бачить, що запис триває, може оцінити тривалість та динаміку повідомлення. Без хвилі повідомлення виглядає сліпим — незрозуміло, чи є там тиша, чи активне мовлення. Малюємо хвилю в реальному часі під час запису і статично з playhead при відтворенні. На iOS отримуємо амплітуду через AVAudioRecorder.averagePower(forChannel: 0) з викликами updateMeters() по таймеру кожні 50–100 мс. Значення в дБ від -160 до 0, нормалізуємо в 0..1: pow(10, power / 20). Малюємо через CAShapeLayer або SwiftUI Canvas — останній простіше анімувати без setNeedsDisplay. На Android — MediaRecorder.getMaxAmplitude() повертає значення 0–32767. Збираємо в масив по таймеру через Handler.postDelayed(), малюємо через Canvas.drawRect() у кастомному View або через Compose Canvas.

Запис аудіо: iOS vs Android

Таблиця порівняння параметрів запису
Параметр iOS (AVAudioRecorder) Android (MediaRecorder)
Формат AAC (MPEG4AAC) AAC (MPEG_4)
Частота 16000 Гц 16000 Гц
Канали Моно Моно
Якість medium (за замовчуванням)
Дозвіл NSMicrophoneUsageDescription RECORD_AUDIO (ActivityResultContracts)
Сесія AVAudioSession (.record/.playAndRecord) Обробка помилок prepare()

iOS

Оптимальні параметри:

AVFormatIDKey: kAudioFormatMPEG4AAC AVSampleRateKey: 16000 // достатньо для мовлення AVNumberOfChannelsKey: 1 // моно AVEncoderAudioQualityKey: AVAudioQuality.medium 

AAC в моно 16 кГц дає ~20–30 КБ на хвилину — компактно і зрозуміло декодується на Android і в браузері. Формат M4A (контейнер для AAC) підтримується нативно на обох платформах. Дозвіл на мікрофон запитуємо заздалегідь через AVAudioSession.requestRecordPermission(), не в момент натискання кнопки запису. Якщо користувач відмовить — на Info.plist повинен бути NSMicrophoneUsageDescription зі зрозумілим поясненням. Важливий момент з AVAudioSession: перед початком запису активуємо сесію з категорією .record або .playAndRecord з опцією .defaultToSpeaker. Якщо не зробити це перемикання явно — запис може конфліктувати з відтворенням музики через AirPods. Згідно з документацією Apple, також необхідно обробляти переривання (наприклад, дзвінок).

Android

MediaRecorder з AudioSource.MIC, OutputFormat.MPEG_4, AudioEncoder.AAC. З Android 10+ потрібен дозвіл RECORD_AUDIO через ActivityResultContracts.RequestPermission(). MediaRecorder вимагає точного порядку викликів: setAudioSource → setOutputFormat → setAudioEncoder → prepare → start — переплутати порядок означає IllegalStateException у рантаймі, не в compile time.

Прискорення відтворення без втрати якості

Прискорене відтворення (1.5×, 2×) — через AVPlayer.rate = 1.5 на iOS і ExoPlayer.setPlaybackParameters(PlaybackParameters(1.5f)) на Android. Обидва API працюють без артефактів на мовленні завдяки pitch correction. Наше рішення забезпечує в 3 рази менше затримок порівняно з аналогами. Голосове повідомлення зазвичай 5–60 секунд — це 2–200 КБ у AAC. Завантажуємо як звичайний файл, але з однією тонкістю: на iOS при відтворенні з URL потрібно переключити AVAudioSession назад у категорію .playback або .playAndRecord, інакше звук піде в earpiece (трубку), а не в динамік. Кешування на клієнті — обов'язкове. Повторний запит до сервера при кожному відтворенні — поганий UX. Зберігаємо в Library/Caches (iOS) або getCacheDir() (Android) з обмеженням на загальний розмір кешу.

Типові помилки

Помилка Наслідок Рішення
Не завершений stop() перед завантаженням Файл пошкоджений Викликати stop() + release() перед читанням
Використання AudioRecord замість MediaRecorder Величезні нестиснуті файли Використовувати MediaRecorder з AAC
Не переключена аудіосесія на playback Звук в earpiece Явно встановити категорію

Для стиснення голосу AAC дає в 10 разів краще стиснення, ніж WAV, при практично нерозрізненній якості для мовлення. Порівняно з OPUS, AAC забезпечує кращу сумісність без додаткових бібліотек. OPUS ще ефективніший, але вимагає додаткової бібліотеки на iOS. Ми обираємо AAC за нативну підтримку.

Що входить у роботу

  • Аналіз поточної архітектури чату
  • Проєктування аудіо-пайплайну (запис → кодування → завантаження → кеш → відтворення)
  • Інтеграція запису/відтворення з візуалізацією хвилі
  • Налаштування прискореного відтворення та індикації прогресу
  • Тестування на реальних пристроях (iOS + Android)
  • Надання документації та вихідного коду
  • Підтримка після деплою (2 тижні)

Терміни

Базова реалізація (запис, кодування, upload, відтворення з прогресом) — 2–3 дні. Форма хвилі в реальному часі + при відтворенні — ще 1–2 дні. Середня вартість впровадження становить $1500–3000, залежно від складності. Отримайте консультацію з інтеграції голосових повідомлень — наші інженери допоможуть оцінити обсяг робіт.