UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 Sound Classを使ってみよう2

前回に引き続き、Sound Classについて書いていきます。

今回はSound Classを使用して、

Volumeの管理をやっていきたいと思います。

 

準備

今回もUE4 4.18.2を使用します。

f:id:MozPaca:20180102111644j:plain

 

プロジェクトを作成します。

デフォルトで音が入っているFirst Person Templateを選択し、

Starter Contentsを有りにしておきます。

f:id:MozPaca:20180102112043j:plain

 

作成しました。

f:id:MozPaca:20180102112144j:plain

 

Sound Classを作成する

コンテンツブラウザを右クリックから

Sounds→Sound Classを選択します。

f:id:MozPaca:20180102112225j:plain

 

効果音全体を管理するSound Classを作成します。

f:id:MozPaca:20180102112306j:plain

 

Sound Classの親子付けを行う

作成したSound Classを開き、子Sound Classを作成します。

f:id:MozPaca:20180102112344j:plain

 

銃弾の音を管理するSound Classを作成します。

f:id:MozPaca:20180102112450j:plain

 

このようになったと思います。

f:id:MozPaca:20180102112533j:plain

 

同じ要領で爆発音を管理するSound Classを作成します。

※自分なりの命名規則を無視してますが、気にしないでください。

f:id:MozPaca:20180102112606j:plain

 

Sound CueにSound Classを適応する

First Person→Audioフォルダにある

FirstPersonWeaponTemplateWeapnFire02から

Sound Cueを作成します。

f:id:MozPaca:20180102112845j:plain

 

こんな感じですね。

f:id:MozPaca:20180102113034j:plain

 

作成したSound Cueを開き、Sound Classの

SC_Bulletを設定します。

f:id:MozPaca:20180102113252j:plain

 

次にStarter ContentsのAudioフォルダにあるExplosion_Cueを開きます。

f:id:MozPaca:20180102113345j:plain

 

こちらにはSound ClassのExplosionを設定します。

f:id:MozPaca:20180102113502j:plain

 

パラメータを変更する

それではSound Classのパラメータを変更して、

音がどのように変化するのかを見ていきましょう。

※今回はVolumeのみ変更します。

 Sound Mixで使用するパラメータもあるので機会があれば...

 

仮に親のVolumeパラメータを100にしたとしましょう。

こうすると、子Sound ClassのSC_BulletとExplosionを設定している

Sound CueのVolumeも100になります。

f:id:MozPaca:20180102115013j:plain

 

今度はSC_BulletのVolumeを0.5にしましょう。

子のパラメータを変更したので、SC_Bulletより上のパラメータには

変化がありません。Explosionの方は親のVolume100がまだ入っています。

f:id:MozPaca:20180102115238j:plain

 

子から更に子をつけることもできるので、上手く使ってください。

 

確認してみる

親のパラメータを変更すると、

子を設定しているSound Cueに全てパラメータが渡されているのが

分かると思います。

 

www.youtube.com

子のパラメータを変更しても他の子には影響はありません。

 

例えば、「SEのなっている間はBGMの音量を下げる」や、

「全てのSEの音量を上げたい」といった際に親のClassの

パラメータを変更するだけで処理を完了することが出来ます。

UE4 SoundClassを使ってみよう

 今回はSound Classについて書いていきます。

各種パラメータについては省いていきます

(Radio Filterとか使ったことない)

f:id:MozPaca:20180102094431j:plain

 

Sound Classとは

Sound Classは多数のサウンドアセットに適応することのできる

プロパティの集合体です。

これらを上手く使うことでサウンドのパラメータ調整がかなり楽になります。

 

また、SoundClass同士で親子付けすることも可能であり、

かなり強力な機能です。すげー便利。

 

 

準備

今回のプロジェクトはUE4 4.18.2で作成しています。

f:id:MozPaca:20180102094956j:plain

 

 

SoundClassを作成する

コンテンツブラウザから右クリック

Sounds→Sound Classを選択します。

f:id:MozPaca:20180102095337j:plain

 

適当な名前を付けます。

f:id:MozPaca:20180102095439j:plain

 

SoundClassの中を見てみる

作成したSoundClassをダブルクリックで開くと、

このような画面が出てきます。

f:id:MozPaca:20180102095633j:plain

 

左側には各種パラメータ、右側にはSoundClassの親子関係が

ノードで表示されています。

 

