[media]
[收束tts]
This commit is contained in:
yangyakun
2025-07-22 10:52:09 +08:00
parent b6b4c21327
commit 0741ba8e99
37 changed files with 206 additions and 131 deletions

View File

@@ -3,7 +3,8 @@ package com.mogo.och.common.module.biz.media
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.wigets.media.MediaItem
interface IMediaListener {
interface IVideoListener {
fun diapatchMedia(list :MutableList<MediaItem>)
fun setMediaPause(){}
@@ -13,6 +14,7 @@ interface IMediaListener {
}
interface MusicDataChangeListener{
fun addOneData(it: MusicData){}
/**

View File

@@ -4,18 +4,20 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.wigets.media.MediaItem
import com.mogo.tts.base.IMogoTTSCallback
import com.mogo.tts.base.LangTtsEntity
object MediaManager {
private var mediaService: MediaService? =
ARouter.getInstance().build(OchCommonConst.BIZ_Media).navigation() as MediaService
fun addListener(tag:String, listener: IMediaListener){
mediaService?.addMediaListener(tag,listener)
fun addListener(tag:String, listener: IVideoListener){
mediaService?.addVideoListener(tag,listener)
}
fun removeListener(tag: String){
mediaService?.removeBridgeListener(tag)
mediaService?.removeVideoListener(tag)
}
fun postSiteIntroduceInfo(list: MutableList<MediaItem>){
@@ -89,4 +91,31 @@ object MediaManager {
}
object Tts{
fun loadOuttts(){
mediaService?.loadOuttts()
}
fun releaesOuttts(){
mediaService?.releaseOuttts()
}
fun showNotice(notice: String?, level: Int, delayed: Long = 0,callBack: IMogoTTSCallback?=null){
mediaService?.showNotice(notice,level,delayed,callBack)
}
fun showNotice(listTTS: MutableList<LangTtsEntity>, level: Int, callBack: IMogoTTSCallback?=null){
mediaService?.showNotice(listTTS,level,callBack)
}
fun stopTts(){
mediaService?.stopTTs()
}
fun showNoticeOut(notice: String?) {
mediaService?.showNoticeOut(notice)
}
}
}

View File

@@ -3,12 +3,14 @@ package com.mogo.och.common.module.biz.media
import com.alibaba.android.arouter.facade.template.IProvider
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.wigets.media.MediaItem
import com.mogo.tts.base.IMogoTTSCallback
import com.mogo.tts.base.LangTtsEntity
interface MediaService : IProvider {
fun addMediaListener(tag: String, listener: IMediaListener)
fun addVideoListener(tag: String, listener: IVideoListener)
fun removeBridgeListener(tag: String)
fun removeVideoListener(tag: String)
fun postSiteIntroduceInfo(list: MutableList<MediaItem>)
@@ -44,4 +46,16 @@ interface MediaService : IProvider {
fun getAuditionDataList(): MutableList<MusicData>
fun showNotice(notice: String?, level: Int, delayed: Long, callBack: IMogoTTSCallback?)
fun showNotice(listTTS: MutableList<LangTtsEntity>, level: Int, callBack: IMogoTTSCallback?=null)
fun stopTTs()
fun loadOuttts()
fun releaseOuttts()
fun showNoticeOut(notice: String?)
}

View File

@@ -0,0 +1,47 @@
package com.mogo.och.common.module.biz.media
import com.mogo.commons.voice.AIAssist
import com.mogo.tts.base.IMogoTTSCallback
import com.mogo.tts.base.LangTtsEntity
object VoiceNotice {
@JvmStatic
fun showNoticeOut(notice: String?) {
MediaManager.Tts.showNoticeOut(notice)
}
@JvmStatic
fun showNotice(notice: String?) {
showNotice(notice, AIAssist.LEVEL0)
}
@JvmStatic
fun showNotice(notice: String?, level: Int) {
showNotice(notice,level,0)
}
@JvmStatic
fun showNotice(notice: String?, level: Int, delayed: Long) {
showNotice(notice, level, delayed,null)
}
@JvmStatic
fun showNotice(notice: String?, level: Int, delayed: Long = 0,callBack:IMogoTTSCallback?=null) {
MediaManager.Tts.showNotice(notice,level,delayed,callBack)
}
@JvmStatic
fun showNotice(listTTS: MutableList<LangTtsEntity>, level: Int,callBack: IMogoTTSCallback?=null) {
MediaManager.Tts.showNotice(listTTS,level,callBack)
}
/**
* 中断当前在播语音
*/
@JvmStatic
fun stopCurrentTts(){
MediaManager.Tts.stopTts()
}
}

View File

@@ -8,7 +8,6 @@ import android.os.Build
import androidx.annotation.RequiresApi
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.voice.AIAssist
import com.mogo.commons.voice.IMogoVoiceCmdCallBack
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.GsonUtils
@@ -18,7 +17,8 @@ import com.mogo.och.common.module.manager.socket.cloud.OCHSocketMessageManager
import com.mogo.och.common.module.manager.socket.lan.bean.AppConnectMsg
import com.mogo.och.common.module.manager.socket.lan.bean.BaseDPMsg
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.common.module.biz.media.VoiceNotice
import com.mogo.tts.base.IMogoTTSCallback
object LanSocketManager : LanSocketManagerJava() {
@@ -90,19 +90,18 @@ object LanSocketManager : LanSocketManagerJava() {
.build()
mAudioManager.requestAudioFocus(mAudioFocusRequest) //抢占焦点
VoiceNotice
.speakTTSVoiceWithLevel(msg, AIAssist.LEVEL0, object : IMogoVoiceCmdCallBack {
override fun onSpeakEnd(speakText: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
VoiceNotice.showNotice(msg,AIAssist.LEVEL0,0,object :IMogoTTSCallback{
override fun onSpeakEnd(speakText: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
override fun onSpeakError(speakText: String?, errorMsg: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
override fun onSpeakError(speakText: String?, errorMsg: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
override fun onSpeakSelectTimeOut(speakText: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
})
override fun onSpeakSelectTimeOut(speakText: String?) {
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest)
}
})
}
}

View File

@@ -1,35 +0,0 @@
package com.mogo.och.common.module.voice
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.voice.AIAssist
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType
import com.mogo.och.common.module.manager.socket.lan.bean.OutofVoice
object OutOffVoice {
val outffListener = object : ILanMessageListener<OutofVoice> {
override fun targetLan(): Class<OutofVoice> {
return OutofVoice::class.java
}
override fun onLanMsgReceived(first: OutofVoice?) {
first?.let {
try{
AIAssist.getInstance(AbsMogoApplication.getApp()).playVoiceOutside(first.notice)
}catch (e:Exception){
OchChainLogManager.writeChainLog("Voice","车外音频报错${e}")
}
}
}
}
fun load(){
LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_OUTOF_VOICE.type, outffListener)
}
fun release(){
LanSocketManager.unRegisterSocketMessageListener(DPMsgType.TYPE_OUTOF_VOICE.type, outffListener)
}
}

View File

@@ -1,138 +0,0 @@
package com.mogo.och.common.module.voice
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
import com.mogo.och.common.module.manager.socket.lan.bean.OutofVoice
import com.mogo.tts.base.IMogoTTSCallback
import com.mogo.tts.base.LangTtsEntity
import com.mogo.tts.base.LanguageType
import com.mogo.tts.base.MultiLangTtsEntity
object VoiceNotice {
const val onlyChinese = 1 //中文
const val chineseEnglishKorean = 1 shl 1 // 左移一位 中英韩
@JvmStatic
fun showNotice(notice: String?) {
showNotice(notice, AIAssist.LEVEL0)
}
@JvmStatic
fun showNoticeOut(notice: String?) {
save2Log("车外准备播放 内容${notice}")
notice?.let {
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
val outofVoice = OutofVoice(notice)
LanSocketManager.sendMsgToClient(outofVoice)
}else{
AIAssist.getInstance(AbsMogoApplication.getApp()).playVoiceOutside(notice)
}
}
}
@JvmStatic
fun showNotice(notice: String?, level: Int) {
showNotice(notice,level,0)
}
@JvmStatic
fun showNotice(notice: String?, delayed: Long) {
showNotice(notice, AIAssist.LEVEL0, delayed)
}
@JvmStatic
fun showNotice(notice: String?, delayed: Long,callback:IMogoTTSCallback ) {
showNotice(notice, AIAssist.LEVEL0, delayed,callback)
}
@JvmStatic
fun showNotice(notice: String?, level: Int, delayed: Long = 0,callBack:IMogoTTSCallback?=null) {
save2Log("准备播放 内容${notice}__level:${level}__delayed:${delayed}")
notice?.let {
if (delayed == 0L) {
UiThreadHandler.post {
AIAssist.getInstance(AbsMogoApplication.getApp())
.speakTTSVoiceWithLevel(it, level,callCallBack(callBack))
}
} else {
UiThreadHandler.postDelayed({
AIAssist.getInstance(AbsMogoApplication.getApp())
.speakTTSVoiceWithLevel(it, level, callCallBack(callBack))
}, delayed)
}
}
}
/**
* 中断当前在播语音
*/
@JvmStatic
fun stopCurrentTts(){
save2Log("停止播放")
UiThreadHandler.post {
AIAssist.getInstance(AbsMogoApplication.getApp()).stopTts()
}
}
@JvmStatic
fun showNotice(listTTS: MutableList<LangTtsEntity>, level: Int,callBack: IMogoTTSCallback?=null) {
if(FunctionBuildConfig.ttsLanguage and onlyChinese>0){
val tempList = mutableListOf<LangTtsEntity>()
listTTS.forEach {
if(it.language != LanguageType.CHINESE){
tempList.add(it)
}
}
listTTS.removeAll(tempList)
}
save2Log("准备播放${listTTS}")
AIAssist.getInstance(AbsMogoApplication.getApp())
.speakMultiLangTTSWithLevel(MultiLangTtsEntity(listTTS), level,callCallBack(callBack))
}
fun speakTTSVoiceWithLevel(text:String, level:Int, callBack:IMogoTTSCallback){
save2Log("准备播放${text}")
AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSVoiceWithLevel(text,level,callCallBack(callBack))
}
private fun callCallBack(callBack: IMogoTTSCallback?):IMogoTTSCallback{
return object :IMogoTTSCallback{
override fun onSpeakStart(speakText: String?) {
super.onSpeakStart(speakText)
callBack?.onSpeakStart(speakText)
MediaManager.setTTSFocusChange(true)
save2Log("开始播放${speakText}")
}
override fun onSpeakEnd(speakText: String?) {
super.onSpeakEnd(speakText)
callBack?.onSpeakEnd(speakText)
MediaManager.setTTSFocusChange(false)
save2Log("结束播放${speakText}")
}
override fun onSpeakError(speakText: String?, errorMsg: String?) {
super.onSpeakError(speakText, errorMsg)
callBack?.onSpeakError(speakText,errorMsg)
MediaManager.setTTSFocusChange(false)
save2Log("播放错误,内容:${speakText}、errorMsg:${errorMsg}")
}
}
}
fun save2Log(info: String){
OchChainLogManager.writeChainLog("tts",info,true, eventID = OchChainLogManager.EVENT_KEY_INFO_VOICE_TTS)
}
}

View File

@@ -1,21 +1,11 @@
package com.mogo.och.common.module.wigets.media
import android.Manifest
import android.app.ActivityOptions
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.provider.Settings
import android.view.Display
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.mogo.eagle.core.function.main.MainLauncherActivity
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.och.common.module.R
import com.mogo.och.common.module.utils.RxUtils
class MediaPlayerActivity : AppCompatActivity() {
@@ -24,7 +14,7 @@ class MediaPlayerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_video_player)
val fragment = MediaPlayerFragment()
val fragment = VideoPlayerFragment()
supportFragmentManager.beginTransaction().add(R.id.videoPlayerContainer, fragment)
.commitAllowingStateLoss()
BarUtils.hideStatusBarAndSticky(this.window)

View File

@@ -9,7 +9,7 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.R
import com.mogo.och.common.module.biz.media.IMediaListener
import com.mogo.och.common.module.biz.media.IVideoListener
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.manager.download.DownloadManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
@@ -23,11 +23,11 @@ import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationVi
* @author: wangmingjun
* @date: 2022/4/12
*/
class MediaPlayerFragment :
MvpFragment<MediaPlayerFragment?, MediaPlayerPresenter?>(), IMediaListener {
class VideoPlayerFragment :
MvpFragment<VideoPlayerFragment?, MediaPlayerPresenter?>(), IVideoListener {
companion object {
private val TAG = MediaPlayerFragment::class.java.simpleName
private val TAG = VideoPlayerFragment::class.java.simpleName
}
private var arrayListOf = mutableListOf<MediaItem>()
@@ -130,5 +130,5 @@ class MediaPlayerFragment :
}
}
class MediaPlayerPresenter(view: MediaPlayerFragment?) :
Presenter<MediaPlayerFragment?>(view)
class MediaPlayerPresenter(view: VideoPlayerFragment?) :
Presenter<VideoPlayerFragment?>(view)