패스트캠퍼스 챌린지

[패스트캠퍼스 챌린지 9일차] Android recorder

오늘 모든 기능들을 다 구성하였다.

녹음을 하고 재생을 했을 때 소리의 크기에 따라 진폭을 나타나게 해주는 class와 녹음, 재생 시간에 따라 textview 가 변하는 class 를 만들어주었다.

private val visualizeRepeatAction: Runnable =
        object :Runnable{
            override fun run() {
                if(!isReplaying) {
                    val currentAmplitude = onRequestCurrentAmplitude?.invoke() ?: 0
                    drawingAmplitude = listOf(currentAmplitude) + drawingAmplitude
                }else{
                    replayingPosition++
                }
                invalidate()
                handler?.postDelayed(this, ACTION_INTERVAL)
            }

        }

Runnable을 이용하여서 앱이 실행되는 동안 계속 작성된 코드가 동작하도록 해주었다.

현재 재생중이 아니라면 onRequestCurrentAmplitude함수를 통하여서 currentAmplitude의 값을 정해주었다.

음성 녹음 재생시 진폭을 오른쪽에서 왼쪽으로 이동하면서 보여주므로 drawingAmplitude에 현재 값을 앞에 넣고

뒤에 기존의 값들을 더해주는 형식으로 완성하였다.

override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?: return

        val centerY = drawHeight / 2F
        var offsetX = drawWidth.toFloat()

        drawingAmplitude
            .let { amplitudes ->
                if(isReplaying){
                    amplitudes.takeLast(replayingPosition)
                }else{
                    amplitudes
                }
            }
            .forEach { amplitude->
            val lineLength = amplitude / MAX_AMPLITUDE * drawHeight * 0.8F

            offsetX -= LINE_SPACE

            if(offsetX < 0) return@forEach

            canvas.drawLine(
                offsetX,
                centerY - lineLength / 2F,
                offsetX,
                centerY + lineLength / 2F,
                amplitudePaint
            )
        }

    }

진폭을 그려주는 코드이다.

패스트캠퍼스 바로가기 -> https://bit.ly/3FVdhDa

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.