第一步
实现单人语音转写文字,当进入房间只有一个人时,这个时候就相当于这个房间是一个录音机,自动监听外部环境的声音,将声音转写为文字记录下来
语音实时转写文字需要用到websocket与后台保持持久连接
判断是http还是https 决定是wss,还是ws
var ws_host
if(window.location.protocol === 'http:'){
ws_host = 'ws://' + window.location.hostname + ':8080'
}else{
ws_host='wss://' + window.location.hostname + '8089'
}
绑定开始按钮
var ws=null;
var recorder=null;
function startRecord(){
ws=new webSocket(
ws_host + '接口名参数'
)
ws.onopen = function () {
log_println('ASR channel opened')
navigator.mediaDevices
.getUserMedia({ audio: true, video: false })
.then((stream) => {
recorder = RecordRTC(stream, {
type: 'audio',
mimeType: 'audio/wav',
recorderType: StereoAudioRecorder,
desiredSampRate: 16000,
numberOfAudioChannels: 1,
timeSlice: 1000,
bufferSize: 16384,
ondataavailable: sendData,
})
recorder.startRecording()
})
}
ws.onmessage = function (event) {
let res = JSON.parse(event.data)
if (res.code == 200 && res.final == true) {
console.log(res.text)
}
}
}
function sendData(blob) {
blob.arrayBuffer().then((buffer) => {
let raw = buffer.slice(44)
ws.send(raw)
})
}
第二步
双人或多人视频时语音转写文字
双人或多人时就区分成本地端和远端
本端
onlocalstream:function(stream){
var ws = new WebSocket(
ws_host+ '接口名和参数'
)
连接成功
ws.onopen = function () {
let recorder = new RecordRTCPromisesHandler(stream, {
type: "audio",
mimeType: "audio/wav",
recorderType: StereoAudioRecorder,
desiredSampRate: 16000,
numberOfAudioChannels: 1,
timeSlice: 1000,
bufferSize: 16384,
ondataavailable: sendDataaudio,
});
recorder.startRecording();
};
let sendDataaudio = function (blob) {
blob.arrayBuffer().then((buffer) => {
let raw = buffer.slice(44);
ws.send(raw);
});
};
ws.onmessage = function (event) {
let res = JSON.parse(event.data);
if (res.code == 200 && res.final == true) {
console.log(res.text);
}
};
}
远端
onremotestream:function(stream){
var ws = new WebSocket(
ws_host+ '接口名和参数'
)
ws.onopen = function () {
let recorder = new RecordRTCPromisesHandler(stream, {
type: "audio",
mimeType: "audio/wav",
recorderType: StereoAudioRecorder,
desiredSampRate: 16000,
numberOfAudioChannels: 1,
timeSlice: 1000,
bufferSize: 16384,
ondataavailable: sendData,
});
recorder.startRecording();
};
let sendDataaudio = function (blob) {
blob.arrayBuffer().then((buffer) => {
let raw = buffer.slice(44);
ws.send(raw);
});
};
ws.onmessage = function (event) {
let res = JSON.parse(event.data);
if (res.code == 200 && res.final == true) {
console.log(res.text);
}
};
}
```