크리에이터 커뮤니티 게시글 등록- 오디오 녹음

- 녹음 시간 : centiseconds 까지 표시
- 음질 조정 - sampleRate: 48k, bitrate: 256k
This commit is contained in:
klaus 2024-08-05 17:53:50 +09:00
parent e6e3df701d
commit 66fecf1509
2 changed files with 41 additions and 45 deletions

View File

@ -7,7 +7,8 @@ import android.media.MediaPlayer
import android.media.MediaRecorder
import android.os.Build
import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -21,21 +22,20 @@ import kr.co.vividnext.sodalive.databinding.FragmentRecordingVoiceBinding
import java.io.File
import java.io.IOException
import java.util.Locale
import kotlin.math.roundToInt
class RecordingVoiceFragment : BottomSheetDialogFragment() {
private var listener: OnAudioRecordedListener? = null
private var countDownTimer: CountDownTimer? = null
private var mediaRecorder: MediaRecorder? = null
private var mediaPlayer: MediaPlayer? = null
private var fileNameMedia = ""
private var second = -1
private var minute = 0
private var hour = 0
private lateinit var binding: FragmentRecordingVoiceBinding
private var startTime: Long = 0L
private val handler = Handler(Looper.getMainLooper())
interface OnAudioRecordedListener {
fun onAudioRecorded(file: File)
}
@ -154,12 +154,13 @@ class RecordingVoiceFragment : BottomSheetDialogFragment() {
} else {
MediaRecorder()
}.apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFile(fileNameMedia)
setAudioSource(MediaRecorder.AudioSource.CAMCORDER)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
setAudioEncodingBitRate(192000)
setAudioChannels(2)
setAudioSamplingRate(48000)
setAudioEncodingBitRate(256000)
setOutputFile(fileNameMedia)
}
try {
@ -254,47 +255,42 @@ class RecordingVoiceFragment : BottomSheetDialogFragment() {
}
private fun startCountDownTimer() {
countDownTimer = object : CountDownTimer(Long.MAX_VALUE, 1000) {
override fun onTick(p0: Long) {
second += 1
binding.tvTimer.text = recordingTime()
startTime = System.currentTimeMillis()
if (second >= 180) {
handler.post(object : Runnable {
override fun run() {
// 현재 시간에서 시작 시간을 빼서 경과 시간 계산
val elapsedMilliseconds = System.currentTimeMillis() - startTime
val centisecondsElapsed = (elapsedMilliseconds / 10.0).roundToInt()
// 경과한 시간에서 분, 초, 센티초 계산
val minutes = centisecondsElapsed / 6000
val seconds = (centisecondsElapsed % 6000) / 100
val centiseconds = centisecondsElapsed % 100
val time = String.format(
Locale.getDefault(),
"%02d:%02d.%02d",
minutes,
seconds,
centiseconds
)
binding.tvTimer.text = time
if (minutes >= 3) {
stopRecording()
}
// 10밀리초(1센티초)마다 실행
handler.postDelayed(this, 10)
}
override fun onFinish() {
}
}
countDownTimer!!.start()
}
private fun recordingTime(): String {
if (second == 60) {
minute += 1
second = 0
}
if (minute == 60) {
hour += 1
minute = 0
}
return String.format(Locale.getDefault(), "%02d:%02d:%02d", hour, minute, second)
})
}
@SuppressLint("SetTextI18n")
private fun stopCountDownTimer() {
if (countDownTimer != null) {
countDownTimer!!.cancel()
countDownTimer = null
}
binding.tvTimer.text = "00:00:00"
second = -1
minute = 0
hour = 0
handler.removeCallbacksAndMessages(null)
startTime = 0
binding.tvTimer.text = "00:00.00"
}
}

View File

@ -46,8 +46,8 @@
android:id="@+id/tv_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_light"
android:text="00:00:00"
android:fontFamily="@font/gmarket_sans_bold"
android:text="00:00.00"
android:textColor="@color/white"
android:textSize="33.3sp" />