ぱっと思いつく方法としては、
以下のようにとりあえず50音(他)を作り、配列に入れて制御する方法。
(方法はイメージなんて実際使う時は上手いこと調整してください。負荷は無視、動作確認はしていません)
C#
1//音声ファイルの配列
2public AudioClip[] sounds;
3
4//対応表
5private Dictionary<string, AudioClip> soundsDic;
6
7public AudioSource audioSource;
8
9void Start () {
10 //対応表作る(一例)
11 soundsDic = new Dictionary<string, AudioClip>();
12 soundsDic.Add ("あ", sounds [0]);
13 soundsDic.Add ("い", sounds [1]);
14 soundsDic.Add ("う", sounds [2]);
15 soundsDic.Add ("こんにちは", sounds [3]);
16}
17
18IEnumerator Speech (string text) {
19 //一文まるごと対応表にあるか?
20 audioSource.clip = soundsDic [text];
21 //音が存在するなら
22 if (audioSource.clip != null) {
23 //再生
24 audioSource.Play ();
25 //再生終了まで待つ
26 while (audioSource.isPlaying) {
27 yield return null;
28 }
29 }
30
31 //1文字ずつ切り分けて対応表チェック
32 foreach (char item in text) {
33 //対象の音をセット
34 audioSource.clip = soundsDic [item.ToString ()];
35
36 //音が存在するなら
37 if (audioSource.clip != null) {
38 //再生
39 audioSource.Play ();
40 //再生終了まで待つ
41 while (audioSource.isPlaying) {
42 yield return null;
43 }
44 }
45 }
46}
トモダチコレクションはちょっとしか見ていませんが、「棒読みでも構わない!」というなら最小限の音だけ用意すればOKかと。
ちゃんと読み上げたいなら、全部同じ音の高さ・長さだと聞いた時違和感が出るので対応が必要です。
同音異義語(「橋」と「端」など)の為に音の高低付ける(そもそもどう対応表に落とし込むかって問題がありますが)、2文字ずつのチェック追加して「っ(促音)」「ー(長音)」に対処するなど。
この辺をがっつり作り込むなら音や声の知識が必要になってくるので普通はAssetやAPIを使います。
お好きな方法でどうぞ。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/31 12:42
2018/08/01 00:00
2018/08/01 04:21