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

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

詳細はこちら
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Java

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

Android

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

Android Studio

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

1440閲覧

Google Cloud Text to SpeechをAndroid Studioで使用する方法

uhsi

総合スコア57

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Java

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

Android

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

Android Studio

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/10/13 08:30

編集2019/10/15 07:47

先日教えていただいた方法で行いました。
https://github.com/changemyminds/Google-Cloud-TTS-Android
こちらのサンプルを以下のように取り込み以下のファイルのみ編集しました。
AlarmNotification.javaは無関係です。

しかしながら、音声が流れず困っています。確認の方法もわからないためアドバイスをいただけると助かります。

---追記---
mView.startActivity(installIntent);
この行をコメントアウトしていたことが原因でした。失礼いたしました。
しかし、API KEYにキーの制限をしたところ、音声が流れなくなってしまいました。
「Android アプリに使用を限定」と設定し、パッケージ名と SHA-1 署名証明書フィンガープリントを入力しました。
Android Studioから端末にアプリを入れるのではなく、Androidアプリを公開してGoogle Playからダウンロードしなければ音声を再生できないのでしょうか。

Java

1package darren.gcptts.model.presenter; 2 3import android.content.Context; 4import android.content.Intent; 5import android.speech.tts.TextToSpeech; 6import android.util.Log; 7import com.google.gson.JsonArray; 8import com.google.gson.JsonElement; 9import com.google.gson.JsonObject; 10import com.google.gson.JsonParser; 11import java.util.Locale; 12import darren.gcptts.model.AndroidTTSAdapter; 13import darren.gcptts.model.GCPTTSAdapter; 14import darren.gcptts.model.SpeechManager; 15import darren.gcptts.model.android.AndroidVoice; 16import darren.gcptts.model.gcp.AudioConfig; 17import darren.gcptts.model.gcp.EAudioEncoding; 18import darren.gcptts.model.gcp.ESSMLlVoiceGender; 19import darren.gcptts.model.gcp.GCPVoice; 20import darren.gcptts.model.gcp.VoiceCollection; 21import darren.gcptts.model.gcp.VoiceList; 22 23 24public class MainActivityPresenter implements VoiceList.IVoiceListener { 25 private static final String TAG = "MainActivityPresenter"; 26 private static final int TEXT_TO_SPEECH_CODE = 0x100; 27 28 private static final long WAIT_TIME = 2000L; 29 private long TOUCH_TIME = 0; 30 31 private VoiceList mVoiceList; 32 private VoiceCollection mVoiceCollection; 33 34 private SpeechManager mSpeechManager; 35 private GCPTTSAdapter mGCPTTSAdapter; 36 37 public MainActivityPresenter() { 38 mVoiceList = new VoiceList(); 39 mVoiceList.addVoiceListener(this); 40 41 mSpeechManager = new SpeechManager(); 42 43 // init GCPTTSAdapter and set default 44 mGCPTTSAdapter = new GCPTTSAdapter(); 45 mSpeechManager.setSpeech(mGCPTTSAdapter); 46 } 47 48 public void exitApp() { 49 if (System.currentTimeMillis() - TOUCH_TIME < WAIT_TIME) { 50 // exit app 51 android.os.Process.killProcess(android.os.Process.myPid()); 52 System.exit(0); 53 } else { 54 TOUCH_TIME = System.currentTimeMillis(); 55 //mView.makeToast("Press back again to Exit", false); 56 } 57 } 58 59 public void onTextToSpeechResult(Context context, int requestCode, int resultCode) { 60 if (requestCode == TEXT_TO_SPEECH_CODE) { 61 if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 62 AndroidTTSAdapter androidTTSAdapter = new AndroidTTSAdapter(context); 63 AndroidVoice androidVoice = new AndroidVoice.Builder() 64 .addLanguage(Locale.ENGLISH) 65 .addPitch(1.0f) 66 .addSpeakingRate(1.0f) 67 .build(); 68 androidTTSAdapter.setAndroidVoice(androidVoice); 69 70 // set the next handler 71 SpeechManager androidTTSManager = new SpeechManager(); 72 androidTTSManager.setSpeech(androidTTSAdapter); 73 mSpeechManager.setSupervisor(androidTTSManager); 74 } else { 75// mView.makeToast("You do not have the text to speech file you have to install", true); 76 Intent installIntent = new Intent(); 77 installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 78// mView.startActivity(installIntent); 79 } 80 } 81 } 82 83 public void initGCPTTSSettings() { 84 mVoiceList.start(); 85 } 86 87 public void initAndroidTTSSetting() { 88 Intent checkIntent = new Intent(); 89 checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 90// mView.startActivityForResult(checkIntent, TEXT_TO_SPEECH_CODE); 91 } 92 93 private void initGCPTTSVoice() { 94 if (mGCPTTSAdapter == null) return; 95 96 Log.d("debug-a", "nullc"); 97 String languageCode = "en=US"; 98 String name = "en-US-Wavenet-A"; 99 float pitch = (float) 0.0; 100 float speakRate = (float) 1.0; 101 102 GCPVoice gcpVoice = new GCPVoice(languageCode, name); 103 AudioConfig audioConfig = new AudioConfig.Builder() 104 .addAudioEncoding(EAudioEncoding.MP3) 105 .addSpeakingRate(speakRate) 106 .addPitch(pitch) 107 .build(); 108 109 mGCPTTSAdapter.setGCPVoice(gcpVoice); 110 mGCPTTSAdapter.setAudioConfig(audioConfig); 111 } 112 113 @Override 114 public void onResponse(String text) { 115 JsonElement jsonElement = new JsonParser().parse(text); 116 if (jsonElement == null || jsonElement.getAsJsonObject() == null || 117 jsonElement.getAsJsonObject().get("voices").getAsJsonArray() == null) { 118 Log.e(TAG, "get error json"); 119 return; 120 } 121 122 JsonObject jsonObject = jsonElement.getAsJsonObject(); 123 JsonArray jsonArray = jsonObject.get("voices").getAsJsonArray(); 124 125 mVoiceCollection = new VoiceCollection(); 126 for (int i = 0; i < jsonArray.size(); i++) { 127 JsonArray jsonArrayLanguage = jsonArray.get(i) 128 .getAsJsonObject().get("languageCodes") 129 .getAsJsonArray(); 130 131 if (jsonArrayLanguage.get(0) != null) { 132 String language = jsonArrayLanguage.get(0).toString().replace("\"", ""); 133 String name = jsonArray.get(i).getAsJsonObject().get("name").toString().replace("\"", ""); 134 String ssmlGender = jsonArray.get(i).getAsJsonObject().get("ssmlGender").toString().replace("\"", ""); 135 ESSMLlVoiceGender essmLlVoiceGender = ESSMLlVoiceGender.convert(ssmlGender); 136 int naturalSampleRateHertz = jsonArray.get(i).getAsJsonObject().get("naturalSampleRateHertz").getAsInt(); 137 138 GCPVoice gcpVoice = new GCPVoice(language, name, essmLlVoiceGender, naturalSampleRateHertz); 139 mVoiceCollection.add(language, gcpVoice); 140 } 141 } 142 } 143 144 @Override 145 public void onFailure(String error) { 146 147 } 148 149 public void startSpeak(String text) { 150 mSpeechManager.stopSpeak(); 151 if (mVoiceCollection == null || mVoiceCollection.size() == 0) { 152// mView.makeToast("Loading Voice Error, please check network or API_KEY.", true); 153 Log.d("debug-a", "nullb"); 154 } else { 155 initGCPTTSVoice(); 156 } 157 158 mSpeechManager.startSpeak(text); 159 } 160 161 public void stopSpeak() { 162 mSpeechManager.stopSpeak(); 163 } 164 165 public void resumeSpeak() { 166 mSpeechManager.resume(); 167 } 168 169 public void pauseSpeak() { 170 mSpeechManager.pause(); 171 } 172 173 public void disposeSpeak() { 174 mSpeechManager.dispose(); 175 mSpeechManager = null; 176 } 177}

Java

1package com.XXX.XXX; 2 3import android.support.v7.app.AppCompatActivity; 4import android.os.Bundle; 5import android.app.AlarmManager; 6import android.app.PendingIntent; 7import android.content.Intent; 8import android.util.Log; 9import android.view.View; 10import android.widget.Button; 11import android.widget.Toast; 12import java.util.Calendar; 13 14import darren.gcptts.model.presenter.MainActivityPresenter; 15 16public class MainActivity extends AppCompatActivity { 17 18 private MainActivityPresenter mPresenter; 19 20 private AlarmManager am; 21 private PendingIntent pending; 22 private int requestCode = 1; 23 24 @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 setContentView(R.layout.activity_main); 28 29 mPresenter = new MainActivityPresenter(); 30 mPresenter.initGCPTTSSettings(); 31 mPresenter.initAndroidTTSSetting(); 32 33 34 Button buttonStart = this.findViewById(R.id.button_start); 35 buttonStart.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 abc(); 39 } 40 }); 41 42 } 43 44 public void abc(){ 45 mPresenter.startSpeak("Hello.World."); 46 } 47 48 @Override 49 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 50 super.onActivityResult(requestCode, resultCode, data); 51 mPresenter.onTextToSpeechResult(this, requestCode, resultCode); 52 } 53 54 public void onBackPressed() { 55 mPresenter.exitApp(); 56 } 57 58}

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

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

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

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

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

guest

回答1

0

実行時に Logcat に何か出ていませんか?
またマニフェストには、以下の権限がありますか?

xml

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

投稿2019/10/15 04:24

kamikaze.cappa

総合スコア558

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

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

uhsi

2019/10/15 07:47

失礼いたしました。追記したように一度は再生できたのですがAPI KEYにキーの制限をしたところ、音声が流れなくなってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問