Работа со звуком для android

Содержание
  1. Программирование звука в Android — SoundPool и MediaPlayer
  2. Android управление звуком
  3. Как проиграть звук через SoundPool
  4. SoundPool и утечка памяти
  5. Воспроизведение фоновой музыки в Android с помощью MediaPlayer
  6. Особенности обработки аудио в ОС Android
  7. И как с ними бороться
  8. Звук Android
  9. Обзор
  10. Требования
  11. Воспроизведение звука с помощью класса MediaPlayer
  12. Инициализация и воспроизведение
  13. Приостановка и возобновление воспроизведения
  14. Использование класса Медиарекордер для записи звука
  15. Инициализация и запись
  16. Остановка записи
  17. Очистка
  18. Управление звуковыми уведомлениями
  19. Класс Аудиоманажер
  20. Управление фокусом звука
  21. Регистрация обратного вызова для звукового фокуса
  22. Запрос фокуса звука
  23. Освобождение фокуса звука
  24. Аудио API низкого уровня
  25. Класс AudioTrack
  26. Инициализация и воспроизведение
  27. Приостановка и остановка воспроизведения
  28. Очистка
  29. Класс Аудиорекорд
  30. Инициализация и запись
  31. Остановка записи
  32. Очистка
  33. Итоги

Программирование звука в Android — SoundPool и MediaPlayer

Перед любым разработчиком, занимающимся созданием красивых интерактивных приложений, рано или поздно встает вопрос об использовании мультимедийных возможностей телефона. Для работы со звуком в Android программисты активно используют две библиотеки. Первая из них предоставляет класс SoundPool, вторая — MediaPlayer.

Класс SoundPool удобно использовать для проигрывания коротких аудиоклипов. С его помощью можно проигрывать несколько звуков одновременно, при этом размер звукового файла не должен превышать 1 Mb. Класс MediaPlayer лучше подходит для воспроизведения долгих аудио и видеороликов.

Android управление звуком

Android поддерживает различные аудиопотоки для разных целей. Регулятор расположенная на торце телефона качелька для регулирования громкости управляет только одним аудиопотоком. Для того, чтобы привязать эту кнопку к аудиопотоку необходимо указать его тип в приложении

Как проиграть звук через SoundPool

Напишем приложение, которое будет проигрывать звук при касании экрана. Создадим новый проект с именем CrazySong, пакет назовем
ru.mobilab.crazysong, в качестве главной Activity укажем CrazySongActivity.

Приведем main.xml к виду

Давайте рассмотрим последовательность действий, которую необходимо выполнить для того, чтобы воспроизвести звуковой файл. Прежде всего мы должны создать объект soundPool. Его конструктор имеет несколько параметров. Первый параметр задает максимальное число одновременно проигрываемых файлов. Второй параметр задает тип аудиопотока. В большинстве случаев здесь подойдет значение soundPool STREAM_MUSIC, хотя возможно использование и других аудиопотоков. Их назначение довольно очевидно. (STREAM_ALARM, STREAM_DTMF, STREAM_NOTIFICATION, STREAM_RING,STREAM_SYSTEM, STREAM_VOICE_CALL). Третий параметр задает sample-rate. В настоящее время он ни на что не влияет, поэтому здесь устанавливаем 0.

После того, как мы создали объект для SoundPool, с помощью setOnLoadCompleteListener добавим к нему OnLoadCompleteListener, который будет отслеживать завершение загрузки файлов. В качестве параметров метод onLoadComplete принимает объект SoundPool, номер загруженного сэмпла и статус завершения операции. В случае, если все прошло успешно, статус равен нулю.

Прежде чем проигрывать звуковые файлы их необходимо загрузить в SoundPool. Сделать это можно с помощью метода load. Метод имеет несколько реализаций, различающихся набором параметров и источником, поставляющим звуковые файлы. Можно загружать файлы из папки asset, можно из APK ресурсов, можно из файла, указав к нему путь, можно из FileDescriptor. Мы будем рассматривать ситуацию, когда звуковые сэмплы входят в состав APK пакета, то есть лежат в папке res/raw вашего проекта. Для загрузки нам понадобятся три параметра: ссылка на контекст из которого мы получаем доступ к ресурсам программы (в большинстве случаев подойдет this), ссылка на ресурс, полученная через объект R, и приоритет, который пока ни на что не влияет, и в документации рекомендуется устанавливать значение 1. Загруженные ресурсы можно выгрузить с помощью методов unload, если требуется удалить один сэмпл, и release — если нужно полностью очистить SoundPool.

