3 Commit-ok 2b28e71f70 ... de95440085

Szerző SHA1 Üzenet Dátum
  wangshuangpan de95440085 增加语言 tts 1 napja
  wangshuangpan ac6313b806 修复时间长 播放没有声音问题 1 napja
  wangshuangpan 756a4316cf 增加tts 文件 1 napja

+ 16 - 2
manifest.json

@@ -2,8 +2,8 @@
     "name" : "留观系统",
     "appid" : "__UNI__E207749",
     "description" : "",
-    "versionName" : "1.1.0",
-    "versionCode" : 110,
+    "versionName" : "1.1.11",
+    "versionCode" : 1111,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -95,6 +95,20 @@
                     "pid" : "7437",
                     "parameters" : {}
                 }
+            },
+            "MT-TTS" : {
+                "__plugin_info__" : {
+                    "name" : "MT-TTS语音合成",
+                    "description" : "安卓tts语音合成",
+                    "platforms" : "Android",
+                    "url" : "",
+                    "android_package_name" : "",
+                    "ios_bundle_id" : "",
+                    "isCloud" : false,
+                    "bought" : -1,
+                    "pid" : "",
+                    "parameters" : {}
+                }
             }
         }
     },

BIN
nativeplugins/MT-TTS/.DS_Store


+ 12 - 0
nativeplugins/MT-TTS/CHANGLOG.md

