如何在 JavaScript 中将音频 blob 转换为文本?

问题描述 投票:0回答:1

我正在尝试构建一个 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();
}
javascript html google-chrome-extension
1个回答
0
投票

我认为 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.