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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

受付中

androidで音声認識を実現したい

k126578ta
k126578ta

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0回答

0評価

0クリップ

1054閲覧

投稿2020/04/02 15:36

前提・実現したいこと

Androidで,アプリを開き,ボタンを押すと音声認識のモードに遷移し,ユーザが何かしゃべるとAndroidが音声認識をし,画面にテキストとして表示する,というようなアプリを実現したいです.現在,日本語と英語で実現することができたのですが,中国語で実現することができません.Androidをオフラインにした状態でもアプリが動くように,言語のダウンロードをしてあります.

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーは発生しないのですが,中国語の音声認識の際に,中国語だけでなく日本語も認識してしまいます.例えば,「こんにちは」という言葉は日本語なので中国語の音声認識では反応しないはずが,中国語の音声認識で反応してしまいます.中国語の音声認識の際には,中国語だけに反応するようにしたいです.

該当のソースコード

MainActivity

package com.example.keita.gtts; import android.content.Intent; import android.speech.RecognitionListener; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer; import android.speech.tts.TextToSpeech; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.Locale; public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener { private Button button_jpn; private Button button_en; private Button button_ch; private EditText editText; private TextToSpeech tts; private String text_jpn; private SpeechRecognizer mRecognizer; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button_jpn = findViewById(R.id.button_jpn); button_en = findViewById(R.id.button_en); button_ch = findViewById(R.id.button_ch); editText = findViewById(R.id.editText); textView = findViewById(R.id.textView); //tts = new TextToSpeech(this, this); mRecognizer = SpeechRecognizer.createSpeechRecognizer(this); mRecognizer.setRecognitionListener(new listener()); button_jpn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v1) { Intent intent1 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent1.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ja-JP"); intent1.putExtra(RecognizerIntent.EXTRA_PREFER_OFFLINE, true); intent1.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName()); mRecognizer.startListening(intent1); //speechText(); } }); button_en.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v2) { Intent intent2 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent2.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString()); intent2.putExtra(RecognizerIntent.EXTRA_PREFER_OFFLINE, true); intent2.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName()); mRecognizer.startListening(intent2); //speechText(); } }); button_ch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v3) { Intent intent3 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent3.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "zh-Hans-CN"); intent3.putExtra(RecognizerIntent.EXTRA_PREFER_OFFLINE, true); intent3.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName()); mRecognizer.startListening(intent3); //speechText(); } }); } @Override public void onInit(int status) { } /* private void speechText(){ text_jpn = editText.getText().toString(); tts.speak(text_jpn, TextToSpeech.QUEUE_FLUSH, null, null); } */ public class listener implements RecognitionListener{ @Override public void onReadyForSpeech(Bundle params) { Toast.makeText(getApplicationContext(), "準備終了", Toast.LENGTH_SHORT).show(); } @Override public void onBeginningOfSpeech() { Toast.makeText(getApplicationContext(), "入力開始", Toast.LENGTH_SHORT).show(); } @Override public void onRmsChanged(float rmsdB) { } @Override public void onBufferReceived(byte[] buffer) { } @Override public void onEndOfSpeech() { Toast.makeText(getApplicationContext(), "入力終了", Toast.LENGTH_SHORT).show(); } @Override public void onError(int error) { } @Override public void onResults(Bundle results) { String key = SpeechRecognizer.RESULTS_RECOGNITION; ArrayList<String> list = results.getStringArrayList(key); String str = ""; for (String s : list){ str += s; } textView.setText(str); } @Override public void onPartialResults(Bundle partialResults) { } @Override public void onEvent(int eventType, Bundle params) { } } }

xml

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/button_jpn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="24dp" android:text="Japanese" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.501" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText" /> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="100dp" android:ems="10" android:hint="翻訳するテキストを入力" android:inputType="text" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="20dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button_ch" /> <Button android:id="@+id/button_en" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="20dp" android:text="English" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button_jpn" /> <Button android:id="@+id/button_ch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="20dp" android:text="China" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button_en" /> </android.support.constraint.ConstraintLayout>

Manifest

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>

試したこと

中国語のLocaleについて調べ,ソースコードに記載した形にしたのですが,うまくいきませんでした.

補足情報(FW/ツールのバージョンなど)

Android Studio 3.1.4
Windows 10
Nexus 5X

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

hoshi-takanori

2020/04/02 16:07

音声認識はよく分かりませんが、startListeneing の時に、すでに別の言語で startListeneing されていれば stopListeneing しなくて良いのでしょうか。
k126578ta

2020/04/02 16:29

音声認識が終了すると,自動的にstopされてonResultsが呼ばれるので不具合は出ていません. 音声認識に関してプログラム中で中国語を指定しているのに,日本語の音声入力に反応してしまうことを解決するのを最優先に考えています.
bobmax

2020/04/07 01:12

関係あるか分かりませんが、Locale.CHINA.toString()は"zh-CN"でしたが"zh-Hans-CN"でいいんでしょうか。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。