Android — Работа с android.media.AudioRecord


Содержание

Запись .Wav с Android AudioRecorder

Я прочитал много страниц об Android AudioRecorder. Вы можете увидеть их список ниже вопроса.

Я пытаюсь записать аудио с помощью AudioRecorder, но он не работает хорошо.

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

ПРИМЕЧАНИЕ. Мне нужно использовать AudioRecorder вместо MediaRecorder, потому что мое приложение будет выполнять другой процесс во время записи (отображение эквалайзера).

Вот список страниц, которые я прочитал об этой теме:

Есть много разных способов сделать это. Я пробовал много из них, но ничего не работает для меня. Я работаю над этой проблемой в течение примерно 6 часов, поэтому я был бы признателен за окончательный ответ, в идеале — пример кода.

Android Audiorecord не работает

1 luke88 [2012-10-31 20:09:00]

Я пытаюсь реализовать простой аудио-рекордер в Android. Это было очень легко с MediaRecorder, но для моей области мне нужен AudioRecord, потому что я должен преобразовать входные данные с помощью jTrasform. Но я не могу инициализировать Audiorecorder. Это мой код, где я пытаюсь с помощью методов findAudioRecord() использовать все комбинации для создания рекордера (CHANNEL, SAMPLE RATE. ). Никто из них не работает. Надежда в вашу помощь

Пять полезных приложений-диктофонов для Android

Безусловно, каждый из нас хоть раз в жизни сталкивался с ситуацией, когда нужно записать какую-либо информацию, а ручки и бумаги под рукой нет. Что уж говорить о студентах, мечтающих поспать на паре, или о начинающих журналистах, часто забывающих свои звукозаписывающие устройства дома. Современные девайсы уже давно научились решать эту проблему. Ведь практически в любом, даже простецком телефоне, есть функция голосовых заметок. Но пользователи не очень любят навязанные стоковые предложения. Да и в двадцать первом веке хочется чего-то более продвинутого, что позволит не просто сделать запись, а даст возможность зафиксировать телефонный разговор, установить таймер записи или сохранить полученный файл в удобный формат. Решить эти задачи могут сторонние приложения, коих в магазинах цифровой дистрибуции выложено сотнями. Сегодня уделим внимание программам-диктофонам для устройств под управлением Android OS.

Супер диктофон

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

Пользователю доступны семь пресетов качества записи. Файлы при этом сохраняются в удобном формате MP3. Разницы между средним и самым высоким качеством не наблюдается, а вот размер конечного файла при этом значительно отличается. Однако самый низкий по качеству пресет мало подходит для записи речи из-за огромного количества посторонних шумов. Оптимальным можно считать режим «Нормальное качество».

Главный минус приложения — реклама, хотя особых проблем она не доставляет.

Плюсы:

  • простой и приятный интерфейс;
  • семь пресетов качества.

Android — Работа с android.media.AudioRecord

We recommend upgrading to the latest Google Chrome or Firefox.

Join GitHub today

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

android-audiorecord-sample / src / main / java / com / example / audiorecord / AudioRecordActivity.java

Users who have contributed to this file

/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the «License»);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an «AS IS» BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.audiorecord ;
import android.media.AudioFormat ;
import android.media.AudioRecord ;
import android.media.MediaRecorder ;
import android.os.Bundle ;
import android.os.Environment ;
import android.support.v7.app.AppCompatActivity ;
import android.view.View ;
import android.widget.Button ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.nio.ByteBuffer ;
import java.util.concurrent.atomic.AtomicBoolean ;
/**
* Sample that demonstrates how to record a device’s microphone using < @link AudioRecord>.
*/
public class AudioRecordActivity extends AppCompatActivity <
private static final int SAMPLING_RATE_IN_HZ = 44100 ;
private static final int CHANNEL_CONFIG = AudioFormat . CHANNEL_IN_MONO ;
private static final int AUDIO_FORMAT = AudioFormat . ENCODING_PCM_16BIT ;
/**
* Factor by that the minimum buffer size is multiplied. The bigger the factor is the less
* likely it is that samples will be dropped, but more memory will be used. The minimum buffer
* size is determined by < @link AudioRecord#getMinBufferSize(int, int, int) >and depends on the
* recording settings.
*/
private static final int BUFFER_SIZE_FACTOR = 2 ;
/**
* Size of the buffer where the audio data is stored by Android
*/
private static final int BUFFER_SIZE = AudioRecord . getMinBufferSize( SAMPLING_RATE_IN_HZ ,
CHANNEL_CONFIG , AUDIO_FORMAT ) * BUFFER_SIZE_FACTOR ;
/**
* Signals whether a recording is in progress (true) or not (false).
*/
private final AtomicBoolean recordingInProgress = new AtomicBoolean ( false );
private AudioRecord recorder = null ;
private Thread recordingThread = null ;
private Button startButton;
private Button stopButton;
@Override
public void onCreate ( Bundle savedInstanceState ) <
super . onCreate(savedInstanceState);
setContentView( R . layout . audio);
startButton = ( Button ) findViewBy >R . >. btnStart);
startButton . setOnClickListener( new View . OnClickListener () <
@Override
public void onClick ( View v ) <
startRecording();
startButton . setEnabled( false );
stopButton . setEnabled( true );
>
>);
stopButton = ( Button ) findViewBy >R . >. btnStop);
stopButton . setOnClickListener( new View . OnClickListener () <
@Override
public void onClick ( View v ) <
stopRecording();
startButton . setEnabled( true );
stopButton . setEnabled( false );
>
>);
>
@Override
protected void onResume () <
super . onResume();
startButton . setEnabled( true );
stopButton . setEnabled( false );
>
@Override
protected void onPause () <
super . onPause();
stopRecording();
>
private void startRecording () <
recorder = new AudioRecord ( MediaRecorder . AudioSource . DEFAULT , SAMPLING_RATE_IN_HZ ,
CHANNEL_CONFIG , AUDIO_FORMAT , BUFFER_SIZE );
recorder . startRecording();
recordingInProgress . set( true );
recordingThread = new Thread ( new RecordingRunnable (), » Recording Thread » );
recordingThread . start();
>
private void stopRecording () <
if ( null == recorder) <
return ;
>
recordingInProgress . set( false );
recorder . stop();
recorder . release();
recorder = null ;
recordingThread = null ;
>
private class RecordingRunnable implements Runnable <
@Override
public void run () <
final File file = new File ( Environment . getExternalStorageDirectory(), » recording.pcm » );
final ByteBuffer buffer = ByteBuffer . allocateDirect( BUFFER_SIZE );
try ( final FileOutputStream outStream = new FileOutputStream (file)) <
while (recordingInProgress . get()) <
int result = recorder . read(buffer, BUFFER_SIZE );
if (result 0 ) <
throw new RuntimeException ( » Reading of audio buffer failed: » +
getBufferReadFailureReason(result));
>
outStream . write(buffer . array(), 0 , BUFFER_SIZE );
buffer . clear();
>
> catch ( IOException e) <
throw new RuntimeException ( » Writing of recorded audio failed » , e);
>
>
private String getBufferReadFailureReason ( int errorCode ) <
switch (errorCode) <
case AudioRecord . ERROR_INVALID_OPERATION :
return » ERROR_INVAL >» ;
case AudioRecord . ERROR_BAD_VALUE :
return » ERROR_BAD_VALUE » ;
case AudioRecord . ERROR_DEAD_OBJECT :
return » ERROR_DEAD_OBJECT » ;
case AudioRecord . ERROR :
return » ERROR » ;
default :
return » Unknown ( » + errorCode + » ) » ;
>
>
>
>
  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.