Sound Classをアセットに適応する

まだパラメータも何も変更していませんが、

Sound Classをサウンドアセットに設定しましょう。

 

適当なwaveファイルからSound Cueを作成します。

f:id:MozPaca:20180102101146j:plain

 

作成したSound Cueを開き、Detailsタブの

Sound→Sound Classを設定します。

f:id:MozPaca:20180102101539j:plain

 

先ほど作成したSound Classに変更しておきましょう。

f:id:MozPaca:20180102101723j:plain

 

これでSound Cueの設定は終わりです。

 

Sound Classの親子付けをしてみる

Sound ClassのDetailsタブの下の方にChild Classesというものがあります。

右側の+をクリックし、子SoundClassを追加します。

f:id:MozPaca:20180102095927j:plain

 

SoundClassを作成していない場合や、

新規のSoundClassを追加したい場合は

Create New Asset欄のSound Classを選択して、

新しいSoundClassを作成しましょう。

f:id:MozPaca:20180102100118j:plain

 

子SoundClassを追加すると、右側のノードに子SoundClassが追加されます。

f:id:MozPaca:20180102100335j:plain

 

SoundClass_SE

 |- SoundClass_Explosion

 |- SoundClass_FootStep

 | |- SoundClass_Grass 

みたいな感じで親子付けするといいんじゃないでしょうか。

UE4 Grayちゃんのボイスデータの調整をしました

f:id:MozPaca:20171231025603p:plain

 

Grayちゃんは良い!!

 

先日、GrayちゃんボイスVol.1、Vol.2の.wavデータを編集させていただきました。

www.gray-chan.com

 

セリフ自体の変更などはありませんが、

UE4上で扱いやすくできるようにしました。

 

今回はどの辺をどのように変更したのかを、

細かく書いて行こうと思います。 

 

あくまで趣味でやっていることなので、

私の勘違いなどがある可能性がありますがご了承ください。

 

使用ソフト

フリーソフトの中では定番のAudacityを使用しました。

f:id:MozPaca:20171231030429j:plain

http://old.audacityteam.org/download/?lang=ja

 

機能も(それなりに)多くて使いやすいんですが、

バッチ処理がとても使いにくいです。

 

結局(88ファイル)全て手作業で編集しました。

有償の波形編集ソフトを購入しようかと悩んでます。

 

容量

結論から言うと結構軽くなりました。

 

GrayちゃんボイスVol.1から見ていきます。

Grayちゃんボイス Vol.1が公開中 - Grayちゃん OFFICIAL WEBSITE

52種の.wavファイルが収録されており、

元々のサイズは8.79MBでした。

 

f:id:MozPaca:20171231024838j:plain

 

 編集後は4.85MBまで容量を下げられました。

 

f:id:MozPaca:20171231024848j:plain

 

次にGrayちゃんボイスVol.2です。

Grayちゃんボイス Vol.2が公開中 - Grayちゃん OFFICIAL WEBSITE

通常のボイス24種とシステムボイス11種の

計35種の.wavファイルが収録されています。

 

元々の容量は6.81MBで

 

f:id:MozPaca:20171231024856j:plain

 

編集後は4.21MBになりました。

 

f:id:MozPaca:20171231025008j:plain

 

ブランク

左のブランクは可能な限り切り詰めました。

 

これを

f:id:MozPaca:20171231033149j:plain

こんな感じに

f:id:MozPaca:20171231033201j:plain

 

こうすることでした際に、

ボイスが流れ始めるまでに時間がかかるという問題が解決できました。

 

右ブランクは音が止んでから0.3秒ほど、空白を残しています。

f:id:MozPaca:20171231033442j:plain

 

個人的な趣向と言ったらそれまでなんですが、

再生が終了してプツッと音が切れるのを防いだり、

.wavに直接リバーブなどの処理をかけるときに面倒なことにならないようにしてます。

 

クリックノイズの修正

音声を切り分ける際に入り込んだのだと思いますが、

クリックノイズがありましたので修正しました。

 

ノーマライズ

Grayちゃんボイスは全体的に音量が小さいです。

ゲインなどで上げても良かったのですが、

今回はノーマライズの処理で調節を行いました。

 

変更していない箇所

・セリフ

コレに関しては加工ではどうしようもないのでVol.3を期待しましょう。

 

・周波数、bit数

44100Hz、16bitで変更していません。

