From 2606d0144ff21c0f34f74017c467fd88dacd41a5 Mon Sep 17 00:00:00 2001 From: ross <3024454314@qq.com> Date: Wed, 14 Jan 2026 09:20:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zs/smarthuman/sherpa/VoiceController.kt | 2 +- .../java/com/zs/smarthuman/ui/MainActivity.kt | 55 +++++++++---------- .../zs/smarthuman/utils/UnityPlayerHolder.kt | 10 ++-- app/src/main/res/layout/activity_main.xml | 7 --- 4 files changed, 33 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt b/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt index 56e630c..81cdab2 100644 --- a/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt +++ b/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt @@ -108,7 +108,7 @@ class VoiceController( currentEnvBaseline = stateManager.currentEnvBaseline ) stateManager.isNoisyEnvironment = stateManager.currentEnvBaseline >= VoiceConfig.NOISE_BASELINE_THRESHOLD - LogUtils.d(VoiceConfig.TAG, "📊 环境状态 | 基线: ${stateManager.currentEnvBaseline} | 嘈杂环境: ${stateManager.isNoisyEnvironment}") +// LogUtils.d(VoiceConfig.TAG, "📊 环境状态 | 基线: ${stateManager.currentEnvBaseline} | 嘈杂环境: ${stateManager.isNoisyEnvironment}") } // 状态分发 diff --git a/app/src/main/java/com/zs/smarthuman/ui/MainActivity.kt b/app/src/main/java/com/zs/smarthuman/ui/MainActivity.kt index 6a3b05b..34af388 100644 --- a/app/src/main/java/com/zs/smarthuman/ui/MainActivity.kt +++ b/app/src/main/java/com/zs/smarthuman/ui/MainActivity.kt @@ -15,6 +15,7 @@ import android.os.Bundle import android.os.Environment import android.os.IBinder import android.text.TextUtils +import android.util.Base64 import android.util.Log import android.view.View import android.widget.Toast @@ -36,6 +37,7 @@ import com.zs.smarthuman.BuildConfig import com.zs.smarthuman.R import com.zs.smarthuman.base.BaseActivity import com.zs.smarthuman.base.BaseViewModelActivity +import com.zs.smarthuman.bean.AudioDTO import com.zs.smarthuman.bean.NetworkStatusEventMsg import com.zs.smarthuman.bean.UserInfoResp import com.zs.smarthuman.bean.VersionUpdateResp @@ -54,6 +56,7 @@ import com.zs.smarthuman.utils.AudioPcmUtil import com.zs.smarthuman.utils.DangerousUtils import com.zs.smarthuman.utils.LogFileUtils + import com.zs.smarthuman.utils.UnityPlayerHolder import com.zs.smarthuman.utils.ViewSlideAnimator import com.zs.smarthuman.viewmodel.MainViewModel @@ -151,7 +154,7 @@ class MainActivity : BaseViewModelActivity() } is ApiResult.Success -> { - if (!TextUtils.isEmpty(it.data)){ + if (!TextUtils.isEmpty(it.data)) { Toaster.showShort(it.data) } Toaster.showShort(it) @@ -189,16 +192,13 @@ class MainActivity : BaseViewModelActivity() assetManager = assets, onWakeup = { //每次唤醒前都要把前面的音频停掉 + if (backPlaying){ + mViewModel?.pauseVoice() + } UnityPlayerHolder.getInstance().cancelPCM() UnityPlayerHolder.getInstance() .sendVoiceToUnity( - voiceInfo = mutableListOf().apply { - add( - VoiceBeanResp( - audioUrl = "https://static.seerteach.net/aidialogue/userWakeUpAudio/344.mp3" - ) - ) - } + "https://static.seerteach.net/aidialogue/userWakeUpAudio/344.mp3" ) startPlayTimeoutJob?.cancel() @@ -208,18 +208,17 @@ class MainActivity : BaseViewModelActivity() } }, onFinalAudio = { audio -> - Log.d("lrsxx", "检测到语音,长度=${audio.size}") mViewModel?.uploadVoice( AudioPcmUtil.pcm16ToBase64(AudioPcmUtil.floatToPcm16(audio)), 1 ) // loadLocalJsonAndPlay() - val file = File( - getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)!!.getAbsolutePath(), - "xxx.wav" - ) - AudioDebugUtil.saveFloatPcmAsWav(audio, file) - LogUtils.dTag("audioxx", "WAV saved: ${file.path}, samples=${audio.size}") +// val file = File( +// getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)!!.getAbsolutePath(), +// "xxx.wav" +// ) +// AudioDebugUtil.saveFloatPcmAsWav(audio, file) +// LogUtils.dTag("audioxx", "WAV saved: ${file.path}, samples=${audio.size}") lifecycleScope.launch(Dispatchers.Main) { mVerticalAnimator?.show() @@ -228,11 +227,12 @@ class MainActivity : BaseViewModelActivity() onStateChanged = { state -> }, - onTimeoutTip = {timeoutType-> - when(timeoutType){ + onTimeoutTip = { timeoutType -> + when (timeoutType) { TimeoutType.IDLE_TIMEOUT -> {//闲时超时 } + TimeoutType.INVALID_SPEECH_TIMEOUT -> {//无效语音后超时 } @@ -241,28 +241,26 @@ class MainActivity : BaseViewModelActivity() mVerticalAnimator?.hide() UnityPlayerHolder.getInstance() .sendVoiceToUnity( - voiceInfo = mutableListOf().apply { - add( - VoiceBeanResp( - audioUrl = UserInfoManager.userInfo?.endAudioUrl?:"" - ) - ) - } + UserInfoManager.userInfo?.endAudioUrl ?: "" ) } } ) } - override fun receivedIMMsg(msg: SingleMessage) { when (msg.msgContentType) { MessageContentType.RECEIVE_VOICE_STREAM.msgContentType -> { + lifecycleScope.launch(Dispatchers.IO) { + + // LogFileUtils.logToFile2(this@MainActivity,msg.content) UnityPlayerHolder.getInstance() .startTalking(msg.content) // loadLocalJsonAndPlay() + + } } } @@ -434,6 +432,7 @@ class MainActivity : BaseViewModelActivity() word: String, audioUrl: String ) { + LogUtils.eTag("lrs","onAudioProgressUpdated:${state}") val wakeupUrl = UserInfoManager.userInfo?.wakeUpAudioUrl if (audioUrl != wakeupUrl) return @@ -444,7 +443,7 @@ class MainActivity : BaseViewModelActivity() promptPlaying = true voiceController?.onPlayStartPrompt() startPlayTimeoutJob?.cancel() - LogUtils.eTag("MainActivity","等待超时") + LogUtils.eTag("MainActivity", "等待超时") } } @@ -461,9 +460,9 @@ class MainActivity : BaseViewModelActivity() id: Int, sortId: Int, state: Int,//0stop 2pause 1play 3complete 4loading 5error - text: String, - isFinal: Boolean + text: String ) { + LogUtils.eTag("lrs","onStreamAudioProgressUpdated:${state}") when (state) { 1 -> { if (!backPlaying) { diff --git a/app/src/main/java/com/zs/smarthuman/utils/UnityPlayerHolder.kt b/app/src/main/java/com/zs/smarthuman/utils/UnityPlayerHolder.kt index b96d9cc..87f38a5 100644 --- a/app/src/main/java/com/zs/smarthuman/utils/UnityPlayerHolder.kt +++ b/app/src/main/java/com/zs/smarthuman/utils/UnityPlayerHolder.kt @@ -131,20 +131,20 @@ class UnityPlayerHolder private constructor() { } fun sendVoiceToUnity( - type: String = "0", - voiceInfo: MutableList = mutableListOf() + mp3Url: String ) { sendMessageToUnity( - "unitychan_dynamic", + "AudioPlayer", "StartCoroutineFromAndroid", - GsonUtils.toJson(UnitySendBean(type, voiceInfo)) + mp3Url + ) } fun startTalking(pcmStr: String) { sendMessageToUnity( - "unitychan_dynamic", + "AudioPlayer", "StartStreamFromAndroid", pcmStr ) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2d7b391..eed55e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -31,12 +31,5 @@ app:layout_constraintTop_toTopOf="parent"/> - - \ No newline at end of file