script.js
let recognition = null;
async function startRecording() {
try {
recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true;
recognition.interimResults = false;
recognition.lang = 'zh-CN'; // 设置语言为中文
recognition.onresult = function(event) {
let transcript = '';
for (let i = event.resultIndex; i < event.results.length; i++) {
transcript += event.results[i][0].transcript;
}
console.log('transcription:', transcript);
document.getElementById('transcription').innerText += transcript +'\n';
};
recognition.onerror = function(event) {
console.error('Speech recognition error:', event.error);
if (event.error === 'not-allowed') {
alert('麦克风权限被拒绝。请在浏览器设置中授予麦克风权限。');
}
};
recognition.start();
console.log('start recording');
} catch (error) {
console.error('Error starting recording:', error);
}
}
function stopRecording() {
if (recognition) {
recognition.stop();
console.log('stop recording');
}
}
async function listenForStartSignal() {
console.log('listenForStartSignal ...');
try {
const response = await fetch('/start-recording');
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const data = await response.json();
console.log('Received data:', data);
if (data.start) {
startRecording();
}
} catch (error) {
console.error('Error:', error);
}
}
async function listenForStopSignal() {
console.log('listenForStopSignal ...');
try {
const response = await fetch('/stop-recording');
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const data = await response.json();
console.log('Received data:', data);
if (data.start) {
stopRecording();
}
} catch (error) {
console.error('Error:', error);
}
}
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM fully loaded and parsed');
listenForStartSignal();
listenForStopSignal();
});
windows效果:
mac效果:
同时支持麦克风和扬声器的设置:
聚集设备:
多输出设备:
系统设置-声音输入:
输出:
效果: