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

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

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

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

Q&A

解決済

3回答

5437閲覧

java tts のサンプルプログラムのエラーが消えない

hyakken

総合スコア7

Java

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

0グッド

0クリップ

投稿2016/08/28 05:15

編集2016/08/28 05:20

###前提・実現したいこと
今、java ttsに取り組んでいます。文字を音声にして読み上げる機能です。実行環境はeclipseです。

###発生している問題・エラーメッセージ
The method speakPlainText(String, null) is undefined for the type SoftSynthesizer
###該当のソースコード

import javax.speech.EngineList; import com.sun.media.sound.SoftSynthesizer; import com.sun.speech.freetts.jsapi.FreeTTSEngineCentral; import java.util.Locale; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.speech.*; import javax.speech.synthesis.*; import java.util.Locale; //import javax.speech.synthesis.SynthesizerMode; //import javax.speech.synthesis.SynthesizerModeDesc; //import javax.speech.synthesis.*; //import javax.speech.synthesis.Synthesizer; public class W60xTts1 { public static void main (String args[]) { try { while (true) { String text; BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); //System.out.print("Enter time (HH:MM): "); System.out.print("Enter text: "); System.out.flush(); text = reader.readLine(); if ((text == null) || (text.length() == 0)) { break; } else { timeToSpeech(text); } } } catch (IOException ioe) { ioe.printStackTrace(); } } public static void timeToSpeech(String text) { //String theTime = TimeUtils.timeToString(time); //if (theTime != null) { if (text != null) { SoftSynthesizer.speakPlainText(text, null); } else { // throw new IllegalArgumentException("Bad time format"); //System.out.println("Bad time format. The format should be HH:MM"); System.out.println("Text is empty."); } } ```###試したこと jarを一通りは追加したのですがいまだにエラーが表示されます。 SoftSynthesizer.speakPlainText(text, null); のspeakPlainTextの部分にエラーメッセージが出てきます。あとそれさえ直せばコンパイルできるはずです。

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

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

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

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

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

swordone

2016/08/28 05:16

コードをマークダウンして下さい。コード部分を選択して<code>というボタンを押すとコードが読みやすくなります。
guest

回答3

0

JDK 8の互換性ガイド

com.sun.media.soundパッケージは、サポート対象外の内部的なパッケージであり、外部アプリケーションから使用されることは想定されていません。

とのことなので別の方法を考えましょう。

これはcom.sunsun から始まるパッケージすべてに言えることです。

投稿2016/08/28 05:27

編集2016/08/28 05:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

クラスメソッドではなくインスタンスメソッドではないでしょうか?

と思ったけどjavadoc見たらメソッドが見当たらなかった・・・。
どこ情報でspeakPlainText()をコールしようとしたのでしょうか。

speakPlainTextで検索したら'speakPlainText(””, null)'を呼び出しているコードが見つかりますが、クラスが違うもののようですし。

http://young.blog.jp.klab.com/archives/19936134.html


上記サイトのコードを見ると、以下のようにインスタンス生成して

java

1Central.registerEngineCentral("com.sun.speech.freetts.jsapi.FreeTTSEngineCentral"); 2Synthesizer synthesizer = Central.createSynthesizer(desc);

以下のようにテキスト読み取り実行しているようです。

java

1synthesizer.speakPlainText(text, null);

CentralとSynthesizerは以下のAPI

FreeTTSEngineCentralは以下のAPI

投稿2016/08/28 05:26

編集2016/08/28 06:13
tkmtmkt

総合スコア1800

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

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

退会済みユーザー

退会済みユーザー

2016/08/28 05:35

多分 Java Speaking API に関連するクラスだとは思うけど。 確証がないのよね
guest

0

エラーメッセージのとおりです。speakPlainTextというメソッドはSoftSynthesizerクラスで定義されていません。

使うべきはこっちじゃないでしょうか?
[BaseSynthesizer#speakPlainText](http://freetts.sourceforge.net/javadoc/com/sun/speech/engine/synthesis/BaseSynthesizer.html#speakPlainText(java.lang.String, javax.speech.synthesis.SpeakableListener))
インスタンスメソッドなので、このクラスの何らかのインスタンスに対して起動する必要があります。
これが抽象クラスなので、実際にはどのクラスをつかうかわかりませんが。

投稿2016/08/28 05:20

編集2016/08/28 05:43
swordone

総合スコア20649

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

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

hyakken

2016/08/28 05:24

エラーの意味は分かるのですがそれが解決できないから困っているのです。
hyakken

2016/08/28 05:26

何かインストールしなければならないのでしょうか。またはコードの書き方自体に問題があるのでしょうか。
swordone

2016/08/28 05:27

そもそもの設計が間違っているのでは?さもなくば使うクラス(インポートしているクラス)を間違えているかだと思うのですが。 存在しないメソッドは何をどうしても使えませんから…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問