元のデータより密度を上げても音質は上がらない上に、

容量も大きくなるので今回は変更しませんでした。

 

・ファイル名

特に変更する必要が無かったので変更しませんでした。

 

・チャンネル数

全て1つ(モノラル)のファイルです。

 

UE4で使用する

再生に関しては(多分)問題ないと思います。

音量が少し大きくしたい、速度を遅くしたいなどはUE4側で

ある程度制御できるのでお試しあれ。

f:id:MozPaca:20171231035908j:plain

 

みんなでGrayちゃんを使おう。

UE4でWebページを作ってみたかった

Unreal Engine 4 (UE4) その2 Advent Calender 2017

参加9日目の記事です。

qiita.com

 

今回は私のやってみたかったことをやった結果になります。

タイトルの通りUE4でWebページが作れるのかを試してみました。

 

結果を先に言うと作れます(軽くはない)

8日の朝に明日は私の番であるということに気がついたので、

バタバタ作ってみました。

その手順を紹介したいと思います。

 

(時間がなかったんだ!!)

 

ではやっていきましょう。

 

準備

今回はUE4 4.18.1を使用しています。

f:id:MozPaca:20171208170534j:plain

 

今回のプロジェクトではHTMLビルドを行います。

UE4起動ボタンのドロップダウンを開き、

オプションを選択します。

f:id:MozPaca:20171208170930j:plain

 

対応プラットフォームにHTML5にチェックが入っていることを

確認してください。

チェックが入っていない場合はHTML5チェックボックス

ONにして適応ボタンを押してください。

f:id:MozPaca:20171208170942j:plain

 

プロジェクトを作成する

では本題に入っていきます。

まずは新規プロジェクトを作成しましょう。

f:id:MozPaca:20171208170913j:plain

 

今回はUMGをメインで使用するので、

Mobile/Tablet、Scalable 3D or 2D、 スターターコンテンツなしで

Blankプロジェクトを作成します。

 

Widgetを作成する

プロジェクトが作成できたら、Widgetを作成していきます。

コンテンツブラウザを右クリック、

User InterfaceWidget Blueprintを選択します。

f:id:MozPaca:20171208173425j:plain

 

名前は適当にWidget_Baseとしました。

※Header、Footer部分になる箇所を分けて作成してもいいかもしれません。

f:id:MozPaca:20171208173631j:plain

 

かなり適当な作り方をしたので、

詳しくは書きませんが、

Webページの見た目となる部分を作成します。

 

Vertical Boxなどを使っていないため、

解像度を変更するとえげつないズレ方をするため、

これを実践する際にはレスポンシブ的な対応をする必要があるかと思います。

f:id:MozPaca:20171208182807j:plain

 

今回はボタンの反応などは入れてません。

 

新規マップを作成する

デフォルトのマップには色々オブジェクトが配置されているので、

新規マップを作成して、何もない空間を作成します。

左上のFile→New Levelを選択します。

f:id:MozPaca:20171208173903j:plain

 

Empty Levelを選択します。

f:id:MozPaca:20171208174455j:plain

 

マップを作成したら保存しておきましょう。

f:id:MozPaca:20171208174533j:plain

 

今回はMap_Indexという名前にしました。

f:id:MozPaca:20171208174629j:plain

 

レベルブループリントを編集する

Map_Indexのレベルブループリントを編集します。

上のBlueprintsタブからOpen Level Blueprintを選択します。

f:id:MozPaca:20171208174756j:plain

 

レベルブループリントでは、このようにWidget

生成/取り付けを行う処理を書きます。

f:id:MozPaca:20171208175342j:plain

 

これでMap_Indexを開くとWidget_Baseが取り付けられます。

 

HTMLファイルの書き出しを行う

処理が大体終わったので、HTMLビルドを行います。

左上のFileからPackage Project→HTML5を選択します。

f:id:MozPaca:20171208175547j:plain

 

書き出されました。

f:id:MozPaca:20171208175814j:plain

 

localhostで起動する

 

f:id:MozPaca:20171208180010j:plain

 

HTML5LaunchHelper.exeを起動すると、

ローカルのサーバーが立ち上がります。

ポートは8000のようです。

f:id:MozPaca:20171208180023j:plain

 

適当なブラウザを開き、localhost:8000のHTMLファイルにアクセスします。

f:id:MozPaca:20171208180230j:plain

 

開きました。