Для проигрывания сэмпла используется метод play, имеющий следующие параметры:

  • soundID переменная с номером сэмпла. Этот номер возвращается в результате выполнения метода load.
  • leftVolume значение громкости левого канала (от 0.0 до 1.0)
  • rightVolume значение громкости правого канала (от 0.0 до 1.0)
  • priority приоритет потока (0 — самый низкий приоритет)
  • loop сколько раз нужно повторить сэмпл (0 не повторять, -1 — зациклить)
  • rate скорость воспроизведения (может изменяться от 0.5 до 2.0, 1 — нормальная скорость)

В результате выполнения метода play возвращается номер streamID (или 0 в случае ошибки), который можно использовать для управления воспроизведением. Например это значение используется при вызове методов pause и resume, stop, setVolume, setLoop. Если число максимально проигрываемых файлов превышено, то вызов очередного метода play приведет к завершению воспроизведения одного из проигрываемых в данный момент сэмплов.

Код нашего класса приведен ниже
package ru.mobilab.crazysong;

SoundPool и утечка памяти

На форумах встречаются сообщения о том, что использование SoundPool вызывает проблему утечки памяти. Какой-то внятной и проверенной информацию по этому поводу найти не удалось. Если вы не собираетесь больше проигрывать звуки, рекомендуется выполнить код

но похоже, что этот метод не решает проблему вAndroid 2.1. Если Вы располагаете информацией об этой проблеме и ее решении, просьба отписаться в комментариях.

Воспроизведение фоновой музыки в Android с помощью MediaPlayer

SoundPool отлично подходит для озвучивания различных игровых событий: выстрелов, взрывов, реплик. Однако для проигрывания фоновой музыки нужно использовать класс MediaPlayer. Метод create этого класса имеет два параметра: контекст и ссылку на ресурс или URI адрес музыкального файла. Для запуска/паузы/остановки воспроизведения служат методы start(), pause() и stop() соответственно. Все просто.

В случае, если Вы собираетесь подгружать файл из интернета, последовательность действий будет немного другая. Метод create использовать не нужно. Источник аудиоданных задается с помощью метода setDataSource, после которого нужно вызвать метод prepare(), блокирующий выполнение потока до тех пор, пока медиаплеер не будет готов к воспроизведению музыки. Метод prepareAsync() выполняет те же действия в асинхронном режиме, то есть не блокирует вызвавший его поток. В случае использования prepareAsync нужно использовать OnPreparedListener для определения момента, когда MediaPlayer готов к проигрыванию файла. Заметим, что при использовании метода create метод prepare вызывать не нужно, поскольку он вызывается внутри create.

Читайте также:  Управление тв боксом со смартфона android

Остался еще один актуальный вопрос: как определить, что воспроизведение файла закончилось? Для этой цели служит функция обратного вызова onCompletion. Чтобы привязать ее к нашему медиаплееру нужно выполнить следующий код:

Вот собственно и все. Воспроизведение звука не такая уж и сложная тема. Архив с проектом можетескачать здесь.

Источник

Особенности обработки аудио в ОС Android

И как с ними бороться

Подумайте, какие ассоциации вызывает у вас операционная система Google Android? Наверняка, одной из первых в голове всплыла «распространенность», «популярность». Или, при подобающем настроении, такое словосочетание как «зоопарк устройств». Что и говорить, выбор в пользу Android уже давным-давно сделали почти все известные разработчики мобильных гаджетов.

В крупных компаниях этот шаг знаменует собой начало большого пути для подразделения R&D (Research and Development). Ведь базовые возможности Android (по крайней мере, до релиза Lollipop) были весьма скромны и могли устроить только завсегдатаев XDA Developers, которые все необходимое и сами могут дописать. В поисках примеров можно даже не уходить в дебри Android. Скажем, аппараты с поддержкой нескольких SIM-карт уже давно стали самым обычным явлением на рынке. А API для работы с ними был официально добавлен только в Google Android 5.1.

Сегодня мы подробно рассмотрим еще одну сторону ОС, которой разработчики Google Android не уделяют достойного внимания — работу со звуком. Зачем, в принципе, нужен звук на телефоне? В первую очередь, чтобы воспроизводить звонок. С этой задачей мобильные устройства справляться уже научились. Было бы здорово также вставить какой-нибудь аудиоплеер. и здесь компания Google без особых раздумий перекладывает все на производителей устройств. Беспроводное проигрывание через Bluetooth или динамики мобильных устройств зависит от ряда дополнительных факторов, требующих отдельного изучения, поэтому в данной статье мы рассмотрим, как обстоят дела с воспроизведением аудио исключительно через разъем для наушников.

