크리에이터 커뮤니티 게시글 등록- 오디오 녹음
- 녹음 시간 : centiseconds 까지 표시 - 음질 조정 - sampleRate: 48k, bitrate: 256k
This commit is contained in:
parent
e6e3df701d
commit
66fecf1509
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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" />
|
||||
|
||||
|
|
Loading…
Reference in New Issue