f:id:MozPaca:20171208180404j:plain

 

サーバーにアップして起動する

ローカルホストで確認できたので、今度はサーバーにアップして

確認してみましょう。

 

ファイルのアップにはFileZillaを使用しています。

f:id:MozPaca:20171208180514j:plain

 

サーバーに書き出されたHTML5ファイルごとアップロードします。

いらないファイルも混ざってるかもですが気にしない。

f:id:MozPaca:20171208180754j:plain

 

ブラウザからURLを入力してページを開くと、

localhostと同じように起動しました。

f:id:MozPaca:20171208181108j:plain

 

しっかりとボタンの反応などを組み込めば、

Webページとして活用できるかもしれません。

 

f:id:MozPaca:20171208182209g:plain

 

明日はcom04さんの「ぷちコン与太話-マテリアルゲーム作った話-」です。

個人的にものすごく楽しみにしてます!

UE4 ADX2 LEを使って足音を実装してみよう

前回ADX2 LEの導入記事を書きました。

 

前回↓

mozpaca.hatenablog.com

 

今回はADX2 LEのCri Atom Craft上で編集した

サウンドデータで足音を作成し、UE4で再生してみようと思います。

 

通常、足音などを再生する場合は複数の足音のデータを

Waveファイルとしてインポートし、

Sound Cueでランダムに再生するかと思います。

 

イメージ:

f:id:MozPaca:20171020154302p:plain

...まぁ面倒くさい。

データ容量も大きくなるし、

100種類の足音とかだったらノードも見づらくなります。

 

ベースの足音を用意する

今回は1種類の足音につき1つのWaveファイルで表現します。

とりあえず、何かしらの足音を1つ用意しましょう。

 

フリー素材でも大丈夫ですが、

私は玄関の床を革靴で叩いて収録した音を、

使いやすいように調整した音を用意しました。

f:id:MozPaca:20171020154806j:plain

 

Cri Atom Craftを起動する

用意したWaveファイルをCri Atom Craftで編集していきます。

 

Cri Atom Craftを起動してください。

起動したら、左上のファイルから

プロジェクトファイルを開くを選択し、

前回作成したプロジェクトを開きましょう。

f:id:MozPaca:20171020155615j:plain

 

開きました。

f:id:MozPaca:20171020155510j:plain

 

足音用のフォルダを作成する

今回はフォルダ分けなどを丁寧に行っていきます。

 

マテリアルルートフォルダを右クリックし、

新規オブジェクト→サブフォルダの作成をクリックしてください。

f:id:MozPaca:20171020155949j:plain

 

サブフォルダが出来ました。

このサブフォルダの名前をFootStepに変更します。

f:id:MozPaca:20171020160006j:plain

 

変更したFootStepフォルダに足音のWaveファイルを入れていきましょう。

f:id:MozPaca:20171020160019j:plain

インポートは後で行います。

 

ワークユニットのキューシートフォルダを右クリック

新規オブジェクト→サブキューシートフォルダの作成をクリックしてください。

f:id:MozPaca:20171020160717j:plain

 

作成したサブフォルダにFootStepと名前をつけます。

f:id:MozPaca:20171020160730j:plain

 

FootStepフォルダを右クリック

新規オブジェクト→キューシートの作成をクリックします。

f:id:MozPaca:20171020160740j:plain

 

今回は足音用のキューシートにする予定なので、

Cue Sheet_FootStepと名前を変更します。

f:id:MozPaca:20171020161224j:plain

 

Waveファイルをインポートする

マテリアルルートフォルダに作成したFootStepフォルダに

用意したWaveファイルをドラッグアンドドロップしましょう。

f:id:MozPaca:20171020161557j:plain

 

waveファイルがインポートができたと思います。

f:id:MozPaca:20171020161612j:plain

 

次に作業用のCueSheet_FootStepに

インポートしたWaveファイルをドラッグアンドドロップします。

f:id:MozPaca:20171020161623j:plain

 

CueSheet_FootStepにWaveファイルが追加されました。

f:id:MozPaca:20171020161634j:plain

 

音を編集する

ここから音の編集をしていきます。

読み込んだ音を選択してください。

そしてFX1タブを開きます。

f:id:MozPaca:20171020173711j:plain

 

今回はこのFX1タブの中で音を編集していきます。

f:id:MozPaca:20171020173926j:plain

 

このようにピッチやボリュームの大きさを調節したり、

上にドラッグすることで、ここからここまでという範囲を指定できます。

その範囲の中をランダムで再生します。

f:id:MozPaca:20171020174409g:plain

 

今回はピッチの値をランダムに返してほしいので、

画像のようにしてみました。

f:id:MozPaca:20171020175109j:plain

 

次に減衰設定を行います。

Atom Cueの方を選択してください。

f:id:MozPaca:20171020175149j:plain

 

3Dポジショニングタブを開きます。

減衰距離の最小/最大のパラメータを変更しましょう。

f:id:MozPaca:20171020175240j:plain

 

最小を50.0、最大を3000.0にしました。

ここはUE4で再生しながら確認するといいと思います。

f:id:MozPaca:20171020175422j:plain

 

キューシートをビルドする

編集はこのあたりにして、CueSheet_FootStepを

右クリックからAtomキューシートバイナリのビルドを選択します。

f:id:MozPaca:20171020175628j:plain

 

Cue_Sheet_FootStepにチェックが入っているのを確認して

ビルドボタンをクリックしましょう。

f:id:MozPaca:20171020175821j:plain

 

ビルドしたデータをUE4にインポートする

ビルドしたデータは指定した出力パスにあります。

.acbファイルをUE4にインポートしましょう。

f:id:MozPaca:20171020180016j:plain

 

インポートしました。

f:id:MozPaca:20171020180720j:plain

 

音を再生したいタイミングで

AnimationにNotifyを追加します。

f:id:MozPaca:20171020180744j:plain

 

そしてこのように処理を組み、

インポートした.acbファイルを再生します。

f:id:MozPaca:20171020180826j:plain

 

確認してみる

どうでしょうか?

1つの音声データからUE4上で編集することなく、

ランダムピッチな足音が再生されていると思います。

www.youtube.com

UE4 ADX2 LEを導入する

今回はCRI・ミドルウェアのADX2 LEを

UE4に導入してみたいと思います。

CRI ADX2 LE - CRI Middleware

 

UE4にはSound Cueのような

サウンドの強力な機能があります。

が!もうちょっと機能が欲しいなんてこともあります。

UE4の機能を自作すればいいのでは...

 

ミドルウェアはADX2LE以外にも

WwiseやFMODなどがUE4でよく使われています。

 

Wwise

WwiseのUE4インテグレーションについて - ぼっちプログラマのメモ

 

サウンドミドルウェア【Wwise】と【UnrealEngine4】を連携する - I From Japan Staff Blog

 

FMOD

UE4 + FMOD でインタラクティブなサウンド体験を実現しよう! | rarilog

 

ADX2LEとは

ADX2LEは株式会社CRI・ミドルウェアから販売されている

「ADX2」の無償版です。無償版ですが、機能は製品版と同じです。

有償版との違いは、ほぼ全てのゲームプラットフォームでのゲーム開発に対応していて、

ライセンスにはサポートが含まれています。

無償版を使用し開発したコンテンツ、アプリの配布/販売には制限があります。

詳細は公式ページを確認してください。

 

準備

ここから本題に入ります。

まずはADX2 LE SDKをダウンロードしましょう。

http://www.adx2le.com/download/index.html

 

f:id:MozPaca:20171020115856j:plain

 

ダウンロードしたZipファイルを解凍し、

中に入っている「cri」フォルダを任意のディレクトリに移動してください。

推奨はCドライブのルートディレクトリですが、

私はD:/CRIAtomCraft/cri/という感じで配置しています。

 

UE4プロジェクトを作成する

今回はUE4 4.17.2を使用しています。

f:id:MozPaca:20171020123846j:plain

 

今回はFirst Person テンプレートを使用し、

ADX2LEというプロジェクト名をつけています。

f:id:MozPaca:20171020123913j:plain

 

作成されました。

f:id:MozPaca:20171020124055j:plain

 

ここまで出来たら、

UE4エディタは一旦閉じておきましょう。

 

CRIWARE Pluginを有効にする

エンジン単位でPluginを入れることも出来ますが、

私はプロジェクトごとにPluginを入れる派なので

今回はプロジェクトごとに入れるようにしていきます。

 

まずは、プロジェクトフォルダを開きます。

Epic Games Launcherで作成したプロジェクトを右クリックし、

フォルダを開くを選択します。

f:id:MozPaca:20171020124542j:plain

 

