上手くいったようでよかったです!
>こういった事を、親切に教えて頂けるのは知識のない者として大変助かります。
いえいえ。最初はみんなゼロからですからね。大丈夫です。
>またも初歩的な質問で申し訳ないのですが、
>もし可能であれば、追加コードの行ごとにどのような処理を行っているのか
>簡単な内容でも大丈夫ですので、ご教示頂く事はできますでしょうか。
はい、もちろん大丈夫です!
以下、1行ずつ説明します。
const voice = this._modelSetting.getMotionSoundFileName(group, no);
=の右側の処理は、model3.jsonからSound
に設定されたファイルパス(ファイルの置き場所)を取ってくる処理です。
group, no と2つの引数(値)を入れて情報を取ってきます。例えばサンプルモデルのHaru.model3.jsonの場合は
"Motions": {
"Idle": [
{
"File": "motions/haru_g_idle.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5
},
{
"File": "motions/haru_g_m15.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5
}
],
"TapBody": [
{
"File": "motions/haru_g_m26.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "sounds/haru_talk_13.wav"
},
{
"File": "motions/haru_g_m06.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "sounds/haru_Info_14.wav"
},
{
"File": "motions/haru_g_m20.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "sounds/haru_normal_6.wav"
},
{
"File": "motions/haru_g_m09.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "sounds/haru_Info_04.wav"
}
]
},
というmodel3.jsonになっていますが、この場合はgroupに"TapBody", noに0と入れることで、"sound/haru_talk_13.wav"というファイルパスが取ってこれます。
=の左側const voice
はvoiceという名前で変数を定義しています。簡単にいうと値(この場合は音声のファイルパス)に名前を付けているということです。
if (voice.localeCompare(‘’) != 0) {
これは取ってきた音声のファイルパスが空でなかった場合に音声を再生する処理を行うということを表しています。つまり、モーションと音声の紐づけがされていなかった場合はスルーするということです。
let path = voice;
path = this._modelHomeDir + path;
ファイルパスに変換しています。
voice
変数に入れられたファイルパスはあくまでもmodel3.jsonから見た相対的なファイルパスです。なので、プログラム上で認識できるようなファイルパスに変換しています。
(難しかったらすみません。言ってください。)
let audio = new Audio(path);
audio.play()
JavaScriptはAudioという型を使って音声を再生する仕組みを持つようです。
ファイルパスを引数として与えてAudioのインスタンス(説明が難しいですが、Audioという型から具体的なものを作って、それをインスタンスなどと言います。)を作成できます。
そのAudioはplay()という音声を再生させる関数(機能)を持つので、それをaudio.play()
で呼び出している、というわけです。
できるだけ初心者向けということを意識して書いてみましたが、それでも分からないところはあるかもしれません。ググったり、もしくはそれでも分からなければ聞いていただければと思います。