UI
Sound
UE4
UnrealEngine
UE4.19.2

UE4でオーディオプレイヤーを制作したときのTips

11.png

本記事では、この記事を書くためにオーディオプレイヤーを制作したときの技術・知見について書いていく。


技術1 VirtualPlaylist


本来

メディアプレイヤーから音楽・動画を再生するときは、「FileMediaSourceにファイルを登録してから、MediaPlaylistにまとめる」とされている。

だが、この方法では、「音楽・動画ファイルを大量に差し替えるとき、手作業で行わなければならず、非常にめんどくさい」という欠点を抱えている。


仮想的にプレイリストを作る

31.png

上図のように、Byte・Mameのマップ一個から成る構造体より生成されたデータテーブルを制作するだけで、

(列名[マップエレメント]= MediaPlaylist・Byte = 曲の順番・Name = ファイルの場所)

32.png

空の仮想プレイリストからでも、通常通りメディアプレイヤーから音楽・動画を再生出来るのである。

この方法では、「音楽・動画ファイルを大量に差し替えるとき、Jsonを編集するだけ」となり、誰でも編集可能でめんどくさくもない。


使用方法


MediaPlaylistの名前が必要な場合

33.png

このようにすれば、列名[マップエレメント]を読み出せる。

34.png


MediaPlaylistを呼び出す場合

35.png

仮想プレイリストの中身を全てクリアしてから、

36.png

データテーブルから仮想プレイリストに追加する。

37.png


MediaPlaylist内にあるMediaの名前が必要な場合

38.png

余計な文字(_XXX)が付いてくるが、それを外せば、メディア本来の名前が得られる。


技術2 プレイヤーに直接サウンドを届ける方法


不正解 : Pawn・CharacterにMediaPlayer(音源)を設置する

この方法だと、空間上に音源が配置されてしまうので、減衰などの設定を全てオフにしていても、定位がハッキリしなくなる。


正解 : PlayerControllerにMediaPlayer(音源)を設置する

この方法だと、空間上に音源が配置される事も無いので、音源からプレイヤーに直接サウンドが伝わり、ハッキリとした定位となる。


Tips1 音声再生における、MediaPlayerの操作の制限


Loop

使用できそうだと思うものの、実際は使用できない。

もしも機能を再現しようとするのなら、以下の方法になるだろう。goto的なアプローチではある


  1. ある曲を再生中、ボタンを押したら、フラグが立つようにしておく。

  2. その曲が終わった時に、フラグが立っているのなら、再度その曲を最初から再生する。


Pause(NativeAudioOut Only)

Directmodeにおいては、Pauseが使用できない

もしも機能を再現しようとするのなら、以下の方法になるだろう。


  1. Reopenなら使用できるので、ボタンを押したら、フラグが立つようにして、再生時間も記憶しておく。

  2. 再生するとき、フラグが立っているのなら、記憶していた再生時間から再生を始める。

しかし、「GetNativeAudioOut」が実質動作しておらず、NativeAudioOutかどうかを判別出来ない。

そのため、NativeAudioOutが可変する条件においては、切り分けられないために、上記の方法は使えない。

現状では、NativeAudioOut時におけるPauseの使用はあきらめるしかないだろう。


Tips2 Widgetの分割について

このウィジェットの3/4は、

21.png

このようなパーツから構成されている

22.png


Blueprintの実装


本体

23.png


  1. 本体上に配置されているパーツのリファレンスを配列にまとめておく。

  2. パーツごとに(配列の順に)インデックスを設定。

  3. このパーツが扱うフィルターのリファレンスを設定。

  4. パーツの(ボーダー)色を設定する。(エディタ上では設定不能)


パーツ側


上部の(赤色の)スイッチが押されたとき

このパーツに関連付けられた(インデックスから分かる)フィルターのPass設定(有効/無効)が切り替わる。

コンボボックス・スライダーが操作されたとき

このパーツが扱うフィルターの設定が変更される。


どれだけの規模になったら、分割を考えるべきか

このように、パーツ化されたウィジェットを扱うには、結構手間がかかるので、やみくもに分割して再利用する方が良いと言うわけでもない。

同じような(機能を共通化できる)パーツが、3箇所以上になった時に考えれば良いだろう。


Tips3 BitCrasherについて


設定変更時の留意点

BitCrasherの設定には、以下の二つのパラメーターが存在する。


  • Crashed Sample Rate

  • Crashed Bits

「Crashed Bits」の値だけを変更した時は、変更が適用されているが、「Crashed Sample Rate」の値だけを変更したときは、変更が適用されていない。

確実にパラメーターの変更を適用させるには、片方の値だけを変更する時でも、両方の値だけを変更する必要がある。


BitCrasherの限界


Crashed Bits : 0~30

「Crashed Bits」の値を32(Bit)としたとき、高音質となるばかりか、逆にノイズが発生してしまった。

32(Bit)から1づつ引いて行って、ノイズが出なくなる値を検証していった結果、30(Bit)にてノイズの発生が収まることが判明した。

ちなみに、0(Bit)でも、何故か再生が可能である。もちろんノイズはひどい


Crashed Sample Rate : 恐らく無限大

前の記事でも書いたが、UnrealEngine4のサウンド周波数の限界は、192000Hzとなっている。

しかし、「Crashed Sample Rate」に384000(HZ)を設定しても、エディターは落ちることなく動作するのである。

おそらく(性能が許す限り)、どんなに高い周波数を設定したとしても、エディターは落ちることは無いだろう。

BitCrasherはReSamplerに改名するべきである


Tips4 Fontについて

フォントのサイズは意外と大きい

今回制作したオーディオプレイヤーの総サイズは7.2MBである。

しかし、たった2個のフォントファイルだけで、1.85MB*2=3.7MB、およそ半分を占めているのだ。

容量が大きいコンソールならまだしも、モバイル・WEBなどでは出来るだけサイズは小さくしたい。

対処法としては、フォントを使いまわすなどして、出来るだけ使用するフォントは絞るほうがいい