Освой Android играючи

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

Шкодим

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

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

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


Обновлено 8 сентября 2023

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

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

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


// Kotlin
class MainActivity : AppCompatActivity() {

    private val RQS_RECORDING = 1
    private var savedUri: Uri? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val button: Button = findViewById(R.id.button)
        button.setOnClickListener {
            val intent = Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION)
            startActivityForResult(intent, RQS_RECORDING)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == Activity.RESULT_OK && requestCode == RQS_RECORDING) {
            if(data?.data != null){
                savedUri = data.data
                println("Saved url: ${savedUri?.path}")
            }
        }
    }
}

// Java final static int RQS_RECORDING = 1; Uri savedUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button recordButton = 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-карты. Этот способ работает на эмуляторе, а на обычных устройствах диктофон может и не вернуть данные. А на некоторых устройствах может не оказаться диктофона.

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

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().

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

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

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

Дополнительные материалы

Реклама