更语音静态资源

This commit is contained in:
yaooo 2023-10-12 15:21:14 +08:00
parent e16afaf4d6
commit ce984a9f8b
5 changed files with 127 additions and 96 deletions

View File

@ -1,7 +1,9 @@
.h1 { .h1 {
text-align: center; text-align: center;
} }
body{
background-color: transparent !important;
}
.voice-box { .voice-box {
box-sizing : border-box; box-sizing : border-box;
display : flex; display : flex;
@ -9,7 +11,7 @@
margin : 50px auto; margin : 50px auto;
padding : 50px; padding : 50px;
width : 60%; width : 60%;
border : 1px solid gray;
border-radius : 3px; border-radius : 3px;
} }

View File

@ -1,86 +1,106 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum=1.0, user-scalable=no shrink-to-fit=no" /> <meta name="viewport"
<meta http-equiv="X-UA-Compatible" content="ie=edge" /> content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum=1.0, user-scalable=no shrink-to-fit=no" />
<title>迅飞语音听写流式版WebAPI</title> <meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="./css/base.css" /> <link rel="stylesheet" href="./css/base.css" />
<script async src="https://hm.baidu.com/hm.js?85fad12bb9a6dab448f4eff0a19299a5"></script> <!-- <script async src="https://hm.baidu.com/hm.js?85fad12bb9a6dab448f4eff0a19299a5"></script> -->
</head> </head>
<body style="background-color: transparent;"> <body>
<h1 class="h1">迅飞语音听写流式版WebAPI</h1>
<hr>
<section class="voice-box"> <section class="voice-box">
<input type="search" name="voice" id="voice-txt" /> <input type="search" name="voice" id="voice-txt" />
<button id="start-btn">开始识别</button> <button id="start-btn">开始识别</button>
</section> </section>
<section class="fixed-box" id="fixed-box"> <section class="fixed-box" id="fixed-box">
<div class="fixed-main"> <div class="fixed-main">
<button class="fixed-close" id="close-btn"></button> <button class="fixed-close" id="close-btn"></button>
<div id="fixed-txt">Hello! 请说出你想说话。。。!</div> <div id="fixed-txt">Hello! 请说出你想说话。。。!</div>
<div class="fixed-icon"> <div class="fixed-icon">
<img src="./img/voice.png" alt="" /> <img src="./img/voice.png" alt="" />
</div> </div>
</div> </div>
</section> </section>
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js">
<script src="./js/crypto-js.min.js"></script> </script>
<script src="./js/voice.js"></script> <script src="./js/crypto-js.min.js"></script>
<script src="./js/voice.js"></script>
<script>
window.onload = function () { <script>
const voiceTxt = document.querySelector('#voice-txt'); window.onload = function() {
const startBtn = document.querySelector('#start-btn'); const voiceTxt = document.querySelector('#voice-txt');
const fixedBox = document.querySelector('#fixed-box'); const startBtn = document.querySelector('#start-btn');
const fixedTxt = document.querySelector('#fixed-txt'); const fixedBox = document.querySelector('#fixed-box');
const closeBtn = document.querySelector('#close-btn'); const fixedTxt = document.querySelector('#fixed-txt');
let times = null; const closeBtn = document.querySelector('#close-btn');
let times = null;
// 实例化迅飞语音听写流式版WebAPI
const voice = new Voice({
// 实例化迅飞语音听写流式版WebAPI
// 服务接口认证信息 注apiKey 和 apiSecret 的长度都差不多,请要填错哦,! const voice = new Voice({
appId: '2eda6c2e',
apiSecret: 'MDEyMzE5YTc5YmQ5NjMwOTU1MWY4N2Y2', // 服务接口认证信息 注apiKey 和 apiSecret 的长度都差不多,请要填错哦,!
apiKey: '12ec1f9d113932575fc4b114a2f60ffd', appId: '2eda6c2e',
// 注要获取以上3个参数请到迅飞开放平台https://www.xfyun.cn/services/voicedictation 【注这是我的迅飞语音听写流式版每天服务量500也就是调500次如果你需求里大请购买服务量https://www.xfyun.cn/services/voicedictation?target=price】 apiSecret: 'MDEyMzE5YTc5YmQ5NjMwOTU1MWY4N2Y2',
apiKey: '12ec1f9d113932575fc4b114a2f60ffd',
onWillStatusChange: function (oldStatus, newStatus) { // 注要获取以上3个参数请到迅飞开放平台https://www.xfyun.cn/services/voicedictation 【注这是我的迅飞语音听写流式版每天服务量500也就是调500次如果你需求里大请购买服务量https://www.xfyun.cn/services/voicedictation?target=price】
//可以在这里进行页面中一些交互逻辑处理倒计时语音听写只有60s,录音的动画,按钮交互等!
fixedBox.style.display = 'block'; onWillStatusChange: function(oldStatus, newStatus) {
}, //可以在这里进行页面中一些交互逻辑处理倒计时语音听写只有60s,录音的动画,按钮交互等!
onTextChange: function (text) { fixedBox.style.display = 'block';
//监听识别结果的变化 },
voiceTxt.value = text; onTextChange: function(text) {
fixedTxt.innerText = text; //监听识别结果的变化
voiceTxt.value = text;
// 3秒钟内没有说话就自动关闭 fixedTxt.innerText = text;
if (text) { console.log(text,'11111')
clearTimeout(times); // 3秒钟内没有说话就自动关闭
times = setTimeout(() => { if (text) {
this.stop(); // voice.stop(); setTimeout(() => {
fixedBox.style.display = 'none'; voice.stop();
}, 3000); uni.postMessage({
}; data: text
} });
}); fixedBox.style.display = 'none';
}, 0);
// 开始识别 };
startBtn['onclick'] = function () { }
voice.start(); });
};
addUniEvenPassthrough()
// 关闭识别 addcloEvenPassthrough()
closeBtn['onclick'] = function () {
voice.stop(); function addUniEvenPassthrough() {
fixedBox.style.display = 'none'; window.uniEvent = function(info) {
}; console.log('11111')
}; voice.start();
</script> }
</body> }
function addcloEvenPassthrough() {
window.closeEvent = function(info) {
console.log('2222')
voice.stop();
fixedBox.style.display = 'none';
}
}
// 开始识别
startBtn['onclick'] = function() {
voice.start();
};
// 关闭识别
closeBtn['onclick'] = function() {
voice.stop();
fixedBox.style.display = 'none';
};
};
</script>
</body>
</html> </html>

