忍者ブログ

背伸びした視点のブログ→SEを奏でる


SEを奏でる  2021 / 07 / 20 ( Tue )

こんばんは。この時期は塩分タブレットが割とガチの生命線ぽりです。


1.今年もこの季節

やってきました。この季節。



今年もWOLF RPGエディターコンテスト、略してウディコンの季節がやってきました。今年もぽりはプレイ側です。もちろんレビューは公開予定なのでお楽しみに。

……ただし昨年ほどの文章量は期待しないでください。マジで歴代ぶっちぎり1位の文章量だった昨年が異常なだけだから。ほんとほんと。


はい。ウディコンの話終わり。実のところ、次のネタが今回の記事のメインです。



2.ウディタ新バージョンで対応した秘密の技術

界隈がウディコンで騒がしい中、ぽりは隠れて謎の技術を公開していました。

【ウディタ2.27】ウディタ新機能を使ってBGM・BGSを使用せずに音楽再生する技術、あの後も少しいじって更に性能を上げたので、前回の雑移植の謝罪も兼ねてリベンジしました pic.twitter.com/QwHdv1gOh2

— ぽり0655 (@pori0655) July 16, 2021

ウディタ最新版2.27に追加された新機能、「SEチャンネル」機能を活用したサンプルです。これを活用すると何が出来るかというと、動画の通りSEだけで音楽再生が出来るようになります。もちろんそれだけでも楽しめそうな機能ですが、一番の特徴は「楽譜データによるリアルタイム演奏なので、曲にリアルタイムでエフェクトを付けられる」こと。「ダンジョンの下の階層へ行けば行くほど音程とテンポが下がっていく」のような技術にも発展できる、応用のしがいがあるテクニックです。

このプログラムは様々な事情により公開する予定がないため、この記事で「どのようにSEチャンネルを使用して音楽再生を実装したか」を説明しようと思います。長くなりそうなので詳細は「続きを読む」から。

あ、そうだ。今回の記事はウディタの技術の他に小学校レベルの音楽技術も必要となります。音楽の教科書片手にこの記事を読んでみてください。





1.単音の音楽再生方法

SEチャンネル音楽再生技術の話をする前に、まずは「SEで音楽を再生するとはどういうこと?」という話をします。

音楽というものはすごくシンプルに言うと「音符の集合体」です。つまり「任意の音符1つ」をSEで表現できれば、あとはその組み合わせをすればいいだけです。

任意の音符1つをSEで再生する方法とは、「指定の時間でSEを停止させる」ことを意味します。



テンポ120のとき、「ドの全音符」を表現するためには、「ド」のSEを120フレーム再生すればいいわけです。これをウディタ的に表現すると、「『ド』のSEを再生し、120フレーム後にSE停止」すればドの全音符をウディタで再現することができます

同じ理屈で「ドの2分音符」を表現するためには「『ド』のSEを再生し、60フレーム後にSE停止」を、「ドの4分音符」を表現するためには「『ド』のSEを再生し、30フレーム後にSE停止」すればOKです。

あとはこの繰り返しによってSEによって音楽を再生することができるようになります。

しかしこの技術には1つの欠点が存在します。「SE停止をすると再生中の全SEが停止してしまうため、2音以上になると狙ったところでSE停止できない」ことです。


2.SEチャンネルによる和音実装

「2音以上になると狙ったところでSE停止できない」という問題を解決する技術、それがウディタ2.27で実装されたSEチャンネルです。

SEチャンネルの本来の機能は「ボイス付きのゲームでSEとボイスを別々に停止できるようにする」というものですが、これを「2音以上の音符を狙ったところでSE停止させる」という使い方で音楽再生に活用します。




ここまでできたら、音楽再生実現まであとちょっとです。
しかし、ここでウディタSE機能の仕様の壁にぶつかります。


3.複数音階をまとめてSEロード処理軽減

ウディタのSEは当然のことですが音楽再生をするために作られていません。その中でも音楽再生に致命的なのは読み込み無しで再生できるSEのファイル数が最大30程度ということ。「ド・レ・ミ・ファ・ソ・ラ・シ・ド」だけで8つ、半音をふくめれば1オクターブだけで12のSEファイルが必要となります。
1曲辺りおおよそ4オクターブ使用すると想定すれば48ファイル、楽器を3つぶん準備すれば144ファイル必要になってしまいます。こうなるとウディタの仕様上必ず演奏中に読み込みが入ってしまい、きれいに音楽再生できません。そもそも144ファイルもSE準備するのは骨が折れます

これを音楽技術とウディタの技術を併用してなんとかします。1オクターブをSEファイル1つだけで賄いましょう




音階と周波数の関係は実はシンプルです。「ド」の音のSEがあった場合、それを周波数112%で再生すると「レ」になります。これによって、広い範囲の音階を1つのSEの周波数変更のみで対応できるようになります。

これによって1オクターブを1ファイルにまとめることで、さっきと同じ条件(4オクターブ3楽器)でも読み込むSEは12まで減らすことができます。これによって最初の読み込みのみで賄えるSEファイル数になりました。何ならもっと楽器増やしても問題なさそうです。



4.楽譜データのファイル形式はMML

ここからはおまけ。
ウディタで音楽再生する技術はこれで完成しました。次に問題になるのは「音楽再生させる楽譜データの形式をどうするか」です。

別にこれはなんでもいいです。ウディタ内での処理のしやすさを考えて、オリジナル楽譜ファイル形式を作り出すのもアリでしょう。

ぽりが採用したのは既存のファイル形式「MML」です。
MMLの詳細はググっていただくとして、ぽりがこのファイル形式を採用した理由は簡単。


ニコニコで採用されているファイル形式なので、聞き慣れた曲のMMLデータが大量にあって動作確認がメチャクチャラクだったから。
(※正確にはニコニコで使われているのは亜種のFlMML)




こんな感じでSEだけで音楽再生する技術が完成しました。ぽり的にこの技術はかなり上手くできたと思っています。なにより作ってて楽しかったので、みなさんももし興味があればぜひチャレンジしてみてください。

拍手

PR

Comment

お名前
タイトル
文字色
URL
コメント
パスワード

プラグイン

サイト移動

メインページへ行く
背伸びした視点の日々
旧ブログへ行く
この視点の日々

ついったー

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

プロフィール

HN:
ぽり0655
年齢:
35
性別:
男性
誕生日:
1989/04/16
自己紹介:
主に日記を書きながら、たまにゲームを作ったり作らなかったり。

最新記事

最新コメント

※ぽりが返信したコメントには、タイトル横にマークが付いています
[05/05 ALA1]
[07/28 MK]
[03/10 拍手したものです]
[12/25 NONAME]
[12/13 拍手したものです]

カテゴリー

ブログ内検索

アーカイブ

RSS

管理者専用