🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1090閲覧

JavaScriptで音声の比較をしたい

tsunet111

総合スコア59

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/22 03:11

JavaScriptで音声の比較(正解と似ているか?)を判定したいです。
英語の学習で、自分の発した音声が正解の音声とどれだけ似ているか?を判定したいという形です。

ロジックとして、マイク音声→テキスト化→テキストを比較、というのが分かりやすいのですが、できればクラウドサービスを利用せず、JavaScriptの音声バイナリの何かしら比較で判定できないかと思っています。

Web上での波形の類似度などの表示
https://teratail.com/questions/160803

↑ 1つの方法はこれかと思っていますが、よいライブラリか判定アルゴリズムか知っている人いたら教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

とりあえずFFT掛けて周波数領域のグラフにしてフォルマントを比較するくらいは最低限やらないと、時間領域の波形だけ見ても何の意味もありません。
その上で、語学の学習に使えるような「どれだけ似ているか」の判断、つまり声質の違いを無視して音素の正しさを判定する方法になるかと思いますが、これは皆目見当がつきませんね。

投稿2019/11/23 11:12

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

  1. 正解の発音の音声をどうやって準備しますか?(どこかで見た気がする)
  2. 声質が異なる音声(≒違う人の声)をどうやって比較しますか?(波形ではなくFFTして周波数成分の変化をみる?)
  3. 話すスピードが異なる音声をどうやって比較しますか?(速度、音量をノーマライズすれば良いかも)

etc

波形ベースで検討するならぱっと見でもコレくらいは検討材料が必要と思います。特に一番目。

ぶっちゃけ、speech recognition API(chrome ならオンライン必要)かオフラインでも使える音声認識ライブラリを探して文字として判定したほうが良いと思います。

以下は使えるかも
https://syl22-00.github.io/pocketsphinx.js/

投稿2019/11/22 09:21

編集2019/11/22 11:28
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsunet111

2019/11/22 14:02

1.の正解音声のデータはある想定です。 それ以外は、私自身も音声データのバイナリフォーマットや特性に詳しくなく、手軽な方法やアルゴリズムがないかと思い質問させていただきました。 ご紹介いただいた Pocketsphinx.js おもしろそうです!!
oikashinoa

2019/11/22 22:45 編集

圧縮音源(MP3とか)は非圧縮&リニアPCM(≒WAV)にしないと似ているかの比較は出来ないです。(ZIPファイルの中身を展開せずに比較は出来ないですよね…って感じ) 位相ズレ(≒音が始まるタイミングのズレ)とかも考えると、異なる音源(=人間)の音声比較は色んなノウハウが必要そうです。 Pocketsphinx.js…使用感知りたいので何か分かりましたら情報とか簡単なソースで報告してくれると嬉しいです。
guest

0

候補とされる wavesurfer-js (gitHub)を使う場合についての回答となります

Web上での波形の類似度などの表示
https://teratail.com/questions/160803
↑ 1つの方法はこれかと思っています

リンク先の質問者さんもURLを掲示しておりますが、「条件」欄を引用します。

あくまでも「ブラウザ上の処理」のためオーディオ品質においては限度があります

ブラウザ上で稼働するには限度があるものと割り切って試してみてはどうでしょう?

Canvasに出力する事例を利用して

  1. 見本音声と録音から生成できる2つCanvasを比較
  2. 波形を示す、ピクセルの位置(時間x高さ)で処理

とすれば、大雑把に似ているかどうかを数値化ができるのではないでしょうか。


WebAudioArrayBuffer を比較するような方法もありそうですが、音声フォーマットを熟知していないと、調査に時間を取られそうです。


マイク音声→テキスト化→テキストを比較

いわゆる「文字起こし」は、もっと膨大なノウハウが要りそうです。

投稿2019/11/22 05:39

AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsunet111

2019/11/22 14:03

テキスト化は speech recognition API かクラウドサービス使えば簡単なのですが・・・ 諸事情があり、簡易でよいので従量課金サービスを使わずに実現したいという形です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問