メッセ音コモン作成 実践編
さらに追記!
ウディタ公式サイトコモン集に
新機能「文字数調節」を追加したバージョンをアップしました!
これで ルビ付きの文章を使った時
ルビも文字数として数えて音が長くなってしまう場合にも対応できます(o^∇^o)
追記!
この記事を読んでくださったnarratologyさんが
コモンをダウンロードしてすぐ使える形にまとめてくださいました!
これを使えば以下の記事を読む必要はありません(^皿^;)
さて メッセージ表示音コモンの作り方・・・おおまかに
1.音を用意
2.声色を設定するコモンを作る
3.メッセージの文字数を数える
4.音を鳴らす
こう書くと簡単ですが 作ってみたらめちゃくちゃ大変でした(T∀T;)
!注意!
このコモンでは通常変数と文字列変数を使っています
同じように作る場合は コマンド内の変数&文字列を
開いている別の変数に変えてください
通常変数 509 メッセ声種類
510 メッセ声早さ
511 メッセ声遅延
512 メッセ声大きさ
513 メッセ声周波数
514 文字数
515 メッセ並列
516 何文字目?
文字列変数 20 メッセ声ファイル名
まず システムBDに音リストを用意
SEリストをコピーして作れば簡単(・´∀`・)
音は 私の場合 読み上げソフト「SOFTALK」で「ぽ」とか「ぼ」を読ませた音を
必要に応じて音声編集ソフトで加工して使ってます
面倒な人は 効果音素材で配布されてるボタン音なんかも使えると思います
次に メッセ前に呼び出すコモンを作製
入力内容の設定
数値1/コモンセルフ0[声種類]
数値2/コモンセルフ1[早さ]
数値3/コモンセルフ2[遅延]
数値1は特殊指定「データベース参照」で音リストDBを参照にしてください
■ウェイト:1 フレーム ■サウンド:メモリ全解放 ■変数操作: V509[メッセ声種類] = CSelf0 [声種類]+ 0 ■変数操作: V510[メッセ声早さ] = CSelf1[早さ] + 0 ■変数操作: V511[メッセ声遅延] = CSelf2[遅延] + 0 ■DB読込(システム): S20[メッセ声ファイル名] = システムDB[ 声リスト : CSelf0[声種類] : ファイル名 ] ■DB読込(システム): V512[メッセ声大きさ] = システムDB[ 声リスト : CSelf0[声種類] : 再生音量[%] ] ■DB読込(システム): V513[メッセ声周波数] = システムDB[ 声リスト : CSelf0[声種類] : 再生周波数[%] ] ■変数操作: V514[文字数] = 0 + 0 ■変数操作: V515[メッセ並列] = 0 + 0
通常変数と文字列変数を使ってるので
同じように作る方は 各々変数の空いている場所に置き換えてください(^ω^;)
次に「X[共]メッセージウィンドウ」の「▼ 表示処理」の後
70行目に以下の命令を追加します
|■条件分岐(変数): 【1】 V510[メッセ声早さ] が -1 と同じ 【2】 V510[メッセ声早さ] が -2 と同じ 【3】 V510[メッセ声早さ] が 0 と同じ |-◇分岐: 【1】 [ V510[メッセ声早さ] が -1 と同じ ]の場合↓ | |■変数操作: V56[★会話S一時] = 25 + 0 | |■変数操作: Sys9:メッセージ速度( X 文字/秒) = 30 + 0 | |■ |-◇分岐: 【2】 [ V510[メッセ声早さ] が -2 と同じ ]の場合↓ | |■変数操作: V56[★会話S一時] = 15 + 0 | |■変数操作: Sys9:メッセージ速度( X 文字/秒) = 25 + 0 | |■ |-◇分岐: 【3】 [ V510[メッセ声早さ] が 0 と同じ ]の場合↓ | |■変数操作: V56[★会話S一時] = 35 + 0 | |■変数操作: Sys9:メッセージ速度( X 文字/秒) = 35 + 0 | |■ |◇分岐終了◇ |■文字列操作:CSelf5[文字数カウントA] = SysS25[[読]文章表示の内容] |■文字列操作:CSelf5[文字数カウントA] += "Q" |■条件分岐(変数): 【1】 V514[文字数] が 0 と同じ |-◇分岐: 【1】 [ V514[文字数] が 0 と同じ ]の場合↓ | |■ループ開始 | | |■文字列操作:CSelf6[文字数カウントB] =<1文字切出> CSelf5[文字数カウントA] | | |■条件分岐(文字): 【1】 CSelf6[文字数カウントB]が "Q" と同じ | | |-◇分岐: 【1】 [ CSelf6[文字数カウントB] "Q" と同じ ]の場合↓ | | | |■条件分岐(変数): 【1】 V515[メッセ並列] が 0 と同じ | | | |-◇分岐: 【1】 [ V515[メッセ並列] が 0 と同じ ]の場合↓ | | | | |■変数操作: V515[メッセ並列] = 1 + 0 | | | | |■ | | | |◇分岐終了◇ | | | |■ループ中断 | | | |■ | | |◇分岐終了◇ | | |■変数操作: V514[文字数] += 1 + 0 | | |■ | |◇ループここまで◇◇ | |■ |◇分岐終了◇
メッセスピードは3段階にしてありますが分岐を増やせば もっと細かく設定できます
入力した数字をそのまま代入すればいいんじゃないの?とお思いかもしれませんが
この後の 音を出す処理でそこまで自由がきかないので
何段階かに分けることをお勧めします(^ω^;)
ここで注意!
この例では 文章中に「Q」があった時点で
文字数を数え終わった、という判定をするように作っているので
メッセージ中に「Q」が使われていると誤作動を起こしてしまいます
なので メッセージにオバQやらGHQやらユリオカ超特Qやらが出てくる場合には
命令の中の「Q」を 他の絶対使わないであろう文字に変えてください(^皿^;)
ちなみに この部分を作るにあたって
こちらのブログを参考にさせていただきました 感謝です☆(人´∀`)
最後に 並列実行で音を鳴らすコモンの作成
起動条件「並列実行」
条件「メッセ並列」を割り当てた変数が「1」「と同じ」にしてください
■変数操作: V516[何文字目?] = 1 + 0 ■変数操作: V514[文字数] /= 3 + 0 ■条件分岐(変数): 【1】 V514[文字数] が 0 と同じ -◇分岐: 【1】 [ V514[文字数] が 0 と同じ ]の場合↓ |■変数操作: V514[文字数] = 1 + 0 |■ ◇分岐終了◇ ■ウェイト:1 フレーム ■ループ開始 |■条件分岐(変数): 【1】 V514[文字数] が 1 以上 |-◇分岐: 【1】 [ V514[文字数] が 1 以上 ]の場合↓ | |■サウンド:SE ファイル[\s[20]] 音 V512[メッセ声大きさ]% 周 V513[メッセ声周波数]% 再生 / 遅延:V511[メッセ声遅延]フレーム | |■条件分岐(変数): 【1】 V510[メッセ声早さ] が 0 と同じ 【2】 V510[メッセ声早さ] が -1 と同じ 【3】 V510[メッセ声早さ] が -2 と同じ | |-◇分岐: 【1】 [ V510[メッセ声早さ] が 0 と同じ ]の場合↓ | | |■条件分岐(変数): 【1】 V514[文字数] が 7 以上 | | |-◇分岐: 【1】 [ V514[文字数] が 7 以上 ]の場合↓ | | | |■条件分岐(変数): 【1】 V516[何文字目?] が 6 と同じ 【2】 V516[何文字目?] が 10 と同じ 【3】 V516[何文字目?] が 18 と同じ | | | |-◇分岐: 【1】 [ V516[何文字目?] が 6 と同じ ]の場合↓ | | | | |■ウェイト:8 フレーム | | | | |■ | | | |-◇分岐: 【2】 [ V516[何文字目?] が 10 と同じ ]の場合↓ | | | | |■ウェイト:12フレーム | | | | |■ | | | |-◇分岐: 【3】 [ V516[何文字目?] が 18 と同じ ]の場合↓ | | | | |■ウェイト:8 フレーム | | | | |■ | | | |-◇上記以外 | | | | |■ウェイト:4 フレーム | | | | |■ | | | |◇分岐終了◇ | | | |■ | | |-◇上記以外 | | | |■ウェイト:4 フレーム | | | |■ | | |◇分岐終了◇ | | |■ | |-◇分岐: 【2】 [ V510[メッセ声早さ] が -1 と同じ ]の場合↓ | | |■条件分岐(変数): 【1】 V514[文字数] が 7 以上 | | |-◇分岐: 【1】 [ V514[文字数] が 7 以上 ]の場合↓ | | | |■条件分岐(変数): 【1】 V516[何文字目?] が 6 と同じ 【2】 V516[何文字目?] が 10 と同じ 【3】 V516[何文字目?] が 18 と同じ | | | |-◇分岐: 【1】 [ V516[何文字目?] が 6 と同じ ]の場合↓ | | | | |■ウェイト:10 フレーム | | | | |■ | | | |-◇分岐: 【2】 [ V516[何文字目?] が 10 と同じ ]の場合↓ | | | | |■ウェイト:14 フレーム | | | | |■ | | | |-◇分岐: 【3】 [ V516[何文字目?] が 18 と同じ ]の場合↓ | | | | |■ウェイト:10 フレーム | | | | |■ | | | |-◇上記以外 | | | | |■ウェイト:8 フレーム | | | | |■ | | | |◇分岐終了◇ | | | |■ | | |-◇上記以外 | | | |■ウェイト:8 フレーム | | | |■ | | |◇分岐終了◇ | | |■ | |-◇分岐: 【3】 [ V510[メッセ声早さ] が -2 と同じ ]の場合↓ | | |■条件分岐(変数): 【1】 V514[文字数] が 7 以上 | | |-◇分岐: 【1】 [ V514[文字数] が 7 以上 ]の場合↓ | | | |■条件分岐(変数): 【1】 V516[何文字目?] が 6 と同じ 【2】 V516[何文字目?] が 10 と同じ 【3】 V516[何文字目?] が 18 と同じ | | | |-◇分岐: 【1】 [ V516[何文字目?] が 6 と同じ ]の場合↓ | | | | |■ウェイト:15 フレーム | | | | |■ | | | |-◇分岐: 【2】 [ V516[何文字目?] が 10 と同じ ]の場合↓ | | | | |■ウェイト:21 フレーム | | | | |■ | | | |-◇分岐: 【3】 [ V516[何文字目?] が 18 と同じ ]の場合↓ | | | | |■ウェイト:15 フレーム | | | | |■ | | | |-◇上記以外 | | | | |■ウェイト:11 フレーム | | | | |■ | | | |◇分岐終了◇ | | | |■ | | |-◇上記以外 | | | |■ウェイト:11 フレーム | | | |■ | | |◇分岐終了◇ | | |■ | |◇分岐終了◇ | |■変数操作: V514[文字数] -= 1 + 0 | |■変数操作: V516[何文字目?] += 1 + 0 | |■条件分岐(変数): 【1】 V514[文字数] が 0 と同じ | |-◇分岐: 【1】 [ V514[文字数] が 0 と同じ ]の場合↓ | | |■変数操作: V514[文字数] = -1 + 0 | | |■変数操作: V515[メッセ並列] = 0 + 0 | | |■ | |◇分岐終了◇ | |■ |◇分岐終了◇ |■ウェイト:1 フレーム |■ ◇ループここまで◇◇
これで メッセ表示の命令の前に
メッセ前に呼び出すコモンを呼びだせば音が鳴る・・・はず・・・
ぶっちゃけ 作った自分でも完全に仕組みを理解しているわけではないので
余計な処理が入ってたらごめんなさい(T∀T;)