До выхода Android L операционная система поддерживала «из коробки» только PCM-аудио с частотой дискретизации 44,1 или 48 кГц. К этому общему знаменателю по умолчанию приводится весь пропускаемый через систему аудиопоток. Исправление ситуации проходит на уровне конкретных производителей, которые устанавливают собственные ЦАП и пишут для них софт. Это могут позволить себе лишь крупные компании. Приобретая такое недешевое устройство как смартфон, хочется услышать адекватный по стоимости аудиочип, но на сегодняшний день это является скорее исключением из правил — большинство моделей ограничиваются лишь тем, что включено в однокристальную систему. А это значит, что воспроизведение происходит с принудительной конвертацией звука в формат, описанный в начале абзаца.

Любой, кто хотя бы немного знаком с обработкой звука, знает, что всякое препятствие на его пути чревато самыми тяжелыми последствиями. При желании проследить всю обработку звука в ОС Android можно через исходный код. Уже при поверхностном изучении настороженность вызывают следующие моменты:

  1. Для принудительной конвертации в нативный формат применяются как минимум целых три конвертера — в audioflinger, speex и webrtc. Здесь никакого прогресса не наблюдается с самых ранних версий, Google лишь исправляет баги.
  2. Слишком высокий тайминг в аудиосервере Android (audioflinger/libstagefright) при большом числе потоков.
  3. Программная регулировка громкости — критичный для аудиофилов аспект, с которым, увы, ничего не поделаешь в принципе.
  4. Колоссальные проблемы с поддержкой ALSA-драйверов (Advanced Linux Sound Architecture). Этот вопрос решается на уровне производителей устройств. Некоторые из них уже предлагают удачные решения, например, Sony и HTC.

Помимо R&D-отделов больших компаний, над улучшением звука Android активно работают энтузиасты, разрешающие порой чуть ли не безвыходные проблемы. Плоды этих титанических трудов можно оценить на пресловутом XDA Developers.

Здесь работает общее правило: чем ниже уровень, на котором производятся улучшения, тем эффективней будет результат. Материнские платы компьютеров легко вмещают всякие разновидности «high definition audio», способные удовлетворить не очень щепетильного пользователя. Что же касается современных мобильных устройств, то их размеры создают для реализации качественного звука гораздо более серьезные ограничения.

Тем не менее, прогресс в звуковой составляющей современных смартфонов очевиден. Как это ни удивительно, даже чипсетные кодеки порой играют неплохо, например, ЦАП Hexagon, устанавливаемые в SoC Qualcomm Snapdragon. Что касается однокристальных систем, менее выдающихся в плане звука (модели Samsung Exynos, Mediatek MTK), то их производители сейчас нередко устанавливают сторонние ЦАП. К сожалению, при таком подходе обычно игнорируется сопроводительная документация, что приводит к затруднениям на более высоких уровнях.

А выше «железа» у нас прописано ядро Linux — база, на которой функционирует ОС Android. Здесь находится все, что обеспечивает работу аппаратной начинки. Конкретно за звук отвечает ALSA — Advanced Linux Sound Architecture. Пионером в реализации ALSA стала компания Samsung, а вообще в ранних устройствах на базе Android эта архитектура еще не поддерживалась, поскольку сама Google еще не пришла к необходимости единообразия на данном уровне разработки.

Сама по себе архитектура ALSA является весьма оригинальной, что отчасти объясняет проблема в создании низкоуровневого ПО. Даже на написание даже простого драйвера требуется много времени. К тому же, в отличие от десктопных систем, у смартфонов есть своя специфика. Поскольку мы имеем дело с телефоном, обязательна реализация голосовой связи. Кроме того, требуется грамотное управление питанием — об автономной работе Android-устройств лишний раз и говорить нечего. Наконец, учитывая ограниченные ресурсы прикладного ЦП, встает вопрос о декодировании популярных форматов другими аппаратными средствами.

Типичный сценарий работы над ALSA-драйверами сегодня выглядит следующим образом. Поставщик SoC или кодека предоставляет производителю устройства некую «рыбу» в комплекте с многотомной документацией, при виде которой у Linux-сообщества потекли бы слюнки. Но работникам R&D-отделов производителя такой энтузиазм, мягко говоря, не свойственен. В результате чего пользователи получают ПО, где взамен реализованных возможностей железа предлагаются лишь бесчисленные баги и вообще полнейшие нелепости.

