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

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

ただいまの
回答率

90.50%

  • C#

    7118questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4004questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1294questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • Unity2D

    883questions

文字に対して音声を再生させたい。(テキスト読み上げ)

解決済

回答 2

投稿

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

Yuki_Unity

score 119

例えば、あるstring型の文字列が「あいうえお」だとすれば「あいうえお」と発音するようにしたいです。イメージとしてはトモダチコレクションのような感じです。
Assetやネイティブで読み上げてくれるのもあるのですが、自分で用意した音を使いたいです。
音を作るときは、「あ」「い」「う」...「ん」でいいのでしょうか?それとも高低を作ったほうが良いのでしょうか?
そもそも、上の音声を一つずつ作れたとしてもどのように読み上げさせるのかまったく検討も付きません。
どなたか回答お願いいたします。

・読み上げる音は50音で一つずつでいいのか
・どのように読み上げさせるのか

お願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

ぱっと思いつく方法としては、
以下のようにとりあえず50音(他)を作り、配列に入れて制御する方法。
(方法はイメージなんて実際使う時は上手いこと調整してください。負荷は無視、動作確認はしていません)

//音声ファイルの配列
public AudioClip[] sounds;

//対応表
private Dictionary<string, AudioClip> soundsDic;

public AudioSource audioSource;

void Start () {
    //対応表作る(一例)
    soundsDic = new Dictionary<string, AudioClip>();
    soundsDic.Add ("あ", sounds [0]);
    soundsDic.Add ("い", sounds [1]);
    soundsDic.Add ("う", sounds [2]);
    soundsDic.Add ("こんにちは", sounds [3]);
}

IEnumerator Speech (string text) {
    //一文まるごと対応表にあるか?
    audioSource.clip = soundsDic [text];
    //音が存在するなら
    if (audioSource.clip != null) {
        //再生
        audioSource.Play ();
        //再生終了まで待つ
        while (audioSource.isPlaying) {
            yield return null;
        }
    }

    //1文字ずつ切り分けて対応表チェック
    foreach (char item in text) {
        //対象の音をセット
        audioSource.clip = soundsDic [item.ToString ()];

        //音が存在するなら
        if (audioSource.clip != null) {
            //再生
            audioSource.Play ();
            //再生終了まで待つ
            while (audioSource.isPlaying) {
                yield return null;
            }
        }
    }
}

トモダチコレクションはちょっとしか見ていませんが、「棒読みでも構わない!」というなら最小限の音だけ用意すればOKかと。

ちゃんと読み上げたいなら、全部同じ音の高さ・長さだと聞いた時違和感が出るので対応が必要です。
同音異義語(「橋」と「端」など)の為に音の高低付ける(そもそもどう対応表に落とし込むかって問題がありますが)、2文字ずつのチェック追加して「っ(促音)」「ー(長音)」に対処するなど。
この辺をがっつり作り込むなら音や声の知識が必要になってくるので普通はAssetやAPIを使います。
お好きな方法でどうぞ。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/31 21:42

    回答有り難うございます。
    Dictionaryをまだあまり理解していないのですが、
    「stringの文字列を読み上げる」のstringはsoundsDicのstringでしょうか?

    _______________________________
    もう一つ質問なのですが、
    soundsDic.Add ("こんにちは", sounds [3]);

    例えば、「こんにちは」と言わせたい時は上の一文が必要で、
    「こんばんは」と言わせたい時は soundsDic.Add ("こんばんは", sounds [4]);
    が必要になるということですか?

    お時間があればお返事お待ちしています。

    キャンセル

  • 2018/08/01 09:00

    実際に読み上げたいstringはSpeechに渡します。
    例えば
    StartCoroutine("Speech","あいこん");
    としたら、
    「あ」→soundsDicにあるので鳴る
    「い」→soundsDicにあるので鳴る
    「こ」→soundsDicに無いので鳴らない
    「ん」→soundsDicに無いので鳴らない
    となります。

    "Dictionary = 辞書"
    "辞書に登録されていない内容は無視する(ようにしている)"
    というイメージです。

    >「こんばんは」と言わせたい時は〜
    そうなります。(別途「こ」「ん」「ば」「は」を登録していればそちらが使われますが)

    キャンセル

  • 2018/08/01 13:21

    なるほど!
    わかりやすい説明ありがとうございます!

    キャンセル

-1

「C# テキスト読み上げ」とか、
「unity テキスト読み上げ」とかでぐぐってみればいろいろでてくるようです

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • C#

    7118questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4004questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1294questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

  • Unity2D

    883questions

閲覧数の多いC#の質問