[8.1.2+]
[media] [收束tts]
This commit is contained in:
@@ -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){}
|
||||
|
||||
/**
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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?)
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user