我正在尝试构建一个 Chrome 扩展程序,它捕获选项卡中播放的音频并仅以 HTML 形式显示该音频语音,例如,我播放一个视频,该视频显示“您好,欢迎观看我的视频”,所以现在扩展程序应显示“您好,欢迎观看我的视频”是否可以在浏览器中执行此操作?
home.html:
<html>
<head>
<script src="home.js"></script>
</head>
<body>
<h1>Capture Audio</h1>
<button id="share-audio-button">Capture Audio</button>
</body>
</html>
home.js:
function saveToFile(blob, name) {
const url = window.URL.createObjectURL(blob);
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = name;
a.click();
URL.revokeObjectURL(url);
a.remove();
}
function captureTabAudio() {
chrome.tabCapture.capture({ audio: true, video: false }, (stream) => {
// these lines enable the audio to continue playing while capturing
context = new AudioContext();
var newStream = context.createMediaStreamSource(stream);
newStream.connect(context.destination);
const recorder = new MediaRecorder(stream);
const chunks = [];
recorder.ondataavailable = (e) => {
chunks.push(e.data);
};
recorder.onstop = (e) => saveToFile(new Blob(chunks), "test.wav");
recorder.start();
setTimeout(() => recorder.stop(), 5000);
})
}
document.addEventListener('DOMContentLoaded', function () {
document.getElementById("share-audio-button").addEventListener("click", function () {
captureTabAudio();
});
});
manifest.json:
{
"name": "Audio To Text",
"version": "0.1",
"manifest_version": 3,
"permissions": [
"tabs",
"activeTab",
"tabCapture"
],
"host_permissions": [
"https://*/"
],
"action": {
"default_popup": "home.html",
"default_action": "home.js"
}
}
我试过这个:
function convertTotext(blob) {
const recognition = new SpeechRecognition()
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
console.log(transcript);
}
const audioURL = URL.createObjectURL(blob);
console.log(audioURL)
recognition.start();
}
我认为 webkitSpeechRecognition Chrome API https://developer.chrome.com/blog/voice-driven-web-apps-introduction-to-the-web-speech-api可能对您的情况有用
function convertToText(blob) {
const recognition = new webkitSpeechRecognition();
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
recognition.onresult = (event) => {
console.log('Result received:', event);
const transcript = event.results[0][0].transcript;
console.log(transcript);
}
const audioURL = URL.createObjectURL(blob);
recognition.start();
recognition.onend = () => {
recognition.stop();
};
recognition.onerror = (event) => {
console.error('Speech recognition error:', event.error);
}
const audio = new Audio();
audio.src = audioURL;
audio.play();
}