プロジェクトフォルダが開けたら

cri/UE4/Engine/にあるConfigフォルダと、Pluginsフォルダを

f:id:MozPaca:20171020124116j:plain

 

プロジェクトフォルダのルートにドラッグアンドドロップ

もしくはコピーアンドペーストで持って行きます。

f:id:MozPaca:20171020125128j:plain

 

こんな感じにプロジェクトフォルダになったらオッケーです。

f:id:MozPaca:20171020125336j:plain

 

再びUE4エディタを起動しましょう。

 

エディタが起動したら、

左上のEdit→Plugin を選択しましょう。

f:id:MozPaca:20171020125612j:plain

 

MiscタブにCRIWARE Pluginがあるので、

Enabledにチェックをつけ、エディタを再起動します。

f:id:MozPaca:20171020125434j:plain

 

再起動後、PluginタブでCRIWARE Pluginにチェックがついているか確認しましょう。

f:id:MozPaca:20171020125828j:plain

 

ライブラリの初期化を行う

左上のEditからProject Settingsを選択します。

f:id:MozPaca:20171020130237j:plain

 

Plugin/CriWareタブでライブラリの初期化を行うことができます。

自分でパラメータをカスタムしない場合は自動的に初期化されますので、

今回はデフォルトのままで扱います。

f:id:MozPaca:20171020130316j:plain

 

データの読み込みの設定を行う

このPluginはCRI Atom Craft(後述)で作成した

・ACFファイル

・ACBファイル

・AWBファイル

を使用します。

 

この中のAWBファイル(ストリーム再生データ)は

レベルロード時に自動的にメモリにロードされないので、

設定が必要です。今回は省略します。

 

こちらを参照してください。

CRI ADX2 LE マニュアル (for Unreal Engine 4)

 

CRI Atom Craftを起動する

cri/tools/criatomex/にあるCriAtomCraft.exeを起動します。

f:id:MozPaca:20171020120927j:plain

 

左上のファイルからプロジェクトの新規作成を選択します。

f:id:MozPaca:20171020131827j:plain

 

プロジェクト名とプロジェクトのファイルパスを決めて、

新規プロジェクトのボタンをクリックします。

f:id:MozPaca:20171020131904j:plain

 

次にワークユニットの追加をします。

今回はデフォルトのまま追加をクリックします。

f:id:MozPaca:20171020131955j:plain

 

プロジェクトが作成されました。

f:id:MozPaca:20171020132059j:plain

 

左下のマテリアルルートフォルダに使いたいWaveファイルを

ドラッグアンドドロップします。

f:id:MozPaca:20171020141603j:plain

 

これでWaveファイルをCri Atom Craftにインポートすることができました。

f:id:MozPaca:20171020141705j:plain

 

インポートしたWaveファイルをワークユニットのCue Sheetに

ドラッグアンドドロップします。

f:id:MozPaca:20171020141842j:plain

 

これでWaveファイルをCri Atom Craftで編集できるようになりました。

f:id:MozPaca:20171020141936j:plain

 

ここからWaveファイルを編集していくのですが、

今回は導入記事ですので、割愛します。

f:id:MozPaca:20171020142123j:plain

 

Cue Sheet Binaryのビルドをする

Waveファイルを編集したとして、

編集データなどを書き出さなければなりません。

 

まずは、ビルドからAtom キューシートバイナリのビルドをクリックします。

f:id:MozPaca:20171020142435j:plain

 

書き出し先のパスや、ビルドをしたいCue Sheetを選択して、

ビルドボタンをクリックします。

f:id:MozPaca:20171020142651j:plain

 

ビルドが完了すると

指定したパスの中にacbファイルが作成されます。

f:id:MozPaca:20171020142908j:plain

 

UE4にインポートする

UE4のインポートボタンから先程作成した、

acbファイルをインポートします。

f:id:MozPaca:20171020143342j:plain

 

今回はこのファイルですね。

 

f:id:MozPaca:20171020143353j:plain

 

すると、このようにCue Sheetとその中に含まれた、

音のデータがインポートされます。

f:id:MozPaca:20171020143405j:plain

 

UE4上で再生する

インポートされたAtom Cueは通常のSound Cueファイルのように

扱うことができます。

 

レベル上に配置をしたり、

f:id:MozPaca:20171020143825j:plain

 

ブループリントから再生することもできます。