Передаем звук со «спящего» смартфона на сервер

О том, что стоящий в твоей комнате традиционный телефон с аккуратно лежащей на нем трубкой все равно может за тобой шпионить, известно чуть ли не со времен А. Г. Белла. Смартфоны продвинулись по этой скользкой дорожке значительно дальше. А как все это выглядит с программной точки зрения?

Введение

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

Исключительно в образовательных целях!

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

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

Ниже описана разработанная система команд между клиентом и сервером. Все команды передаются побайтово в следующем формате:

  • 0 — успешно выполнено;
  • -1 — произошла ошибка;
  • 1 — подключение клиента;
  • 2 — начало записи;
  • 3 — отправка записанного AAC-файла;
  • 4 — отправка записанного WAV-файла;
  • 5 — потоковая передача данных;
  • 6 — потоковая передача WAV-заголовка.

Клиент

Для начала давай зададимся вопросом, а что должен делать клиент. В нашем случае необходимо, чтобы телефон записывал звук в фоновом режиме, после чего незаметно для пользователя отправлял файл со звуком на сервер. Причем начинать запись телефон будет только с того момента, как пользователь нажмет кнопку записи, а общее время записи задает сам пользователь в настройках программы. Итак, задача поставлена, необходимо найти ее решение. На борту нашего клиент-телефона установлена операционная система Android. Из этого очевиден выбор языка программирования — им становится Java.

Для написания клиента установим на персональный компьютер IDE Eclipse и Android SDK. Для работы данных компонентов необходим установленный комплект разработчика приложений Java Develovoper Kit. После настройки всех необходимых компонентов подключаем к компьютеру телефон (не забываем про ОС Android) с включенной возможностью отладки по USB. Теперь ты готов кодить! Создай проект в Eclipse и начинай писать программу. Написать класс для подключения к серверу труда не составит. Основные поля этого класса: Socket (программный интерфейс для обеспечения обмена данными между клиентом и сервером.), IP (адрес для подключения), Port (параметр протоколов TCP и UDP) , поток для приема данных, поток для передачи данных. Следуя принципам объектно-ориентированного программирования, все поля делаем приватными (private). В этом классе реализуем метод sendPacket() и задаем его тип synchronized. Synchronized имеет два важных момента: это гарантия того, что только один поток выполняет секцию кода в один момент времени, а данные, измененные одним потоком, будут видны всем другим потокам. В методе sendPacket() при отправке данных создаем блок обработки исключений. Если возникает исключение, информацию о нем записываем в лог и закрываем сокет.

GUI мобильного приложения

Хакер #180. 2014: люди, вирусы, баги, релизы

Но на этом не стоит останавливаться, потребуется класс для записи данных (звука) (WavRecorder). Для этого класса необходимо описать:

  • количество бит на семпл (описываем в виде константы RECORDER_BPP = 16);
  • количество каналов записи (CHANNELINMONO);
  • формат записи (ENCODINGPCM16BIT);
  • флаг, показывающий, идет ли в данный момент запись (по умолчанию false);
  • идентификатор устройства;
  • IP-адрес сервера;
  • номер порта на сервере.
Цукерберг рекомендует:  Реальное применение свойства clip для формирования визуального эффекта

Все поля класса также делаем приватными.

На этом можно было бы и остановиться, но существует одна проблема: пользователю необходимо будет нажать на кнопку «Отправить файл» после записи, а это не самый логичный вариант для скрытого сбора данных. Для передачи данных в режиме непрерывной отправки на сервер напишем класс WavStreamer. Основой этого класса является метод run() (выполняется в отдельном потоке). Будем использовать его для записи звука и отправки данных на сервер — для дальнейшего хранения или обработки. Для потоковой передачи звука создадим «динамический» буфер, в него будут записываться наши данные с микрофона.

