안드로이드에서 음성 녹음 기능을 사용해보자.
먼저 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 |