View File

@ -73,7 +73,8 @@
alert('请正确配置【迅飞语音听写流式版WebAPI】服务接口认证信息'); alert('请正确配置【迅飞语音听写流式版WebAPI】服务接口认证信息');
} else { } else {
self.webWorker = new Worker('./js/transcode.worker.js'); self.webWorker = new Worker('./js/transcode.worker.js');
self.webWorker.onmessage = function (event) { self.webWorker.onmessage = function (event) {
self.audioData.push(...event.data); self.audioData.push(...event.data);
}; };
} }
@ -123,7 +124,8 @@
this.webSocket = iatWS; this.webSocket = iatWS;
this.setStatus('init'); this.setStatus('init');
iatWS.onopen = e => { iatWS.onopen = e => {
this.setStatus('ing'); this.setStatus('ing');
console.log('连接成功')
// 重新开始录音 // 重新开始录音
setTimeout(() => { setTimeout(() => {
this.webSocketSend(); this.webSocketSend();
@ -216,7 +218,8 @@
}; };
// 向webSocket发送数据(音频二进制数据经过Base64处理) // 向webSocket发送数据(音频二进制数据经过Base64处理)
webSocketSend() { webSocketSend() {
if (this.webSocket.readyState !== 1) return false; if (this.webSocket.readyState !== 1) return false;
// 音频数据 // 音频数据
const audioData = this.audioData.splice(0, 1280); const audioData = this.audioData.splice(0, 1280);
const params = { const params = {
@ -262,7 +265,8 @@
clearInterval(this.handlerInterval); clearInterval(this.handlerInterval);
} }
return false; return false;
}; };
console.log(this.audioData)
// 中间帧 // 中间帧
this.webSocket.send( this.webSocket.send(
JSON.stringify({ JSON.stringify({
@ -277,8 +281,10 @@
}, 40); }, 40);
}; };
// 识别结束 webSocket返回数据 // 识别结束 webSocket返回数据
webSocketRes(resultData) { webSocketRes(resultData) {
let jsonData = JSON.parse(resultData);
let jsonData = JSON.parse(resultData);
console.log(JSON.stringify( jsonData))
if (jsonData.data && jsonData.data.result) { if (jsonData.data && jsonData.data.result) {
let data = jsonData.data.result; let data = jsonData.data.result;
let str = ''; let str = '';
@ -306,14 +312,17 @@
} }
} }
if (jsonData.code === 0 && jsonData.data.status === 2) { if (jsonData.code === 0 && jsonData.data.status === 2) {
this.webSocket.close(); this.webSocket.close();
} }
if (jsonData.code !== 0) { if (jsonData.code !== 0) {
this.webSocket.close(); this.webSocket.close();
} }
}; };
// 启动录音 // 启动录音
recorderStart() { recorderStart() {
if (!this.audioContext) { if (!this.audioContext) {
this.recorderInit(); this.recorderInit();
} else { } else {