Подробный код ты можешь посмотреть в файле WavStreamer.java. Для самого простого клиента этих классов и методов будет достаточно. Создадим экземпляр Socket’a и будем коннектиться к серверу (о котором речь пойдет далее). В случае удачного присоединения к серверу программа ожидает дальнейших указаний пользователя о необходимости записи. Если соединение не установлено, пользователь должен быть проинформирован об этом (в нашем случае ошибкой соединения). Если мы хотим начать запись, то клиент должен сообщить об этом серверу. Клиент отправляет пакет данных, в котором есть некий код. По этому коду наш сервер понимает, что клиент начал запись. Для старта записи звука в программе создается поток WavRecorder. Этот поток записывает звуковые данные с микрофона клиента-телефона. Для дальнейшего открытия записанного файла в аудиопроигрывателе необходимо записать заголовок, который состоит из определенным образом сформированной последовательности данных (байт).

Данная последовательность представляет собой определенным образом созданный байтовый массив. Подобный массив описывается во многих интернет-источниках, если тебе не хочется искать его на просторах глобальной сети, то можешь посмотреть в исходниках (он расположен в файле WavStreamer.java).

Казалось бы, все должно работать… Но возникает вопрос: почему не работает? Так как мы пользовались функциями интернета и записи аудио, необходимо сообщить виртуальной Java-машине Dalvik о том, что наше приложение пользуется этими системными функциями. Давай заглянем в файл AndroidManifest.xml и добавим в него следующие строчки:

После этого Java-машина предоставит доступ к запрашиваемым системным функциям, описываемым в манифесте.

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

Сервер

Как и в случае с клиентом, зададимся вопросом: что должен делать сервер? Исходя из задач самого клиента, сервер должен иметь возможность получать данные от клиентов. Данные каждого клиента будут находиться в разных папках и не будут пересекаться с данными других пользователей. Сервер напишем на языке C++ с использованием фреймворка Qt5 (http://qt-project.org/downloads).

Qt — кросс-платформенный инструментарий разработки ПО. Он включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML.

Одну из основных особенностей Qt составляет повсеместное применение концепции сигналов и слотов, использующихся для взаимодействия между объектами. По своей сути слот — это метод класса, который вызывается, когда происходит какое-либо событие (сигнал). Это сильно облегчает разработку графических интерфейсов или работу с сетью. Достаточно подписаться на какой-то сигнал, который генерирует сам Qt или один из классов программы, и нужная функция-обработчик будет автоматически вызвана при его наступлении.

Уведомление во время активной записи

Теперь перейдем к описанию структуры сервера. Основным классом сервера является MyServer, который инкапсулирует в себе объект типа QTcpServer, отвечающий за сетевое взаимодействие. MyServer на вход подается номер порта и IP, на котором будет работать QTcpServer. В обязанности данного класса входит управление новыми соединениями и перенаправление подключенных клиентов на другой класс. Для начала запустим QTcpServer, передав ему входные данные, и установим обработчик (слот) на сигнал типа newConnection(). Этот сигнал генерируется объектом класса QTcpServer при появлении нового соединения. В случае успешного запуска сервер переходит в режим сканирования порта. Обработчик новых подключений передает задачу по считыванию поступающих данных на объект типа User.

Класс User при помощи функции getMessage() обрабатывает поступающие данные и вызывает соответствующую функцию для обработки запроса от клиента.

Для каждого клиента создается новый каталог, в который записываются файлы клиента. Таким образом, два клиента не будут иметь возможность записывать данные в один и тот же каталог. Файлы, хранящиеся на сервере, могут быть открыты с использованием любого аудиоплеера (для примера был использован VLC media player (https://www.videolan.org) ), который поддерживает воспроизведение файлов формата WAV.

Нет предела совершенству

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

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


В случае с «облачным сервером» возникает проблема доступа к данным, полученным с мобильного устройства. Решить эту проблему можно путем создания специального клиента-администратора, который получает доступ к данным под конкретной учетной записью и только под ней. Защита звуковых данных пользователя прежде всего!

Заключение

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

Звук Android Android Audio

ОС Android обеспечивает расширенную поддержку мультимедиа, охватывающую как аудио, так и видео. В этом руководстве рассказывается о звуках в Android и рассматривается воспроизведение и запись звука с помощью встроенных классов аудио Player и записывающего класса, а также низкоуровневого аудио API. Кроме того, в нем рассматривается работа с звуковыми событиями в других приложениях, что позволяет разработчикам создавать хорошо работающие приложения. The Android OS provides extensive support for multimedia, encompassing both audio and video. This guide focuses on audio in Android and covers playing and recording audio using the built-in audio player and recorder classes, as well as the low-level audio API. It also covers working with Audio events broadcast by other applications, so that developers can build well-behaved applications.

Обзор Overview

Современные мобильные устройства обладают функциональными возможностями, которые раньше использовали выделенные компоненты оборудования – камер, музыкальные проигрыватели и средства записи видео. Modern mobile devices have adopted functionality that formerly would have required dedicated pieces of equipment – cameras, music players and video recorders. По этой причине мультимедийные платформы стали функцией первого класса в мобильных интерфейсах API. Because of this, multimedia frameworks have become a first-class feature in mobile APIs.

Android обеспечивает расширенную поддержку мультимедиа. Android provides extensive support for multimedia. В этой статье рассматривается работа с аудио в Android и рассматриваются следующие темы. This article examines working with audio in Android, and covers the following topics

Воспроизведение аудио с помощью MediaPlayer – использование встроенного класса MediaPlayer для воспроизведения звуковых файлов, включая локальные аудиофайлы и потоковые аудиофайлы с помощью класса AudioTrack . Playing Audio with MediaPlayer – Using the built-in MediaPlayer class to play audio, including local audio files and streamed audio files with the AudioTrack class.

Запись аудио – с помощью встроенного класса MediaRecorder для записи звука. Recording Audio – Using the built-in MediaRecorder class to record audio.

Работа с звуковыми уведомлениями – использование звуковых уведомлений для создания правильно настроенных приложений, которые правильно реагируют на события (например, входящие телефонные вызовы) путем приостановки или отмены звуковых выходов. Working with Audio Notifications – Using audio notifications to create well-behaved applications that respond correctly to events (such as incoming phone calls) by suspending or canceling their audio outputs.

Работа с аудио – низкого уровня воспроизведение звука с помощью класса AudioTrack путем записи непосредственно в буферы памяти. Working with Low-Level Audio – Playing audio using the AudioTrack class by writing directly to memory buffers. Запись звука с помощью класса AudioRecord и чтение непосредственно из буферов памяти. Recording audio using the AudioRecord class and reading directly from memory buffers.

Требования Requirements

Для работы с этим руководством требуется Android 2,0 (API уровня 5) или более поздней версии. This guide requires Android 2.0 (API level 5) or higher. Обратите внимание, что отладка звука на Android должна выполняться на устройстве. Please note that debugging audio on Android must be done on a device.

Необходимо запросить разрешения RECORD_AUDIO в AndroidManifest. XML: It is necessary to request the RECORD_AUDIO permissions in AndroidManifest.XML:

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

Самым простым способом воспроизведения звука в Android является встроенный класс MediaPlayer . The simplest way to play audio in Android is with the built-in MediaPlayer class. MediaPlayer могут играть локальные или удаленные файлы путем передачи пути к файлу. MediaPlayer can play either local or remote files by passing in the file path. Однако MediaPlayer является очень чувствительным к состоянию и вызов одного из его методов в неправильном состоянии приведет к возникновению исключения. However, MediaPlayer is very state-sensitive and calling one of its methods in the wrong state will cause an exception to be thrown. Важно взаимодействовать с MediaPlayer в порядке, описанном ниже, чтобы избежать ошибок. It’s important to interact with MediaPlayer in the order described below to avoid errors.

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

Для воспроизведения звука с MediaPlayer требуется следующая последовательность: Playing audio with MediaPlayer requires the following sequence:

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

Настройте файл для воспроизведения с помощью метода сетдатасаурце . Configure the file to play via the SetDataSource method.

Вызовите метод Prepare , чтобы инициализировать проигрыватель. Call the Prepare method to initialize the player.

Вызовите метод Start , чтобы начать воспроизведение звука. Call the Start method to start the audio playing.

Это использование показано в приведенном ниже примере кода. The code sample below illustrates this usage:

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

Воспроизведение можно приостановить, вызвав метод Pause : The playback can be suspended by calling the Pause method:

Чтобы возобновить приостановленное воспроизведение, вызовите метод Start . To resume paused playback, call the Start method. Это будет возобновлено из приостановленного места воспроизведения: This will resume from the paused location in the playback:

Вызов метода останавливает на проигрывателе завершает текущее воспроизведение: Calling the Stop method on the player ends an ongoing playback:

Если проигрыватель больше не нужен, необходимо освободить ресурсы, вызвав метод Release : When the player is no longer needed, the resources must be released by calling the Release method:

Использование класса Медиарекордер для записи звука Using the MediaRecorder Class to Record Audio

Чтобы MediaPlayer для записи звука в Android, используется класс Медиарекордер . The corollary to MediaPlayer for recording audio in Android is the MediaRecorder class. Как и MediaPlayer , оно чувствительно к состоянию и переходит по нескольким состояниям, чтобы получить точку, с которой он может начать запись. Like the MediaPlayer , it is state-sensitive and transitions through several states to get to the point where it can start recording. Для записи звука необходимо задать разрешение RECORD_AUDIO . In order to record audio, the RECORD_AUDIO permission must be set. Инструкции по настройке разрешений приложений см. в статье Работа с AndroidManifest. XML. For instructions on how to set application permissions see Working with AndroidManifest.xml.

Инициализация и запись Initializing and Recording

Для записи звука с MediaRecorder необходимо выполнить следующие действия. Recording audio with the MediaRecorder requires the following steps:

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

Укажите, какое аппаратное устройство следует использовать для записи звуковых данных с помощью метода сетаудиосаурце . Specify which hardware device to use to capture the audio input via the SetAudioSource method.

Цукерберг рекомендует:  Вакансии Нетология-групп


Задайте звуковой формат выходного файла с помощью метода сетаутпутформат . Set the output file audio format using the SetOutputFormat method. Список поддерживаемых типов аудио см. в статье форматы мультимедиа, поддерживаемые Android. For a list of supported audio types see Android Supported Media Formats.

Вызовите метод сетаудиоенкодер , чтобы задать тип кодирования звука. Call the SetAudioEncoder method to set the audio encoding type.

Вызовите метод сетаутпутфиле , чтобы указать имя выходного файла, в который записываются звуковые данные. Call the SetOutputFile method to specify the name of the output file that the audio data is written to.

Вызовите метод Prepare , чтобы инициализировать средство записи. Call the Prepare method to initialize the recorder.

Чтобы начать запись, вызовите метод Start . Call the Start method to start recording.

Эта последовательность показана в следующем образце кода: The following code sample illustrates this sequence:

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

Чтобы прерывать запись, вызовите метод Stop на MediaRecorder : To stop the recording, call the Stop method on the MediaRecorder :

Очистка Cleaning up

После остановки MediaRecorder вызовите метод Reset , чтобы вернуть его в состояние простоя: Once the MediaRecorder has been stopped, call the Reset method to put it back into its idle state:

Если MediaRecorder больше не требуется, его ресурсы необходимо освободить, вызвав метод Release : When the MediaRecorder is no longer needed, its resources must be released by calling the Release method:

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

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

Класс аудиоманажер предоставляет доступ к звуковым уведомлениям, которые позволяют приложениям узнавать о возникновении звуковых событий. The AudioManager class provides access to audio notifications that let applications know when audio events occur. Эта служба также предоставляет доступ к другим звуковым функциям, таким как управление режимами громкости и звонка. This service also provides access to other audio features, such as volume and ringer mode control. AudioManager позволяет приложению работать с звуковыми уведомлениями для управления воспроизведением звука. The AudioManager allows an application to handle audio notifications to control audio playback.

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

Звуковые ресурсы устройства (встроенные проигрыватель и устройство записи) совместно используются всеми работающими приложениями. The audio resources of the device (the built-in player and recorder) are shared by all running applications.

По сути, это похоже на приложения на настольном компьютере, где только одно приложение имеет фокус клавиатуры. После выбора одного из выполняющихся приложений при щелчке мышью, ввод с клавиатуры поступает только в это приложение. Conceptually, this is similar to applications on a desktop computer where only one application has the keyboard focus: after selecting one of the running applications by mouse-clicking it, the keyboard input goes only to that application.

Фокус звука является похожей идеей и предотвращает одновременное воспроизведение или запись звука несколькими приложениями. Audio focus is a similar idea and prevents more than one application from playing or recording audio at the same time. Это сложнее, чем фокус клавиатуры, так как оно является добровольным – приложение может игнорировать тот факт, что в настоящее время он не имеет фокуса и воспроизводится независимо от – и из-за наличия различных типов звуковых фокусов, которые могут быть запрошены. It is more complicated than keyboard focus because it is voluntary – the application can ignore that fact that it does not currently have audio focus and play regardless – and because there are different types of audio focus that can be requested. Например, если ожидается, что запрашивающий должен воспроизводить звук в течение очень короткого времени, он может запросить временный фокус. For example, if the requestor is only expected to play audio for a very short time, it may request transient focus.

Фокус звука может быть предоставлен немедленно или изначально отклонен и предоставлен позже. Audio focus may be granted immediately, or initially denied and granted later. Например, если приложение запрашивает фокус ввода во время звонка, оно будет отклонено, но после завершения звонка фокус может быть предоставлен. For example, if an application requests audio focus during a phone call, it will be denied, but focus may well be granted once the phone call is finished. В этом случае прослушиватель регистрируется, чтобы ответить соответствующим образом при отсутствии звука. In this case, a listener is registered in order to respond accordingly if audio focus is taken away. Запрос на запись звука используется для определения того, можно ли воспроизвести или записать звук. Requesting audio focus is used to determine whether or not it is OK to play or record audio.

Дополнительные сведения о звуковых фокусах см. в разделе Управление звуковым фокусом. For more information about audio focus, see Managing Audio Focus.

Регистрация обратного вызова для звукового фокуса Registering the Callback for Audio Focus

Регистрация обратного вызова FocusChangeListener из IOnAudioChangeListener является важной частью получения и снятия фокуса звука. Registering the FocusChangeListener callback from the IOnAudioChangeListener is an important part of obtaining and releasing audio focus. Это связано с тем, что предоставление фокуса звука может быть отложено до последующего времени. This is because the granting of audio focus may be deferred until a later time. Например, приложение может запрашивать воспроизведение музыки, пока выполняется телефонный звонок. For example, an application may request to play music while there is a phone call in progress. Фокус звука не будет предоставляться до завершения звонка. Audio focus will not be granted until the phone call is finished.

По этой причине объект обратного вызова передается как параметр в метод GetAudioFocus AudioManager , и это вызов, регистрирующий обратный вызов. For this reason, the callback object is passed as a parameter into the GetAudioFocus method of the AudioManager , and it is this call that registers the callback. Если фокус звука изначально был отклонен, но позже предоставлен, приложение уведомляется, вызывая OnAudioFocusChange для обратного вызова. If audio focus is initially denied but later granted, the application is informed by invoking OnAudioFocusChange on the callback. Этот же метод используется для информирования приложения о том, что он находится в процессе записи. The same method is used to tell the application that audio focus is being taken away.

Когда приложение завершит использование звуковых ресурсов, оно вызывает метод AbandonFocus AudioManager и снова передает обратный вызов. When the application has finished using the audio resources, it calls the AbandonFocus method of the AudioManager , and again passes in the callback. Это отменит обратный вызов и освободит звуковые ресурсы, чтобы другие приложения могли получить фокус звука. This deregisters the callback and releases the audio resources, so that other applications may obtain audio focus.

Запрос фокуса звука Requesting Audio Focus

Ниже приведены шаги, необходимые для запроса звуковых ресурсов устройства. The steps required to request the audio resources of the device are as follow:

Получение маркера для системной службы AudioManager . Obtain a handle to the AudioManager system service.

Создайте экземпляр класса обратного вызова. Create an instance of the callback class.

Запросите звуковые ресурсы устройства, вызвав метод RequestAudioFocus на AudioManager . Request the audio resources of the device by calling the RequestAudioFocus method on the AudioManager . Параметры — это объект обратного вызова, тип потока (музыка, голосовой вызов, кольцо и т. д.) и тип запрашиваемого права доступа (например, звуковые ресурсы можно запросить мгновенно или в течение неопределенного периода времени). The parameters are the callback object, the stream type (music, voice call, ring etc.) and the type of the access right being requested (the audio resources can be requested momentarily or for an indefinite period, for example).

Если запрос предоставлен, метод playMusic вызывается немедленно, и начнется воспроизведение звука. If the request is granted, the playMusic method is invoked immediately, and the audio starts to play back.

Если запрос отклоняется, дальнейшие действия не выполняются. If the request is denied, no further action is taken. В этом случае звук будет воспроизводиться, только если запрос будет предоставлен позже. In this case, the audio will only play if the request is granted at a later time.

Следующие шаги показаны в примере кода ниже. The code sample below shows these steps:

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

После завершения воспроизведения записи вызывается метод AbandonFocus в AudioManager . When the playback of the track is complete, the AbandonFocus method on AudioManager is invoked. Это позволяет другому приложению получить звуковые ресурсы устройства. This allows another application to gain the audio resources of the device. Другие приложения получат уведомление об изменении фокуса звука, если они зарегистрировали свои собственные прослушиватели. Other applications will receive a notification of this audio focus change if they have registered their own listeners.

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

Низкоуровневые API низкого уровня обеспечивают больший контроль над воспроизведением и записью звука, так как они взаимодействуют непосредственно с буферами памяти вместо использования URI файлов. The low-level audio APIs provide a greater control over audio playing and recording because they interact directly with memory buffers instead of using file URIs. Существует несколько сценариев, в которых предпочтительнее использовать такой подход. There are some scenarios where this approach is preferable. К таким сценариям относятся: Such scenarios include:


При воспроизведении из зашифрованных звуковых файлов. When playing from encrypted audio files.

При воспроизведении коротких клипов. When playing a succession of short clips.

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

Класс AudioTrack AudioTrack Class

Класс AudioTrack использует низкоуровневые API низкого уровня для записи, а является аналогом класса MediaPlayer . The AudioTrack class uses the low-level audio APIs for recording, and is the low-level equivalent of the MediaPlayer class.

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

Для воспроизведения звука должен быть создан новый экземпляр AudioTrack . To play audio, a new instance of AudioTrack must be instantiated. В списке аргументов, переданном в конструктор , указывается способ воспроизведения звукового примера, содержащегося в буфере. The argument list passed into the constructor specifies how to play the audio sample contained in the buffer. Аргументы: The arguments are:

Тип потока – голоса, мелодии звонка, музыки, системы или оповещения. Stream type – Voice, ringtone, music, system or alarm.

Частота, –ая частотой выборки, выраженная в Гц. Frequency – The sampling rate expressed in Hz.

Конфигурация канала – Mono или стерео. Channel Configuration – Mono or stereo.

Формат аудио – 8 бит или 16 бит кодирования. Audio format – 8 bit or 16 bit encoding.

Размер буфера – в байтах. Buffer size – in bytes.

Режим буфера – потоковой или статической. Buffer mode – streaming or static.

После создания вызывается метод Play AudioTrack , чтобы настроить его для начала воспроизведения. After construction, the Play method of AudioTrack is invoked, to set it up to start playing. Запись аудио буфера в AudioTrack запускает воспроизведение: Writing the audio buffer to the AudioTrack starts the playback:

Приостановка и остановка воспроизведения Pausing and Stopping the Playback

Чтобы приостановить воспроизведение, вызовите метод Pause : Call the Pause method to pause the playback:

Вызов метода остановить приведет к окончательному завершению воспроизведения: Calling the Stop method will terminate the playback permanently:

Чистку Cleanup

Если AudioTrack больше не требуется, его ресурсы должны быть освобождены вызовом Release: When the AudioTrack is no longer needed, its resources must be released by calling Release:

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

Класс аудиорекорд эквивалентен AudioTrack на стороне записи. The AudioRecord class is the equivalent of AudioTrack on the recording side. Как и AudioTrack , он использует буферы памяти непосредственно вместо файлов и URI. Like AudioTrack , it uses memory buffers directly, in place of files and URIs. Для этого требуется, чтобы в манифесте было задано разрешение RECORD_AUDIO . It requires that the RECORD_AUDIO permission be set in the manifest.

Инициализация и запись Initializing and Recording

Первым шагом является создание нового объекта аудиорекорд . The first step is to construct a new AudioRecord object. Список аргументов, переданный в конструктор , предоставляет всю информацию, необходимую для записи. The argument list passed into the constructor provides all the information required for recording. В отличие от AudioTrack , где аргументы являются главными перечислениями, эквивалентными аргументами в AudioRecord являются целые числа. Unlike in AudioTrack , where the arguments are largely enumerations, the equivalent arguments in AudioRecord are integers. Сюда входит следующее. These include:

Цукерберг рекомендует:  Основы КоДизайна

Аппаратный источник входных данных, например микрофон. Hardware audio input source such as microphone.

Тип потока – голоса, мелодии звонка, музыки, системы или оповещения. Stream type – Voice, ringtone, music, system or alarm.

Частота, –ая частотой выборки, выраженная в Гц. Frequency – The sampling rate expressed in Hz.

Конфигурация канала – Mono или стерео. Channel Configuration – Mono or stereo.

Формат аудио – 8 бит или 16 бит кодирования. Audio format – 8 bit or 16 bit encoding.

Размер буфера — в байтах Buffer size-in bytes

После создания AudioRecord вызывается его метод стартрекординг . Once the AudioRecord is constructed, its StartRecording method is invoked. Теперь она готова начать запись. It is now ready to begin recording. AudioRecord постоянно считывает аудио буфер для ввода и записывает эти данные в звуковой файл. The AudioRecord continuously reads the audio buffer for input, and writes this input out to an audio file.

Остановка записи Stopping the Recording

Вызов метода остановить завершает запись: Calling the Stop method terminates the recording:

Чистку Cleanup

Если объект AudioRecord больше не нужен, вызов метода выпуска освобождает все связанные с ним ресурсы: When the AudioRecord object is no longer needed, calling its Release method releases all resources associated with it:

Сводка Summary


ОС Android предоставляет мощную платформу для воспроизведения, записи и управления аудио. The Android OS provides a powerful framework for playing, recording and managing audio. В этой статье мы рассмотрели, как воспроизвести и записать звук с помощью классов MediaPlayer и MediaRecorder высокого уровня. This article covered how to play and record audio using the high-level MediaPlayer and MediaRecorder classes. Далее рассматривается использование звуковых уведомлений для совместного использования звуковых ресурсов устройства различными приложениями. Next, it explored how to use audio notifications to share the audio resources of the device between different applications. Наконец, она посвящена тому, как воспроизводить и записывать аудио с помощью низкоуровневых интерфейсов API, интерфейс которых напрямую использует буферы памяти. Finally, it dealt with how to playback and record audio using the low-level APIs, which interface directly with memory buffers.

Android Audiorecord не работает

1 luke88 [2012-10-31 20:09:00]

Я пытаюсь реализовать простой аудио-рекордер в Android. Это было очень легко с MediaRecorder, но для моей области мне нужен AudioRecord, потому что я должен преобразовать входные данные с помощью jTrasform. Но я не могу инициализировать Audiorecorder. Это мой код, где я пытаюсь с помощью методов findAudioRecord() использовать все комбинации для создания рекордера (CHANNEL, SAMPLE RATE. ). Никто из них не работает. Надежда в вашу помощь

android-mediarecorder

Я пытаюсь записать голос с помощью MediaRecorder, когда звонок входит и выходит из телефона. I have implemented A BroadcastReceiver to…

я искал много тем, но нет прямого ответа. У меня есть этот код : recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);…

Я пытался сделать возможным одновременное использование камеры.startFaceDetection и mediaRecorder.начать. Но он всегда разбился, есть ли какой-то идеал для этого сценария?…

Мое приложение записывает аудио в формате amr. Он работает довольно хорошо на некоторых устройствах, но на других он не может…

Я пытаюсь передавать видео с камеры android через локальный сокет unix и записывать файл из потока на sdcard. Все работает…

У меня странная проблема с Android media recorder. На некоторых устройствах следующий код завершается ошибкой, которую я не понимаю: if…

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

Я не могу, кажется, начать запись снова в моем приложении, как только я перестал запись. В основном кажется, что я…

Я использую фрагменты внутри действия. Я использую MediaRecorder для аудио записи. У меня есть две части деятельности. 1-й сам по…

Im пытается сделать что-то простое, записывать аудио и видео без предварительного просмотра. Вот мой код: MediaRecorder mediaRecorder = new MediaRecorder();…

Я использую следующее намерение для записи звука Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent, REQUEST_RECORD_SOUND); Когда код возвращается в мою программу…

Я знаю, что есть способ записи видео и сохранения его в определенный файл. Вот пример кода: MediaRecorder recorder = new…

Кто-нибудь имел успех с записью 480×360 H264 видео с Samsung Galaxy Nexus (работает 4.3-первоначально пробовал с 4.2) через MEDIARECORDER API?…

Я пытаюсь использовать объект MediaRecorder для записи видео в самом высоком качестве, доступном на моем устройстве, Samsung S2. Однако с…

Я начинаю разработку для android, и я немного смущен. Я запрограммировал простой видеорегистратор, используяMediaRecorder, теперь я беру другие дополнительные данные,…

У меня есть» щелчок», это высокая частота, но после 20-25 щелчков звук исчезает.. MediaPlayer mp; mp = MediaPlayer.create(mService.getApplicationContext(),R.raw.click2); mp.start(); >…

Я пытаюсь использовать javax.sound package в android. Но android остановил эту поддержку javax. Я пытался портировать мой javax.звук зависит код…

Этот код отлично работает в живом приложении, но я только что получил отчет об ошибке от пользователя Sprint Galaxy S3….

Я пытаюсь заставить диктофон работать. Проблема заключается в том, что мой код аварийно завершает работу при подготовке диктофона. Вот так:mMediaRecorder.prepare()…

В этом проекте Сначала мы должны сохранить номер телефона и почтовый идентификатор конкретного человека.И кнопка изображения помещена.когда кнопка изображения нажата…

У меня есть RuntimeException, когда я вызываю метод «start()» на моем объекте MediaRecorder. Я не могу вставить трассировку стека, потому…

Я сделал простой видеомагнитофон приложение, в котором видео начинает запись на кнопку нажмите. Это мой код: package com.example.videocapture2; import java.io.IOException;…

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

Я создаю MediaRecorder и использую его для создания видеоклипа. Он отлично работает в первый раз. Я завершаю процесс видеосъемки, устанавливая…

Я хочу извлечь медиа muxer часть из MediaRecorder.java. Я читал исходный код android, версия Jellybean (4.2.2). Соответствующее является android_media_MediaRecorder.cppиMediaRecoder.cpp, однако,…

Я не могу записать свой звонок в Android 4.4 . Я проверил несколько приложений от GooglePlay, но они также не…

У меня есть приложение для записи звука на android market, которое записывает с помощью формата PCM-WAV. Мое приложение также предлагаетcustom…

Мое приложение для Android записывает аудио и сохраняет его на SD-карте и показывает его в формате списка. Мне нужно отредактировать…

Я создал проект, в котором реплицируется голос пользователей http://androidsourcecode.blogspot.in/2013/07/android-audio-demo-audiotrack.html и я хочу выполнить анимацию в соответствии с уровнем голоса, я…

Запись создает допустимый файл mp4 на некоторых устройствах, но создает поврежденный файл mp4 на устройстве, над которым я в настоящее…

My soundpool неправильно загружает файл с sdcard. Я узнал об этом от logcat. Здесь я пишу свой logcat тоже. Он…


Я пытаюсь создать Call recorder для запуска в службе в фоновом режиме, но я получаю MediaRecorder Start failed error, когда…

Я работаю над приложением, в котором MediaRecorder записывает видеофайл в течение 5 секунд, а затем снова начинает запись и продолжает….

Я новичок в Android dev, и я изо всех сил в течение нескольких дней, чтобы выяснить, почему я получаю NPE…

Моя программа Python с именем addName предназначена для принятия 3 переменных (имя, фамилия и пол). Как я могу вызвать его…

У меня есть это приложение камеры, что превью хорошо, но всякий раз, когда я пытаюсь записать это дает мне illegalstatexception…

Я хочу иметь возможность записать видео, остановить, а затем начать снова немедленно (т. е. без задержки). Проблема в том, что…

Теперь, я должен создать android приложение, которое может записывать фильм и предварительный просмотр. Я хочу использовать один вид поверхности для…

Я пытаюсь снять фильм, используя MediaRecorder и переключение с передней камеры на заднюю камеру и наоборот во время записи. Проблема…

Я уже несколько дней пытаюсь воспроизвести файл mp4, который я записал с помощью образца Android MediaRecorder. http://developer.android.com/samples/MediaRecorder/index.html Я использую этот…

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

Я пытаюсь записать голос с помощью Media recorder. теперь я создаю новый Media recorder, а затем я пытаюсь использовать prepare…

Я написал чистый патч данных, который работает на ПК (Windows); когда я интегрирую его с Android, аудио файл сохраняется, но…

Я пытаюсь записать видео, но он получает аварии на стартах Media Record и Media Record подготовить .пожалуйста, помогите мне… Вот…

I want to save my recorded audio at / storage / emulated/0 / AudioRecorder, This is my code : private…

Я пробовал Media recorder, но в этом конкретном источнике звука разрешено только. i was not able to add a normal…

Я использовал класс media recorder для записи голоса и загрузки его на веб-сервер, но я не знаю, когда файл записи…

Я получаю эту ошибку при запуске start() для mediarecorder. Ниже приведен мой код. Что не так с моей козы? Код:…

Я записываю видео с MediaRecorder. Мой код работает нормально на 2.3.3, но не на 4.0.3. Проблема заключается в следующем: код…

У меня есть простой код, который записывает видео при нажатии на кнопку. Ручной щелчок работает хорошо, но myButton.performClick()не работает (приложение…

Я создал аудио рекордер. При вращении устройства звук будет автоматически сохранен. Как этого избежать ? Я использую Android 4.1.1 на…

Я работаю над проектом, который должен создать GIF-изображение путем записи видео и конвертировать это видео в GIF. Чтобы сделать это,…

Я пытаюсь сделать простое приложение, которое записывает звук, пока кнопка нажата, а затем сохраняет записанный файл в определенном месте. Это…

Я делаю простое приложение, которое записывает звук до тех пор, пока imagebutton трогают и держат, но после того, как я…

Я делаю приложение, которое записывает звук до тех пор, пока imagebutton трогается и удерживается, но у меня есть проблема с…

Я делаю приложение, которое записывает аудио до тех пор, пока imagebutton трогают и держат. Я достиг этого с помощью следующего…

я искал, чтобы проверить , если этот вопрос не dup, я вижу, что некоторые не имеют ответа, а другие не…

Я создал приложение для Android и подключил к нему различные сервисы watson, доступные на Bluemix: классификатор естественного языка, визуальное распознавание…

В настоящее время у меня есть приложение, которое я пытаюсь записать видео, со следующим способом инициализации камеры: private void initRecorder(Surface…

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

Запись .Wav с Android AudioRecorder

Я прочитал много страниц о AudioRecorder Android. Вы можете увидеть их список под вопросом.

Я пытаюсь записать звук с AudioRecorder, но он не работает хорошо.

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

NOTE: Я должен использовать AudioRecorder вместо MediaRecorder, потому что мое приложение будет выполнять другой процесс во время записи (с отображением эквалайзера).

Вот список страниц, которые я прочитал об этом предмете:

Есть много разных способов сделать это. Я пробовал много из них, но у меня ничего не работает. Я работаю над этой проблемой около 6 часов, поэтому я был бы признателен за точный ответ, в идеале за образец кода.

studio Пример Android AudioRecord

record audio in andro > (2)

Вот комплексное решение, которое я реализовал для потоковой передачи звука на микрофоне Android на сервер для воспроизведения: Android AudioRecord для сервера по протоколам UDP

Я разрабатываю приложение для Android, и мне нужно реализовать класс AudioRecord для записи звука пользователя. После некоторых исследований (которые не предоставили достаточной информации) и нескольких неудачных попыток мне было интересно, сможет ли кто-нибудь помочь мне, разместив пример (код) о том, как захватить высококачественный звук с помощью AudioRecord. Я был бы очень признателен. спасибо

Здесь я размещаю вам пример кода, который записывает хорошее качество звука с использованием AudioRecord API .

Примечание. Если вы используете эмулятор, качество звука будет не очень хорошим, потому что мы используем частоту дискретизации 8k, которая поддерживается только в эмуляторе. В устройстве используется частота дискретизации до 44,1 тыс. Для лучшего качества.

Для более подробной информации попробуйте этот AUDIORECORD BLOG .

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих