質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.53%

  • Android

    7183questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Monaca

    1092questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • Cordova

    468questions

    Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Cordovaでの音声⇒文字変換ができない(cordova-plugin-speechrecognitionでAndroid)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 96

s.Masaya

score 1

概要

CordovaをMonacaで使っております。
音声を文字へ変換したく、cordova-plugin-speechrecognitionを使ってAndroid8.0.0で音声認識を行おうとしてます。
下記URLが丁寧に書いてあったので、これを使い実装したいと考えましたが、うまくいきません。
https://qiita.com/r-hashioka/items/70c3d7e8088e4923c2cc
詳しい方、教えていただけないでしょうか。。?

問題

下のほうに示した全体のコードを実行すると、実機でデバッグしたときにこの部分が実行されてしまいます。

// 音声入力失敗時のコールバックメソッド
56.function micError(result) {
57.    // エラーメッセージを出力
58.    alert("mic error : " + result) ;
59.}


resultには、permission errorという文字列が表示されます。

コードの全体は下記のように実装しています。

0. function setup_recognition(){
1.   // プラグインの音声入力が可能かどうか判定
2. window.plugins.speechRecognition.isRecognitionAvailable(
3.   function(available) {
4.     if(available){
5.       // 利用可能なら、マイク使用の許可を求める。
6.       window.plugins.speechRecognition.requestPermission(
7.         function(res) {
8.           // 成功時、特に何もしない。
9.           console.log("permission is changed!");
10.}, function(err){
11.          // 失敗時、警告メッセージを出し、音声入力ボタンを非活性に。
          console.error(err);
13.          alert("マイクに接続できませんでした。");
          $("#voice_input_btn").prop("disabled", false);    //jquery使ってます。
15.      });
    }
17.  }, function(err){
    // 利用不可なら、警告メッセージを出し、音声入力ボタンを非活性に。
19.    console.error(err);
    alert("音声入力プラグインが利用できません。");
21.    $("#voice_input_btn").prop("disabled", false);    //jquery使ってます。
});
23.}


// 音声入力用メソッド
27.function inputVoice(){
  // 音声入力の事前設定
29.  var micOptions = {
    language : "ja-JP", // 言語は日本語
31.    matches : 1         // 結果の候補数
  }

  // 音声入力 開始
35.  if(monaca.isAndroid) {
    // Android の場合は startListening を呼ぶだけ。
37.    window.plugins.speechRecognition.startListening( micSuccess,  micError,  micOptions );
  } else if(monaca.isIOS) {
39.    // iOS の場合は startListening の後、stopListening を呼ぶ必要有。
    // ダイアログを立ち上げ、ダイアログ上で OK を押すと、対象のフィールドに値を書き込む。
41.    showIosVoiceDialog(micOptions);
  } else {
43.    // 非対応 OS の場合はメッセージを出す。
    alert("音声入力は Android もしくは iOS のみの対応となっております。")
45.  }
}

// 音声入力成功時のコールバックメソッド
function micSuccess(result){
51.    // テキストインプットに結果を出力
    $("#searchword").val(result) ;    //jquery使ってます。
53.}

// 音声入力失敗時のコールバックメソッド
56.function micError(result) {
57.    // エラーメッセージを出力
58.    alert("mic error : " + result) ;
59.}

function showIosVoiceDialog(micOptions) {
  // 音声入力開始
  window.plugins.speechRecognition.startListening( micSuccess,  micError,  micOptions );

  // 音声入力中のダイアログを表示する。
  ons.notification.confirm({
    messageHTML: '<div style="text-align:center"><ons-icon icon="fa-microphone" size="30px" /><br><span style="font-size:14px">音声入力中...</span></div>',
    title: '',
    primaryButtonIndex: 1,
    cancelable: false,
    modifier: 'material',
    callback: function(index) {
        switch(index) {
          case 1:
            //OKを押した時、音声入力終了
            window.plugins.speechRecognition.stopListening();
            break;
          case 0:
            // Cancelを押した時の処理
            // MEMO:中断したいけど、中断メソッドがプラグインに用意されていない模様
            window.plugins.speechRecognition.stopListening();
            break;
        }
    }
  });
}




function init() {
    document.addEventListener("deviceready", setup_recognition, true);
}

行ったこと

errの内容はpermission errorと表示されるので、マイクへの接続の問題かと思い、
cordova-plugin-media-capture
cordova-plugin-media
を入れましたが、状況はかわかりません

質問

permission errorというのがなんのpermissionなのか、なにをすればよいのか途方に暮れています。
お分かりになる方、教えていただけないでしょうか。

Gitのページは下記です。
https://github.com/pbakondy/cordova-plugin-speechrecognition

どうぞよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

javascriptを使ったクロスプラットフォーム(おそらく)のandroid開発はあまり詳しくはないのですが・・・
音声認識関係のpermission errorならManifest.permission.RECORD_AUDIO permissionが原因なのではないでしょうか?

公式サイトに以下の一文がありました。
Please note that the application must have Manifest.permission.RECORD_AUDIO permission to use this class.

>>何をすればよいか
AndroidManifest.xmlにpermissionを記述すればいいかと思います。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.myapp" >
    <uses-permission android:name="android.permission.RRECORD_AUDIO" />//これを追加する。
    ...
</manifest>


参考

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/09 18:44

    ご回答いただき、ありがとうございます。
    ご指摘いただいた内容はまったく関知していなかったので、確認させていただきました。問題ないことを確認後、上のコードのようにonDeviceReadyイベントの前に関数を入れる前のコードをビルドしていたことに気がつきました。。お騒がせいたしました。でも大変勉強になりました!
    今後ともよろしくお願いいたします。

    キャンセル

check解決した方法

0

上のコードのようにonDeviceReadyイベントの前に関数を入れる前のコードをビルドしていたことに気がつきました。。お騒がせいたしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Android

    7183questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Monaca

    1092questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • Cordova

    468questions

    Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。