Commit 2a27202f authored by 马乐's avatar 马乐

1.增加TTS

parent 448728d5
package com.intergration.test package com.intergration.test
import android.Manifest import android.Manifest
import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.media.AudioManager
import android.media.CamcorderProfile import android.media.CamcorderProfile
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.speech.tts.TextToSpeech
import android.util.Size import android.util.Size
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
...@@ -15,6 +18,7 @@ import com.arcsoft.visdrive.sdk.ArcErrorInfo ...@@ -15,6 +18,7 @@ import com.arcsoft.visdrive.sdk.ArcErrorInfo
import com.arcsoft.visdrive.sdk.ArcVisDriveEngine import com.arcsoft.visdrive.sdk.ArcVisDriveEngine
import com.arcsoft.visdrive.sdk.constant.common.ArcModType import com.arcsoft.visdrive.sdk.constant.common.ArcModType
import com.arcsoft.visdrive.sdk.model.common.ArcActiveEnvParam import com.arcsoft.visdrive.sdk.model.common.ArcActiveEnvParam
import com.blankj.utilcode.util.JsonUtils
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.TimeUtils import com.blankj.utilcode.util.TimeUtils
import com.intergration.test.databinding.ActivityMainBinding import com.intergration.test.databinding.ActivityMainBinding
...@@ -29,6 +33,7 @@ import com.intergration.test.dms.setDmsDistractScope ...@@ -29,6 +33,7 @@ import com.intergration.test.dms.setDmsDistractScope
import com.intergration.test.dms.setDmsDrivingStatus import com.intergration.test.dms.setDmsDrivingStatus
import com.intergration.test.dms.startDms import com.intergration.test.dms.startDms
import com.intergration.test.utils.DOT_PREFACE_DURATION import com.intergration.test.utils.DOT_PREFACE_DURATION
import com.intergration.test.utils.TTS_ENGINE
import com.intergration.test.utils.VIDEO_FOLDER import com.intergration.test.utils.VIDEO_FOLDER
import com.mediatek.smartplatform.PreviewSource import com.mediatek.smartplatform.PreviewSource
import com.mediatek.smartplatform.RecordConfiguration import com.mediatek.smartplatform.RecordConfiguration
...@@ -42,9 +47,10 @@ import kotlinx.coroutines.Job ...@@ -42,9 +47,10 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.Locale
import java.util.concurrent.CancellationException import java.util.concurrent.CancellationException
class MainActivity : AppCompatActivity(),VideoCallback{ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallback{
private var dmsCoroutineScope: DmsCoroutineScope? =null private var dmsCoroutineScope: DmsCoroutineScope? =null
...@@ -69,6 +75,15 @@ class MainActivity : AppCompatActivity(),VideoCallback{ ...@@ -69,6 +75,15 @@ class MainActivity : AppCompatActivity(),VideoCallback{
} }
} }
private val tts by lazy {
val am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val sb2value =am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
am.setStreamVolume(AudioManager.STREAM_MUSIC, sb2value, 0)
val bundle = Bundle()
bundle.putFloat(TextToSpeech.Engine.KEY_PARAM_VOLUME,1.0f)
TextToSpeech(this,this, TTS_ENGINE)
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
...@@ -117,6 +132,7 @@ class MainActivity : AppCompatActivity(),VideoCallback{ ...@@ -117,6 +132,7 @@ class MainActivity : AppCompatActivity(),VideoCallback{
coroutineContext[DmsCoroutineContext]?.engine?.let {engine-> coroutineContext[DmsCoroutineContext]?.engine?.let {engine->
coroutineContext[DmsCoroutineContext]?.spmCameraDevice?.startDms(engine)?.collect{result-> coroutineContext[DmsCoroutineContext]?.spmCameraDevice?.startDms(engine)?.collect{result->
binding.detectResult.text = result binding.detectResult.text = result
tts.speak(result, TextToSpeech.QUEUE_ADD, null,null)
launch(Dispatchers.IO){ launch(Dispatchers.IO){
coroutineContext[DmsCoroutineContext]?.spmCameraDevice?.lockRecordingVideo( coroutineContext[DmsCoroutineContext]?.spmCameraDevice?.lockRecordingVideo(
DOT_PREFACE_DURATION,"",RecordSource.GENERAL_CAMERA) DOT_PREFACE_DURATION,"",RecordSource.GENERAL_CAMERA)
...@@ -177,6 +193,31 @@ class MainActivity : AppCompatActivity(),VideoCallback{ ...@@ -177,6 +193,31 @@ class MainActivity : AppCompatActivity(),VideoCallback{
} }
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
when (tts.setLanguage(Locale.CHINA)) {
TextToSpeech.LANG_MISSING_DATA, TextToSpeech.LANG_NOT_SUPPORTED -> {
LogUtils.file("TTS暂时不支持这种语音朗读")
Toast.makeText(this, "TTS暂时不支持这种语音朗读", Toast.LENGTH_SHORT).show()
}
else -> {
LogUtils.d("tts初始化成功!")
tts.setPitch(1.0f)
tts.setSpeechRate(1.0f)
}
}
} else {
LogUtils.file("TTS初始化失败")
Toast.makeText(this, "TTS初始化失败", Toast.LENGTH_SHORT).show()
}
}
override fun onDestroy() {
tts.stop()
tts.shutdown()
super.onDestroy()
}
private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
ContextCompat.checkSelfPermission( ContextCompat.checkSelfPermission(
baseContext, it) == PackageManager.PERMISSION_GRANTED baseContext, it) == PackageManager.PERMISSION_GRANTED
......
...@@ -12,6 +12,8 @@ const val DMS_PIC_HEIGHT = 720 ...@@ -12,6 +12,8 @@ const val DMS_PIC_HEIGHT = 720
const val DOT_PREFACE_DURATION = 5 const val DOT_PREFACE_DURATION = 5
const val TTS_ENGINE = "com.iflytek.speechcloud"
const val VIDEO_FOLDER = "sdcard/waytous/alarm/" const val VIDEO_FOLDER = "sdcard/waytous/alarm/"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment