web-dev-qa-db-ja.com

音声ファイルでJavaScript SpeechRecognition APIを使用する方法はありますか?

SpeechRecognition api をオーディオファイル(mp3、waveなど)で使用したいのですが、可能ですか?

22
The Surrican

短い答えはいいえです。

Web Speech Api Specification はこれを禁止しません(ブラウザーはエンドユーザーが入力として使用するファイルを選択できるようにする可能性があります)が、オーディオ入力ストリームは呼び出し側のJavaScriptコードに提供されません(現在のドラフトバージョン)。音声認識サービスに入力された音声を読んだり変更したりする方法はありません。

この仕様は、JavaScriptコードが音声認識サービスからの結果テキストにのみアクセスできるように設計されています。

13
Tiago Sousa

基本的に、OSレベルで選択されているdefault audioinputデバイスでのみ使用できます...

したがって、defaultオーディオ入力にファイルを再生するだけです

可能な2つのオプション:

1

今日これをテストしました、そしてそれは完全に機能します:-)

2

THIS IS NOT TESTED BY ME、したがって私はこれが機能していることを確認できませんが、オーディオファイルをchrome Seleniumを使用してフィードすることができます...同様に

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
ChromeOptions options = new ChromeOptions();
options.addArguments("--allow-file-access-from-files",
                     "--use-fake-ui-for-media-stream",
                     "--allow-file-access",
                     "--use-file-for-fake-audio-capture=D:\\PATH\\TO\\WAV\\xxx.wav",
                     "--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

しかし、このストリームがdefault audioinputを置き換えるかどうかはわかりません

3

[〜#〜] mdn [〜#〜] によると、それはできません。ストリームを認識サービスにフィードすることはできません

それは大きな問題です... SpeechRecognitionで使用されるマイクを選択することもできません

それは目的によって行われ、GoogleはCLOUD SPEECH APIを販売したいと考えています

CLOUD SPEECH API のようなサービスを使用する必要があります

0

はい、webkitSpeechRecognitionを使用してオーディオファイルの再生のテキストトランスクリプトを取得することは可能です。文字起こしの品質は、オーディオ再生の品質に依存します。

const recognition = new webkitSpeechRecognition();

const audio = new Audio();

recognition.continuous = true;
recognition.interimResults = true;
recognition.onresult = function(event) {
  if (event.results[0].isFinal) {
    // do stuff with `event.results[0][0].transcript`
    console.log(event.results[0][0].transcript);
    recognition.stop();
  }
}

recognition.onaudiostart = e => {
  console.log("audio capture started");
}

recognition.onaudioend = e => {
  console.log("audio capture ended");
}

audio.oncanplay = () => {
  recognition.start();
  audio.play();
}

audio.src = "/path/to/audio";

jsfiddle https://jsfiddle.net/guest271314/guvn1yq6/

0
guest271314