@@ -0,0 +1,12 @@
+## 1.0.2
+
+2020/12/28
+------------------------
+
+* 百度TTS新增 `changeSpeeker` 方法,用于切换发音人,离线可选发音人[离线基础音库](https://ai.baidu.com/tech/speech/tts_offline)
+* 包名和文档更新
+
+## 1.0.3
+
+* 百度离线语音新增 `setVolumn` 方法用于设置音量
+* 修复 `destroy` 方法拼写错误

+ 96 - 0
nativeplugins/MT-TTS/README.md

@@ -0,0 +1,96 @@
+
+# MT-TTS
+
+安卓原生离线语音合成引擎工具插件
+包含两个工具:MT-TTS-Speech(调用系统已安装TTS)、MT-TTS-Baidu(调用百度离线SDK,需要自行购买授权)
+
+## MT-TTS-Speech
+
+调用安卓系统已安装的TTS进行语音合成播放
+
+[相关免费的安卓语音引擎TTS](https://blog.csdn.net/yingchengyou/article/details/79591954)
+
+### 使用方式
+
+```js
+const TTSSpeech = uni.requireNativePlugin("MT-TTS-Speech");
+```
+
+### API
+
+- 初始化 `init(callback, engineName?)`
+- 获取已系统安装的TTS `getInstallTTS(([{label, name}])=>{})`
+- 设置引擎 `setEngine(engineName)`
+- 设置语调 `setPitch(num)` 0-100, 默认 50
+- 设置语速 `setSpeed(num)` 0-100, 默认 50
+- 获取状态 `isSpeeking()`
+- 设置语言 `setLanguage(name)` 默认中文
+- 播放 `speek({text: 'test'})`
+- 停止 `stop()`
+- 销毁 `destroy()`
+- 打开语音设置 `openSetting()`
+- 开始播放回调注册 `onStart(callback)`
+- 完成播放回调注册 `onDone(callback)`
+- 播放出错回调注册 `onError(callback)`
+
+
+### 示例
+
+```js
+TTSSpeech.getInstallTTS(list => {
+  list.forEach(v => console.log(`引擎名 ${v.label} 包名:${v.name}`));
+})
+
+TTSSpeech.init((status) => {
+  if(status === 0){
+    console.log('引擎初始化成功')
+    TTSSpeech.speek({ text: '语音播放成功'})
+  }
+}, 'com.iflytek.speechcloud')
+```
+
+## MT-TTS-Baidu
+
+调用百度离线SDK,需要购买百度授权
+
+[百度语音离线合成SDK文档](https://ai.baidu.com/ai-doc/SPEECH/Qk4nwu25z)
+
+### 使用方式
+
+```js
+const TTSBaidu = uni.requireNativePlugin("MT-TTS-Baidu");
+```
+
+### API
+
+- 初始化 `init(options, callback)`
+- 设置语调 `setPitch(num)` 范围 0-9,默认5
+- 设置语速 `setSpeed(num)` 范围 0-9,默认5
+- 设置语速 `setVolumn(num)` 范围 0-9,默认15
+- 获取状态 `isSpeeking()`
+- 播放 `speek(text, utteranceId)`
+- 播放 `changeSpeeker(text)` text: F(度小美)、M(度小宇)、Y(度丫丫)、X(度逍遥), 成功返回0
+- 停止合成 `stop()`
+- 暂停播放 `paused()`
+- 恢复播放 `resume()`
+- 销毁 `destroy()`
+- 开始播放回调注册 `onStart(callback)`
+- 完成播放回调注册 `onDone(callback)`
+- 播放出错回调注册 `onError(callback)`
+
+
+### 示例
+
+```js
+TTSBaidu.init({
+  appId: '',
+  appKey: '',
+  secretKey: '',
+  sn: '', // 序列号
+}, (status) => {
+  if(status === 0){
+    console.log('初始化成功')
+    TTSBaidu.speek('语音播放成功!');
+  }
+})
+```

BIN
nativeplugins/MT-TTS/android/.DS_Store


BIN
nativeplugins/MT-TTS/android/libs/.DS_Store


BIN
nativeplugins/MT-TTS/android/libs/arm64-v8a/libBDSpeechDecoder_V1.so


BIN
nativeplugins/MT-TTS/android/libs/arm64-v8a/libbd_etts.so


BIN
nativeplugins/MT-TTS/android/libs/arm64-v8a/libgnustl_shared.so


BIN
nativeplugins/MT-TTS/android/libs/armeabi-v7a/libBDSpeechDecoder_V1.so


BIN
nativeplugins/MT-TTS/android/libs/armeabi-v7a/libbd_etts.so


BIN
nativeplugins/MT-TTS/android/libs/armeabi-v7a/libgnustl_shared.so


BIN
nativeplugins/MT-TTS/android/libs/com.baidu.tts_2.6.2.2.20200629_44818d4.jar


BIN
nativeplugins/MT-TTS/android/libs/x86/libBDSpeechDecoder_V1.so


BIN
nativeplugins/MT-TTS/android/libs/x86/libbd_etts.so


BIN
nativeplugins/MT-TTS/android/libs/x86/libgnustl_shared.so


BIN
nativeplugins/MT-TTS/android/tts-release.aar


+ 30 - 0
nativeplugins/MT-TTS/package.json

@@ -0,0 +1,30 @@
+{
+    "name": "MT-TTS语音合成",
+    "id": "MT-TTS",
+    "version": "1.0.3",
+    "description": "安卓tts语音合成",
+    "_dp_type":"nativeplugin",
+    "_dp_nativeplugin":{
+        "android": {
+            "plugins": [
+                {
+                "type": "module",
+                "name": "MT-TTS-Baidu",
+                "class": "uni.mt.tts.BaiduTTS"
+                },
+                {
+                "type": "module",
+                "name": "MT-TTS-Speech",
+                "class": "uni.mt.tts.SpeechTTS"
+                }
+            ],
+			"integrateType": "aar",
+       "minSdkVersion": "19",
+       "abis": [
+       	"armeabi-v7a",
+       	"arm64-v8a",
+        "x86"
+       ] 
+        }
+    }
+}

+ 37 - 12
pages/index/home.vue

@@ -322,19 +322,44 @@
 			// 执行实际的语音播放 (返回 Promise)
 			speak(textValue) {
 				return new Promise((resolve, reject) => {
-					if (!this.TTSSpeech) {
-						reject(new Error('TTS engine not initialized.'));
-						return;
+					try{
+						setTimeout(() => reject(new Error('Operation timed out')), 8000);
+						if (!this.TTSSpeech) {
+							//#ifdef APP
+							// 引入插件
+							this.TTSSpeech = uni.requireNativePlugin('MT-TTS-Speech');
+							// 初始化TTS引擎
+							this.TTSSpeech.init((status) => { // 👈 同样移除 : number
+								if (status === 0) {
+									console.log('TTS引擎初始化成功');
+								} else {
+									console.error('TTS引擎初始化失败,状态码:', status)
+								}
+							}, 'com.iflytek.speechcloud')
+							this.TTSSpeech.setPitch(50)
+							this.TTSSpeech.setSpeed(50)
+							//#endif
+							
+							reject(new Error('TTS engine not initialized.'));
+							return;
+						}
+						// 监听 TTS 播放结束事件
+						this.TTSSpeech.onDone(() => {
+							resolve(); // 播放完成,Promise 成功
+						});
+						// 尝试启动语音播放
+						const speakOptions = {
+							text: textValue,
+						};
+						const res = this.TTSSpeech.speak(speakOptions);
+						if (res != 0){
+							this.TTSSpeech.destroy()
+							this.TTSSpeech = null
+						}
+					} catch (e) {
+						resolve(); 
 					}
-					// 监听 TTS 播放结束事件
-					this.TTSSpeech.onDone(() => {
-						resolve(); // 播放完成,Promise 成功
-					});
-					// 尝试启动语音播放
-					const speakOptions = {
-						text: textValue,
-					};
-					this.TTSSpeech.speak(speakOptions);
+					
 				});
 			},
 			keyboardheightchange() {