Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Диктофон - делаем запись с микрофона

2-й курс/Закрытая зона

android.media.MediaRecorder
Запускаем встроенный диктофон
Создаём свой диктофон
android.media.AudioRecord

android.media.MediaRecorder

Класс android.media.MediaRecorder позволяет делать записи записи медиафрагментов, включая аудио и видео. MediaRecorder действует как конечный автомат. Вы задаете различные параметры, такие как устройство-источник и формат. После установки запись может выполняться как угодно долго, пока не будет остановлена.

Алгоритм записи

Сначала определимся с источником (свойство MediaRecorder.AudioSource):

  • MIC - встроенный микрофон
  • VOICE_UPLINK - исходящий голосовой поток при телефонном звонке (вы говорите)
  • VOICE_DOWNLINK - входящий голосовой поток при телефонном звонке (вам говорят)
  • VOICE_CALL - запись телефонного звонка
  • CAMCORDER - микрофон, связанный с камерой (если доступен)
  • VOICE_RECOGNITION - микрофон, используемый для распознавания голоса (если доступен)
  • VOICE_COMMUNICATION – аудио поток с микрофона будет "заточен" под VoIP (если доступен)

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

Далее определимся с форматом записываемого звука (свойство MediaRecorder.OutputFormat):

  • THREE_GPP - формат 3GPP
  • MPEG_4 - формат MPEG4
  • AMR_NB - формат AMR_NB (подходит для записи речи)
  • AMR_WB
  • RAW_AMR

Определимся с сжатием звука (свойство MediaRecorder.AudioEncoder).

  • AAC
  • AMR_NB
  • AMR_WB

Указываем путь к файлу, в котором будут сохранены аудиоданные (метод setOutputFile())

Подготавливаем и запускаем запись (методы prepare() и start()). Остановить запись можно при помощи метода stop().

Запускаем встроенный диктофон

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


final static int RQS_RECORDING = 1;
Uri savedUri;

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	setContentView(R.layout.activity_main);

	Button recordButton = (Button) findViewById(R.id.buttonRecord);
	recordButton.setOnClickListener(new Button.OnClickListener() {

		@Override
		public void onClick(View view) {
			Intent intent = new Intent(
					MediaStore.Audio.Media.RECORD_SOUND_ACTION);
			startActivityForResult(intent, RQS_RECORDING);
		}
	});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if (requestCode == RQS_RECORDING) {
		savedUri = data.getData();
		Toast.makeText(MainActivity.this,
				"Saved: " + savedUri.getPath(), Toast.LENGTH_LONG).show();
	}
}

AudioRecorder

Запустив приложение Диктофон, вы можете записать сообщение и закрыть программу. Путь к файлу с аудиоданными вернётся в вашу программу через метод onActivityResult() и будет представлять строку типа external/audio/media/382. Вы можете поискать созданный файл в папке SD-карты. Но в любом случае у вас возникнут трудности с доступом к созданным файлам, так как вы не принимаете участия в процессе создания файла. Вам надо потрудиться, чтобы разобраться, как хранятся файлы, записанные в системном приложении. Я не стал показывать здесь, как вообще нужно узнать, где находится нужный файл. Кроме того, я видел сообщения на форумах, что данный метод вызывает ошибки на некоторых устройствах.

Создаём свой диктофон

Напишем простейший диктофон для записи мяуканья кота на микрофон.

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

Реклама