Реализация записи аудио в мобильном приложении
Диктофон, войс-сообщения, запись интервью — каждая задача предъявляет свои требования к аудио. Войс-сообщение должно быть маленьким (AAC, 32 кбит/с), подкаст — без потерь (WAV или FLAC, 44100 Гц). Начинаем с аудиосессии: неправильная категория — и звук идёт не в тот динамик, а другое приложение перехватывает запись. Мы решаем эти проблемы на iOS и Android, используя проверенные паттерны. Опыт нашей команды — 10+ лет в мобильной разработке. Мы реализовали аудиозапись в приложениях для журналистов, музыкантов и мессенджеров. Гарантируем стабильную работу даже в фоне. Неправильная конфигурация приводит к искажению звука, обрывам записи при сворачивании и конфликтам с другими аудиоприложениями. Мы научились избегать этих проблем и готовы поделиться опытом. В этой статье вы узнаете, как правильно настроить аудиосессию, выбрать оптимальный формат, реализовать визуализацию и фоновую запись. На практике встречаются проекты, где аудиозапись реализована с ошибками — например, неправильно выбран битрейт или не настроена обработка прерываний. Мы предлагаем готовое решение, которое учитывает все нюансы. С нами вы получите стабильный и производительный модуль записи, который легко интегрируется в ваше приложение.
Аудиосессия и категории
iOS. AVAudioSession — центральный объект управления. Подробнее о нём — в документации Apple. Для записи:
let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth]) try session.setActive(true) .playAndRecord позволяет одновременно воспроизводить и писать. .allowBluetooth включает запись с AirPods. Без .defaultToSpeaker — звук при воспроизведении идёт в ухо, не в динамик.
Проблема, которая встречается в продакшене: другое приложение (навигатор, музыкальный плеер) перехватывает сессию. Подписываемся на AVAudioSession.interruptionNotification, при .began паузируем запись, при .ended с .shouldResume — возобновляем.
Android. AudioRecord для прямого доступа к PCM-данным. MediaRecorder — проще, но меньше контроля над форматом. Для большинства задач MediaRecorder достаточен (см. документацию Android):
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC) mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC) mediaRecorder.setAudioSamplingRate(44100) mediaRecorder.setAudioEncodingBitRate(128000) VOICE_COMMUNICATION вместо MIC включает эхоподавление и шумоподавление на уровне системы — полезно для войс-сообщений.
| Параметр | iOS (AVAudioSession) | Android (MediaRecorder) |
|---|---|---|
| Категория | .playAndRecord | AudioSource.MIC |
| Формат | M4A (AAC) | MPEG-4 (AAC) |
| Частота | 44100 Гц | 44100 Гц |
| Фоновая запись | UIBackgroundModes | ForegroundService |
Как выбрать формат аудиозаписи?
Выбор формата зависит от назначения. Для войс-сообщений оптимален AAC — он даёт хорошее качество при низком битрейте. Для подкастов лучше FLAC — сжатие без потерь при меньшем размере, чем WAV. MP3 — универсальный выбор, но уступает AAC по размеру при том же качестве. В таблице ниже приведены характеристики популярных форматов.
| Формат | Размер 1 мин | Совместимость | Применение |
|---|---|---|---|
| AAC (M4A) | ~480 КБ | iOS, Android, Web | войс-сообщения |
| MP3 | ~960 КБ | везде | общий случай |
| WAV (PCM) | ~10 МБ | везде | без потерь, диктофон |
| FLAC | ~3–5 МБ | Android native, iOS 11+ | без потерь, компактнее WAV |
| OGG/Opus | ~300 КБ | Android, Web | оптимальный для VoIP |
AAC превосходит MP3 по эффективности сжатия: при одинаковом битрейте звучит лучше. Для iOS-приложений используйте M4A-контейнер, для Android — MPEG-4.
Визуализация уровня звука
Амплитудный волновой индикатор — пользователь видит, что запись идёт. На iOS: AVAudioRecorder.averagePower(forChannel: 0) возвращает дБ (от -160 до 0). Нормализуем в 0..1:
let power = recorder.averagePower(forChannel: 0) let level = pow(10, power / 20) // dBFS → linear Опрашиваем через Timer.scheduledTimer(withTimeInterval: 0.05) — 20 fps для плавной анимации.
На Android: MediaRecorder.getMaxAmplitude() — максимальная амплитуда с последнего вызова (0–32767). Делаем Handler.postDelayed каждые 50 мс. Для более точной визуализации можно использовать AudioRecord и анализировать PCM-буфер в реальном времени.
Для Flutter: record (pub.dev) предоставляет onAmplitudeChanged stream, что упрощает интеграцию.
Waveform при воспроизведении — реализация записи аудио
Записанный файл анализируем офлайн: читаем PCM-сэмплы, разбиваем на чанки по N сэмплов, берём RMS каждого чанка. Получаем массив float-значений — рисуем через Canvas или Path. На iOS нужен AVAssetReader + AVAssetReaderTrackOutput с kAudioFormatLinearPCM.
Как обеспечить фоновую запись?
Если пользователь сворачивает приложение — запись должна продолжаться. iOS: UIBackgroundModes: audio в Info.plist, AVAudioSession остаётся активной. Android: ForegroundService с типом microphone (android:foregroundServiceType="microphone" в манифесте, обязательно с Android 10). Уведомление с кнопкой «Остановить» — стандарт.
Без ForegroundService на Android 9+ система убьёт процесс через несколько минут в фоне. На iOS без UIBackgroundModes запись остановится через 3 секунды после сворачивания.
Пошаговый процесс реализации
- Анализ требований — определяем сценарии использования, целевые платформы, требуемые форматы и функции (визуализация, фоновая запись).
- Проектирование архитектуры — выбираем стек (Native или Flutter), проектируем модуль записи с учётом аудиосессии и обработки прерываний.
- Реализация ядра — пишем код для iOS (Swift) и Android (Kotlin), интегрируем визуализацию и сохранение файлов.
- Тестирование — проверяем на реальных устройствах, включая фоновый режим и прерывания от других приложений.
- Интеграция и деплой — встраиваем модуль в проект, готовим документацию, публикуем в сторах.
Что входит в работу
При заказе реализации аудиозаписи мы предоставляем:
- Готовый модуль записи с выбором формата и визуализацией.
- Интеграцию в существующий проект (iOS, Android, Flutter).
- Документацию по API и настройке.
- Тестирование на реальных устройствах (включая фоновый режим).
- Поддержку при публикации в App Store и Google Play.
Типичные ошибки при реализации записи
- Неправильная категория аудиосессии на iOS (используйте .playAndRecord) - Отсутствие ForegroundService на Android (запись убьют) - Выбор неподходящего формата (слишком большой файл)Сроки
Запись с визуализацией уровня и сохранением файла — 1–2 дня. Полноценный диктофон с waveform, паузой, переименованием и фоновой записью — 3–4 дня. Стоимость рассчитывается индивидуально под ваш проект.
Закажите реализацию аудиозаписи для вашего приложения уже сегодня. Свяжитесь с нами для консультации — мы поможем выбрать оптимальное решение и оценить сроки.