f:id:MozPaca:20171020144018j:plain

 

ここで注意したいのが、

再生ノードの違いについてです。

同じ名前ですが、通常の再生とCri Atom Craftで作成したファイルの再生とで

ノードが違います。

Atomカテゴリーに入っているノードを再生に使用してください。

f:id:MozPaca:20171020144149j:plain

 

 

 

UE4 Sound Cueに自作のノードを追加する その2

前回に引き続き自作ノードを作っていきましょう。

今回から機能をつけていきます。

 

↓前回

mozpaca.hatenablog.com

 

前回はC++クラスを作成し、

Sound Cueにノードを出すところまでやりました。

 

C++を編集する

まずはソース全体を載せておきます。

 

SoundNodeTest.h


// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Sound/SoundNode.h"
#include "SoundNodeTest.generated.h"

UCLASS(hidecategories = Object, editinlinenew, MinimalAPI, meta = (DisplayName = "Volume"))
class USoundNodeTest : public USoundNode
{
	GENERATED_UCLASS_BODY()

	// float パラメータ
	// ボリュームの大きさ
	UPROPERTY(EditAnywhere, Category = Volume, meta=(ClampMin = "0.0"))
	float TestVolume;

	// bool パラメータ
	// ミュートかどうか
	UPROPERTY(EditAnywhere, Category = Volume)
	bool TestIsMute;

	virtual void ParseNodes(FAudioDevice* AudioDevice, const UPTRINT NodeWaveInstanceHash, FActiveSound& ActiveSound, const FSoundParseParameters& ParseParams, TArray<FWaveInstance*>& WaveInstances) override;

#if WITH_EDITOR
	virtual FText GetInputPinName(int32 PinIndex) const override;
#endif

};

 

SoundNodeTest.cpp


// Fill out your copyright notice in the Description page of Project Settings.

#include "Public/Sound/SoundNodeTest.h"
#include "ActiveSound.h"

#define LOCTEXT_NAMESPACE "SoundNodeTest"

/** コンストラクタ */
USoundNodeTest::USoundNodeTest(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
	// パラメータの初期化
	TestVolume = 1.f;
	TestIsMute = false;
}

void USoundNodeTest::ParseNodes(FAudioDevice* AudioDevice, const UPTRINT NodeWaveInstanceHash, FActiveSound& ActiveSound, const FSoundParseParameters& ParseParams, TArray<FWaveInstance*>& WaveInstances)
{
	FSoundParseParameters UpdateParameters = ParseParams;

	if(TestIsMute == true)
	{
		UE_LOG(LogTemp, Log, TEXT("ミュート再生"));
		UpdateParameters.Volume = 0.0f;
	}
	else
	{
		UE_LOG(LogTemp, Log, TEXT("ボリューム : %f"), TestVolume);
		UpdateParameters.Volume = TestVolume;
	}

	Super::ParseNodes(AudioDevice, NodeWaveInstanceHash, ActiveSound, UpdateParameters, WaveInstances);
}

#ifdef WITH_EDITOR
FText USoundNodeTest::GetInputPinName(int32 PinIndex) const
{
	return LOCTEXT("InputPinLabel", "Input");
}
#endif

#undef LOCTEXT_NAMESPACE


 

 

SoundNodeTest.h から細かく見ていきます。

 


UCLASS(hidecategories = Object, editinlinenew, MinimalAPI, meta = (DisplayName = "Volume"))

 

UCLASSに引数を持たせています。

 

hidecategory

HideCategories | Unreal Engine

 

editinlinenew

EditInlineNew | Unreal Engine

 

MiniMalAPI

MinimalAPI | Unreal Engine

 

meta = (DisplayName = "Volume")

※これだけドキュメントが見つからなかった...
簡単に説明すると" "で囲まれた文字列が、

ノードの名前になります。

 

前回まではC++ファイル名がそのままノードに

なっていたので、今回からVolumeという名前にしました。

 

次にこれですね。


GENERATED_UCLASS_BODY()

 

 前回レガシーらしいと言いましたが、


GENERATED_BODY()

では動かなかったので、こちらにしています。

 

まだ違いを確認出来ていないので、

次回にでも説明できればと思います。

 


// float パラメータ
	// ボリュームの大きさ
	UPROPERTY(EditAnywhere, Category = Volume, meta=(ClampMin = "0.0"))
	float TestVolume;

	// bool パラメータ
	// ミュートかどうか
	UPROPERTY(EditAnywhere, Category = Volume)
	bool TestIsMute;

 

