在 Kotlin 上按下按钮时如何停止录制 AudioRecord
Posted
技术标签:
【中文标题】在 Kotlin 上按下按钮时如何停止录制 AudioRecord【英文标题】:How do I stop recording AudioRecord when button press out on Kotlin 【发布时间】:2021-08-13 14:01:52 【问题描述】:我有三个问题。 首先:我必须停止向服务器录制音频和流数据。 第二:我想保存文件并将整个文件发送到服务器。 第三:我必须在接收器中播放这些块。
向服务器发送音频:
btn_send.setOnTouchListener(object : View.OnTouchListener
override fun onTouch(v: View?, event: MotionEvent?): Boolean
when (event?.action)
MotionEvent.ACTION_DOWN ->
Log.i("tou7ch", "apertou")
val buffer = ByteArray(minBufSize)
val chunks = buffer.toByteString()
audiorecord!!.startRecording()
val number = audiorecord!!.read(buffer, 0, minBufSize)
for (i in 0 until number)
webSocket.send(chunks)
MotionEvent.ACTION_UP ->
Log.i("tou7ch", "soltou")
audiorecord?.stop();
return v?.onTouchEvent(event) ?: true
)
发送时效果很好,但我不知道如何停止发送。当从按钮上移开手指时,我有一个Log.i("tou7ch", "soltou")
,它被完美地调用了。
如果我这样放一段时间:
while (true)
val number = audiorecord!!.read(buffer, 0, minBufSize)
for (i in 0 until number)
webSocket.send(chunks)
或任何其他要验证的变量,应用程序会永久停止运行。如何停止将其发送到服务器?如何停止录制?如何在接收器中播放这些块?如何将整个文件保存在 .wav 中?
感谢开发者!
【问题讨论】:
你应该为此实现协程! 谢谢!我去看看!我真的很高兴你的生活。祝福! 【参考方案1】:如果您使用 kotlin,最佳方式是使用协程,但如果您不希望这是使用线程执行此操作的经典方式:
btn_send.setOnTouchListener(object : View.OnTouchListener
override fun onTouch(v: View?, event: MotionEvent?): Boolean
var thread?=null
when (event?.action)
MotionEvent.ACTION_DOWN ->
Log.i("tou7ch", "apertou")
thread = Thread()
override fun run()
val buffer = ByteArray(minBufSize)
val chunks = buffer.toByteString()
audiorecord!!.startRecording()
val number = audiorecord!!.read(buffer, 0, minBufSize)
for (i in 0 until number)
webSocket.send(chunks)
MotionEvent.ACTION_UP ->
Log.i("tou7ch", "soltou")
audiorecord?.stop();
thread.interrupt();
return v?.onTouchEvent(event) ?: true
)
【讨论】:
谢谢!我会尝试协程。 高级Patel,使用协程,应用程序停止中断,但我在 while(isActive) 时仍然遇到问题。这使应用程序崩溃。如何停止发送块? 请将您的日志发布在应用程序崩溃的地方,有时当您安装错误版本的协程时会导致应用程序崩溃 在你的情况下,因为你没有经验,你可以使用经典线程方法以上是关于在 Kotlin 上按下按钮时如何停止录制 AudioRecord的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在不同的视图控制器上按下按钮来更改 tableview 数据?
仅在 iOS 8+ 上按下 beginSeekingForward 时 MPMoviePlayerController 停止/冻结视频