안드로이드에서 음성 녹음 기능을 사용해보자.

 

먼저 AndroidManifest.xml에 다음 권한을 추가한다.

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

그리고 res/layout/activity_main.xml에 다음과 같이 입력한다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textview_sound_recorder_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="음성 녹음"
        android:layout_centerHorizontal="true"
        android:textSize="32dp"
        android:textStyle="bold"
        android:textColor="#000"
        android:layout_marginTop="32dp"
        />

    <Button
        android:id="@+id/button_start_recording"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="시작"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="32dp"
        android:layout_marginBottom="32dp"
        android:layout_centerVertical="true"/>

    <Button
        android:id="@+id/button_pause_recording"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="정지"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="32dp"/>

    <Button
        android:id="@+id/button_stop_recording"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="중지"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="32dp"
        android:layout_marginRight="32dp"/>
    
</RelativeLayout>

 

그리고 MainActivity.kt 파일에 다음과 같이 입력한다.

package com.example.audio

import android.Manifest
import android.media.MediaRecorder
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.widget.Toast
import androidx.core.app.ActivityCompat
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    private var mediaRecorder: MediaRecorder? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var state = false
        var recordingStopped = false

        val output = "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)}" + "/test.mp3"

        val permissions = arrayOf(Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        ActivityCompat.requestPermissions(this, permissions,0)

        button_start_recording.setOnClickListener {
            mediaRecorder = MediaRecorder()

            mediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC)
            mediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            mediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
            mediaRecorder?.setOutputFile(output)

            mediaRecorder?.prepare()
            mediaRecorder?.start()

            state = true

            Toast.makeText(this, "녹음 시작", Toast.LENGTH_SHORT).show()
        }

        button_stop_recording.setOnClickListener{
            if(state){
                mediaRecorder?.stop()
                mediaRecorder?.release()

                state = false

                Toast.makeText(this, "녹음 중지", Toast.LENGTH_SHORT).show()
            }
        }

        button_pause_recording.setOnClickListener {
            if (state) {
                if (!recordingStopped) {
                    Toast.makeText(this, "녹음 정지", Toast.LENGTH_SHORT).show()
                    mediaRecorder?.pause()
                    recordingStopped = true
                    button_pause_recording.text = "다시 시작"
                } else {
                    Toast.makeText(this,"다시 시작", Toast.LENGTH_SHORT).show()
                    mediaRecorder?.resume()
                    recordingStopped = false
                    button_pause_recording.text = "정지"
                }
            }
        }
    }
}

 

※ 주의할 점으로 중지, 다시 시작 기능 즉, 위의 코드에서 mediaRecorder?.pause()와 mediaRecorder?.resume()

안드로이드 SDK 버전이 24 이상이어야 사용할 수 있다.

 

 

참고사이트

 

https://android.jlelse.eu/create-an-android-sound-recorder-using-kotlin-36902b3bf967

'Android' 카테고리의 다른 글

[Android] EditText에 이미지 추가  (0) 2019.10.27
[Android Kotlin] MobileFFmpeg 사용법  (0) 2019.09.25

+ Recent posts