Читайте также:  Ufc 4pda android tv

В качестве примера можно привести компанию Qualcomm, которая никакой документацией с аудиторией не делится. Но хотя бы выкладывает исходный код драйверов на своем сайте codeaurora.org. С другими поставщиками чипов ситуация тоже непростая. Даже такие либеральные в этом плане компании как Texas Instruments или Intel, публикующие все спецификации своих устройств еще до начала поставок, иной раз хранят молчание, когда речь заходит о звуке.

Что касаются производителей «второго эшелона» (как правило, многочисленных и малоизвестных компаний из Китая), то в соответствии с лицензией GPL они не обнародуют исходный код ядра вообще. С этической точки зрения выглядит это весьма скверно: на основе открытого кода Linux создается по сути закрытый, засекреченный продукт.

Как же свести весь этот «зоопарк» к общему знаменателю, чтобы любой обладатель Android-устройства мог получить качественный звук? Интерфейс ALSA-драйверов един, и, если доступны их исходные файлы, можно попытаться самостоятельно улучшить качество звука, чтобы использовать возможности устройства на 100%.

Поскольку взаимодействие осуществляется на уровне ядра, для всех нововведений потребуется наличие рут-доступа. Это позволит обойти верхние уровни аудиосистемы Android и взаимодействовать с ALSA-драйверами напрямую. Что и делает программа, которую мы задействуем для сравнительного тестирования аудиотрактов.

Источник

Звук Android

ОС Android обеспечивает расширенную поддержку мультимедиа, охватывающую как аудио, так и видео. В этом руководстве рассказывается о звуках в Android и рассматривается воспроизведение и запись звука с помощью встроенных классов аудио Player и записывающего класса, а также низкоуровневого аудио API. Кроме того, в нем рассматривается работа с звуковыми событиями в других приложениях, что позволяет разработчикам создавать хорошо работающие приложения.

Обзор

Современные мобильные устройства обладают функциональными возможностями, которые раньше имели бы необходимость в выделенном оборудовании — камерах, музыкальных проигрывателях и средствах записи видео. По этой причине мультимедийные платформы стали функцией первого класса в мобильных интерфейсах API.

Android обеспечивает расширенную поддержку мультимедиа. В этой статье рассматривается работа с аудио в Android и рассматриваются следующие темы.

Воспроизведение аудио с помощью MediaPlayer — использование встроенного класса для воспроизведения аудио, включая локальные звуковые файлы и потоковые аудиофайлы с AudioTrack классом.

Запись звука — использование встроенного класса для записи звука.

Работа с звуковыми уведомлениями — использование звуковых уведомлений для создания хорошо настроенных приложений, которые правильно реагируют на события (например, входящие телефонные звонки), приостанавливая или отменяя выходные выходы.

Работа с Low-Level звуком — воспроизведение звука с помощью класса путем записи непосредственно в буферы памяти. Запись звука с помощью AudioRecord класса и чтение непосредственно из буферов памяти.

Требования

Для работы с этим руководством требуется Android 2,0 (API уровня 5) или более поздней версии. Обратите внимание, что отладка звука на Android должна выполняться на устройстве.

Необходимо запросить RECORD_AUDIO разрешения в RECORD_AUDIO :

Воспроизведение звука с помощью класса MediaPlayer

Самым простым способом воспроизведения звука в Android является встроенный класс MediaPlayer . MediaPlayer может играть как локальные, так и удаленные файлы, передав путь к файлу. Однако MediaPlayer является очень чувствительным к состоянию, и вызов одного из его методов в неправильном состоянии приведет к возникновению исключения. Чтобы избежать ошибок, важно взаимодействовать с MediaPlayer в порядке, описанном ниже.

Инициализация и воспроизведение

Для воспроизведения звука MediaPlayer требуется следующая последовательность:

Создайте экземпляр нового объекта MediaPlayer .

Настройте файл для воспроизведения с помощью метода сетдатасаурце .

Вызовите метод Prepare , чтобы инициализировать проигрыватель.

Вызовите метод Start , чтобы начать воспроизведение звука.

Это использование показано в приведенном ниже примере кода.

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

Воспроизведение можно приостановить, вызвав метод Pause :

Чтобы возобновить приостановленное воспроизведение, вызовите метод Start . Это будет возобновлено из приостановленного места воспроизведения:

Вызов метода останавливает на проигрывателе завершает текущее воспроизведение:

Если проигрыватель больше не нужен, необходимо освободить ресурсы, вызвав метод Release :

Использование класса Медиарекордер для записи звука

Для MediaPlayer записи звука в Android используется класс MediaPlayer . Как и MediaPlayer , оно зависит от состояния и переходит по нескольким состояниям, чтобы получить точку, с которой он может начать запись. Для записи звука RECORD_AUDIO необходимо задать разрешение. Инструкции по настройке разрешений приложений см. в разделе Работа с AndroidManifest.xml.

Инициализация и запись

Для записи звука в MediaRecorder необходимо выполнить следующие действия.

Создайте экземпляр нового объекта Медиарекордер .

Укажите, какое аппаратное устройство следует использовать для записи звуковых данных с помощью метода сетаудиосаурце .

Задайте звуковой формат выходного файла с помощью метода сетаутпутформат . Список поддерживаемых типов аудио см. в статье форматы мультимедиа, поддерживаемые Android.

Вызовите метод сетаудиоенкодер , чтобы задать тип кодирования звука.

Вызовите метод сетаутпутфиле , чтобы указать имя выходного файла, в который записываются звуковые данные.

Вызовите метод Prepare , чтобы инициализировать средство записи.

Чтобы начать запись, вызовите метод Start .

Эта последовательность показана в следующем образце кода:

Остановка записи

Чтобы прерывать запись, вызовите Stop метод для MediaRecorder :

Очистка

После MediaRecorder остановки, вызовите метод MediaRecorder , чтобы вернуть его в состояние простоя:

Если объект MediaRecorder больше не нужен, его ресурсы необходимо освободить, вызвав метод MediaRecorder :

Управление звуковыми уведомлениями

Класс Аудиоманажер

Класс аудиоманажер предоставляет доступ к звуковым уведомлениям, которые позволяют приложениям узнавать о возникновении звуковых событий. Эта служба также предоставляет доступ к другим звуковым функциям, таким как управление режимами громкости и звонка. AudioManager Позволяет приложению работать с звуковыми уведомлениями для управления воспроизведением звука.

Управление фокусом звука

Звуковые ресурсы устройства (встроенные проигрыватель и устройство записи) совместно используются всеми работающими приложениями.

По сути, это похоже на приложения на настольном компьютере, где только одно приложение имеет фокус клавиатуры. После выбора одного из выполняющихся приложений при щелчке мышью, ввод с клавиатуры поступает только в это приложение.

Читайте также:  Богослужебные указания 2021 для андроид

Фокус звука является похожей идеей и предотвращает одновременное воспроизведение или запись звука несколькими приложениями. Это сложнее, чем фокус клавиатуры, так как оно является добровольным — приложение может игнорировать тот факт, что в настоящее время он не имеет фокуса и не работает, так как существуют различные типы звуковых фокусов, которые могут быть запрошены. Например, если ожидается, что запрашивающий должен воспроизводить звук в течение очень короткого времени, он может запросить временный фокус.

Фокус звука может быть предоставлен немедленно или изначально отклонен и предоставлен позже. Например, если приложение запрашивает фокус ввода во время звонка, оно будет отклонено, но после завершения звонка фокус может быть предоставлен. В этом случае прослушиватель регистрируется, чтобы ответить соответствующим образом при отсутствии звука. Запрос на запись звука используется для определения того, можно ли воспроизвести или записать звук.

Дополнительные сведения о звуковых фокусах см. в разделе Управление звуковым фокусом.

Регистрация обратного вызова для звукового фокуса

Регистрация FocusChangeListener обратного вызова из IOnAudioChangeListener является важной частью получения и снятия фокуса звука. Это связано с тем, что предоставление фокуса звука может быть отложено до последующего времени. Например, приложение может запрашивать воспроизведение музыки, пока выполняется телефонный звонок. Фокус звука не будет предоставляться до завершения звонка.

По этой причине объект обратного вызова передается как параметр в GetAudioFocus метод объекта AudioManager , и этот вызов регистрирует обратный вызов. Если фокус аудио изначально был отклонен, но позже предоставлен, приложение уведомляется о вызове OnAudioFocusChange по обратному вызову. Этот же метод используется для информирования приложения о том, что он находится в процессе записи.

Когда приложение завершит использование звуковых ресурсов, оно вызывает AbandonFocus метод AudioManager и снова передает обратный вызов. Это отменит обратный вызов и освободит звуковые ресурсы, чтобы другие приложения могли получить фокус звука.

Запрос фокуса звука

Ниже приведены шаги, необходимые для запроса звуковых ресурсов устройства.

Получение маркера для AudioManager системной службы.

Создайте экземпляр класса обратного вызова.

Запросите звуковые ресурсы устройства, вызвав RequestAudioFocus метод в AudioManager . Параметры — это объект обратного вызова, тип потока (музыка, голосовое обращение, кольцо и т. д.). и тип запрашиваемого права доступа (например, звуковые ресурсы можно запросить мгновенно или в течение неопределенного периода времени).

Если запрос предоставлен, playMusic метод вызывается немедленно, и начнется воспроизведение звука.

Если запрос отклоняется, дальнейшие действия не выполняются. В этом случае звук будет воспроизводиться, только если запрос будет предоставлен позже.

Следующие шаги показаны в примере кода ниже.

Освобождение фокуса звука

После завершения воспроизведения записи AbandonFocus AudioManager вызывается метод On. Это позволяет другому приложению получить звуковые ресурсы устройства. Другие приложения получат уведомление об изменении фокуса звука, если они зарегистрировали свои собственные прослушиватели.

Аудио API низкого уровня

Низкоуровневые API низкого уровня обеспечивают больший контроль над воспроизведением и записью звука, так как они взаимодействуют непосредственно с буферами памяти вместо использования URI файлов. Существует несколько сценариев, в которых предпочтительнее использовать такой подход. Ниже приведены соответствующие сценарии.

При воспроизведении из зашифрованных звуковых файлов.

При воспроизведении коротких клипов.

Потоковая передача звука.

Класс AudioTrack

Класс AudioTrack использует низкоуровневые интерфейсы аудио API для записи и является аналогом класса нижнего уровня .

Инициализация и воспроизведение

Для воспроизведения звука AudioTrack должен быть создан экземпляр нового экземпляра. В списке аргументов, переданном в конструктор , указывается способ воспроизведения звукового примера, содержащегося в буфере. Аргументы:

Тип потока — речь, Мелодия звонка, музыка, система или будильник.

Частота — частота дискретизации, выраженная в Гц.

Конфигурация канала — моно или стерео.

Формат аудио — 8 бит или 16-разрядная кодировка.

Размер буфера — в байтах.

Режим буфера — потоковая передача или статическая.

После создания вызывается метод Play для начала воспроизведения. Запись аудио буфера в AudioTrack запускает воспроизведение:

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

Чтобы приостановить воспроизведение, вызовите метод Pause :

Вызов метода остановить приведет к окончательному завершению воспроизведения:

Очистка

Если объект AudioTrack больше не нужен, его ресурсы должны быть освобождены вызовом AudioTrack :

Класс Аудиорекорд

Класс аудиорекорд эквивалентен на стороне записи. Как и AudioTrack в случае с файлами и URI, он использует буферы памяти непосредственно. Для этого требуется, чтобы RECORD_AUDIO разрешение было задано в манифесте.

Инициализация и запись

Первым шагом является создание нового объекта аудиорекорд . Список аргументов, переданный в конструктор , предоставляет всю информацию, необходимую для записи. В отличие от AudioTrack , где аргументы являются главными перечислениями, эквивалентные аргументы в AudioRecord являются целыми числами. Сюда входит следующее.

Аппаратный источник входных данных, например микрофон.

Тип потока — речь, Мелодия звонка, музыка, система или будильник.

Частота — частота дискретизации, выраженная в Гц.

Конфигурация канала — моно или стерео.

Формат аудио — 8 бит или 16-разрядная кодировка.

Размер буфера — в байтах

После создания AudioRecord метода вызывается его метод AudioRecord . Теперь она готова начать запись. Объект AudioRecord постоянно считывает звуковой буфер для входных данных и записывает его в звуковой файл.

Остановка записи

Вызов метода остановить завершает запись:

Очистка

Если AudioRecord объект больше не нужен, вызов метода AudioRecord освобождает все связанные с ним ресурсы:

Итоги

ОС Android предоставляет мощную платформу для воспроизведения, записи и управления аудио. В этой статье мы рассмотрели, как воспроизвести и записать звук с помощью высокоуровневых MediaPlayer MediaRecorder классов и. Далее рассматривается использование звуковых уведомлений для совместного использования звуковых ресурсов устройства различными приложениями. Наконец, она посвящена тому, как воспроизводить и записывать аудио с помощью низкоуровневых интерфейсов API, интерфейс которых напрямую использует буферы памяти.

Источник

Оцените статью