ノードに持たせるパラメータの宣言をしています。

UPROPERTYについてはこちらを参考にしてください。

UPROPERTY - Epic Wiki

 

主に、

・編集可能かどうか

・ノードのカテゴリは何か

・数値データの最低値はどこか

を設定しています。 

 

    
virtual void ParseNodes(FAudioDevice* AudioDevice, const UPTRINT NodeWaveInstanceHash, FActiveSound& ActiveSound, const FSoundParseParameters& ParseParams, TArray<FWaveInstance*>& WaveInstances) override;

#if WITH_EDITOR
 virtual FText GetInputPinName(int32 PinIndex) const override;
#endif

 

関数を2つ宣言しています。

 

SoundNodeTest.cppも見ていきましょう。

 

    
/** コンストラクタ */
USoundNodeTest::USoundNodeTest(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
	// パラメータの初期化
	TestVolume = 1.f;
	TestIsMute = false;
}
    

 

コンストラクタです。

各パラメータの初期値をここで設定しています。

 

    
void USoundNodeTest::ParseNodes(FAudioDevice* AudioDevice, const UPTRINT NodeWaveInstanceHash, FActiveSound& ActiveSound, const FSoundParseParameters& ParseParams, TArray<FWaveInstance*>& WaveInstances)
{
	FSoundParseParameters UpdateParameters = ParseParams;

	if(TestIsMute == true)
	{
		UE_LOG(LogTemp, Log, TEXT("ミュート再生"));
		UpdateParameters.Volume = 0.0f;
	}
	else
	{
		UE_LOG(LogTemp, Log, TEXT("ボリューム : %f"), TestVolume);
		UpdateParameters.Volume = TestVolume;
	}

	Super::ParseNodes(AudioDevice, NodeWaveInstanceHash, ActiveSound, UpdateParameters, WaveInstances);
}

 

一つ目の関数です。

ノードが上手く繋がっていれば、ここに入ってきます。

 

ActiveSound.hの中にある構造体

FSoundParseParametersを変数格納し、

引数のParseParamsを代入します。

 

次にTestIsMuteパラメータにチェックが入っているかを確認し、

入っていればVolumeを0にします。

逆に入っていなければ、TestVolumeパラメータの値を代入します。

 

最後にSuper(USoundNodeクラス)のParseNodesを呼び出します。

今回更新しているのは第3引数に渡したUpdateParametersだけですね。 

 

 二つ目の関数です。

 


FText USoundNodeTest::GetInputPinName(int32 PinIndex) const
{
	return LOCTEXT("InputPinLabel", "Input");
}

 

ノードのInput側のピンに名前をつけています。

今回はインプットピンが一つしかないので、

何の意味もありませんが、Inputという名前をつけてみました。

 

 

ひとまずC++はこんなところです。

 

ビルドをしてUE4エディタを立ち上げましょう。

 

Waveファイルをインポートする

特に意味はありませんが、Waveファイルを

格納するためのフォルダを作成しましょう。

 

コンテンツブラウザから右クリック

New Folderを選択します。

f:id:MozPaca:20171017181908j:plain

 

名前はこんな感じにしました。

f:id:MozPaca:20171017181920j:plain

 

作成したフォルダの中に

Waveファイルをインポートします。

f:id:MozPaca:20171017181941j:plain

※魔王魂からダウンロードしました。

 

Sound Cueを編集する

前回作成した「Cue_Test」ファイルを

ダブルクリックで開きます。

f:id:MozPaca:20171017182237j:plain

 

エディタにインポートしたWaveファイルを

ドラッグアンドドロップで持って行きます。

f:id:MozPaca:20171017182316j:plain

 

インポートしたWaveファイルをパラメータとして持つ

Wave Playerノードが出ました。

f:id:MozPaca:20171017182500j:plain

 

次に自作ノードのVolumeを出します。

f:id:MozPaca:20171017183144j:plain

 

そしてこのように繋げましょう。

f:id:MozPaca:20171017183217j:plain

 

完成しました。

 

確認してみる

Volumeのパラメータを変更しながら、

再生してみましょう。

f:id:MozPaca:20171017183350j:plain

 

Volumeが0になるとサウンドがストップするので、

そこだけ注意してください。

 

www.youtube.com