From 66fecf150938723163f672a44c5e652f92da37f9 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 5 Aug 2024 17:53:50 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EA=B8=80=20=EB=93=B1=EB=A1=9D-=20=EC=98=A4=EB=94=94=EC=98=A4?= =?UTF-8?q?=20=EB=85=B9=EC=9D=8C=20-=20=EB=85=B9=EC=9D=8C=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20:=20centiseconds=20=EA=B9=8C=EC=A7=80=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20-=20=EC=9D=8C=EC=A7=88=20=EC=A1=B0=EC=A0=95=20-=20s?= =?UTF-8?q?ampleRate:=2048k,=20bitrate:=20256k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../write/RecordingVoiceFragment.kt | 82 +++++++++---------- .../res/layout/fragment_recording_voice.xml | 4 +- 2 files changed, 41 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/write/RecordingVoiceFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/write/RecordingVoiceFragment.kt index 8c86695..0f7be44 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/write/RecordingVoiceFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/write/RecordingVoiceFragment.kt @@ -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" } } diff --git a/app/src/main/res/layout/fragment_recording_voice.xml b/app/src/main/res/layout/fragment_recording_voice.xml index 7256a8c..63470ed 100644 --- a/app/src/main/res/layout/fragment_recording_voice.xml +++ b/app/src/main/res/layout/fragment_recording_voice.xml @@ -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" />