Files
SIPAIIS_WMS_JSSW/WebRoot/jsp/data/baiDuAipSpeechShow.jsp

160 lines
6.3 KiB
Plaintext
Raw Normal View History

2026-01-16 14:13:44 +08:00
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page import="com.sipai.entity.base.ServerObject"%>
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%>
<jsp:include page="/jsp/inc.jsp"></jsp:include>
<script type="text/javascript" src="<%=request.getContextPath()%>/node_modules/Recorder-master/recorder.mp3.min.js"
charset="utf-8"></script>
<html>
<body>
<input type="button" onclick="startRec()" value="录音转文字" width="50px">
<input type="button" onclick="timeIng()" value="实时识别" width="50px">
<input type="button" onclick="speckText('测试11111')" value="语音播报" width="50px">
</body>
</html>
<script>
function speckText(str){
let to_speak = window.speechSynthesis;
to_speak = new SpeechSynthesisUtterance(str);
window.speechSynthesis.speak(to_speak);
}
var rec;
var flag2 = 0;
var websocket = null;
function timeIng(){
flag2 += 1;
if (flag2 % 2 == 1) {
console.log(12);
if ('WebSocket' in window) {
// 创建websocket对象
websocket = new WebSocket('wss://vop.baidu.com/realtime_asr?sn=aaa-bbb-ccc-ddd');
// var userName = "语音识别";
// websocket = new WebSocket(ext.basePath.replace("http", "ws") + "/chat/baiDuAipSpeechMessage");
registerEvent();
} else {
alert('当前浏览器不支持websocket')
}
function registerEvent() {
websocket.onopen = function (event) {
console.log("WebSocket message received:", event);
}
websocket.onmessage = function (event) {
console.log("WebSocket message received:", event);
};
websocket.onclose = function (event) {
websocket.close();
};
//连接发生错误的回调方法
websocket.onerror = function () {
// $("#Putin").attr('disabled', 'disabled');
websocket.close();
};
}
}
if (flag2 % 2 == 0) {
console.log("websocket关闭");
websocket.close();
}
}
var flag = 0;
function startRec() {
flag += 1;
if (flag % 2 == 1) {
rec = Recorder({ type: "mp3", sampleRate: 16000, bitRate: 16, numChannels: 1 });//使用默认配置mp3格式
//打开麦克风授权获得相关资源
rec.open(function () {
//开始录音
rec.start();
}, function (msg, isUserNotAllow) {
//用户拒绝了权限或浏览器不支持
alert((isUserNotAllow ? "用户拒绝了权限," : "") + "无法录音:" + msg);
});
}
if (flag % 2 == 0) {
//停止录音得到了录音文件blob二进制对象想干嘛就干嘛
rec.stop(function (blob, duration) {
var api=ext.contextPath +"/data/baiDuAipSpeech/save.do";
var reader=new FileReader();
reader.onloadend=function(){
$.ajax({
url:api, //上传接口地址
type:"POST",
dateType:'json',
data:{
type:blob.type, //告诉后端这个录音是什么格式的可能前后端都固定的mp3可以不用写
upfile_b64:(/.+;\s*base64\s*,\s*(.+)$/i.exec(reader.result)||[])[1] //录音文件内容后端进行base64解码成二进制
},
success:function(data){
console.log(data);
// console.log("上传成功",v);
rec.close();
},
error:function(s){
console.error("上传失败",s);
rec.close();
}
});
};
reader.readAsDataURL(blob);
}, function (msg) {
alert("录音失败:" + msg);
rec.close();
});
}
};
function uploadRec() {
//停止录音得到了录音文件blob二进制对象想干嘛就干嘛
rec.stop(function (blob, duration) {
/*
blob文件对象可以用FileReader读取出内容
或者用FormData上传本例直接上传二进制文件
对于普通application/x-www-form-urlencoded表单上传
请参考github里面的例子
*/
var form = new FormData();
form.append("upfile", blob, "recorder.mp3"); //和普通form表单并无二致后端接收到 upfile参数的文件文件名为recorder.mp3
//直接用ajax上传
var xhr = new XMLHttpRequest();
xhr.open("POST", "");//放后端语音处理程序的地址
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
alert(xhr.status == 200 ? "上传成功" : "测试请先打开浏览器控制台然后重新录音在network选项卡里面就能看到上传请求数据和格式了");
document.getElementById("keyword").value = xhr.responseText;
}
}
xhr.send(form);
}, function (msg) {
alert("录音失败:" + msg);
});
};
function playRec() {
//停止录音得到了录音文件blob二进制对象想干嘛就干嘛
rec.stop(function (blob, duration) {
var audio = document.createElement("audio");
audio.controls = true;
document.body.appendChild(audio);
//非常简单的就能拿到blob音频url
audio.src = URL.createObjectURL(blob);
audio.play();
}, function (msg) {
alert("录音失败:" + msg);
});
};
</script>