LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

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などでは出来るだけサイズは小さくしたい。
対処法としては、フォントを使いまわすなどして、出来るだけ使用するフォントは絞るほうがいい

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2