サンプルプロジェクト
本SDKではsamples
ディレクトリ以下にいくつかのサンプルプロジェクトを同梱しています。
CRI ADX LE for C# をご利用の場合はGithubリポジトリ内のサンプルをご参照ください。
ここでは、各プロジェクトについて説明します。
また、本SDKに同梱しているサンプルプロジェクトで利用しているデータの元プロジェクトは次のページからダウンロード可能です。
SampleExtension
対応ランタイム | netstandard2.1~/Unity2021~ |
本SDKのサンプルでは、各プロジェクトで共通して利用するコードをSampleExtensionとしてまとめています。
以下の機能は将来的にプラグイン機能の一部として組み込まれる可能性がありますが、現在はサンプルコードとして提供しております。
- スレッド移譲を伴うコールバックの購読
RegisterListener
拡張メソッド
- フィルターコールバックの補助
WithCopiedPcm
拡張メソッド
いずれも、SampleExtension内のコードを参照したうえでCriWare
名前空間をusing宣言に追加することで利用可能です。
ConsoleSampleApp
単純なコンソールアプリケーションのサンプルです。
最低限のADXライブラリのセットアップとキュー再生を行います。
対応フレームワーク | net8.0 |
動作確認済みプラットフォーム | Windows/macOS/Linux |
実行方法
CLIでの実行
samples/ConsoleSampleApp
ディレクトリで次のコマンドにより実行できます。
dotnet run
VisualStudioでの実行
dotnet 8 のプロジェクトに対応したVisual Studioでsamples/sample.sln
を開いてください。
ConsoleSampleApp
をスタートアッププロジェクトとして実行可能です。
サンプル内容
ADXを利用して音声を再生するための最低限の処理を行うサンプルです。
Program.cs
内で順に以下の処理を行っています。
- エラーコールバックの登録
- ADXライブラリの初期化
- CriAtomDbasの作成
- ボイスプールの作成
- ACFの登録
- ACBのロード
- CriAtomEXPlayerの作成
- キューを指定して再生
プログラムを実行すると効果音を再生し、次のログが出力されます。
Allocate
FromVirtualToNormal
FromNormalToVirtual
Remove
WpfSampleApp
ADXを利用したWPFアプリケーションのサンプルです。
任意のACBファイルをロードし、その内容を表示/再生します。
対応フレームワーク | net6.0-windows |
動作確認済みプラットフォーム | Windows |
実行方法
dotnet 6 のプロジェクトに対応したVisual Studioでsamples/sample.sln
を開いてください。
WpfSampleApp
をスタートアッププロジェクトとして実行可能です。
サンプル内容
ACBファイルをロードし、CriAtomExAcbクラスからキュー情報を取得します。
また、ACFのロード時にはCriAtomExAcfクラスのAPIを利用してACF内の設定情報を取得/表示します。
[Load File]ボタンでダイアログを開いて任意のACBまたはACFを選択してください。
ウィンドウ中央のキュー一覧からキューを選択時した際には、そのメタデータ表示とキュー再生を行います。
GodotSampleApp
Godot Engine上でCRI ADXを利用するサンプルです。
単純な再生制御と、いくつかのADX機能を利用した再生を行います。
対応フレームワーク | not7.0 net8.0(iOS) |
対応エンジンバージョン | Godot Engine-.NET 4.2~ |
動作確認済みプラットフォーム | Windows/macOS/Android/iOS |
実行方法
プロジェクトをGodotエンジンで開いて実行してください。
samples/GodotSampleApp/project.godot
Godotでの一部プラットフォーム向けビルドでは、SynchronizationContextが駆動しない場合があることを確認しております。
このため、SampleExtensionsに含まれるRegisterListener
などは正常に動作しません。
本サンプルでは、代替手段としてGodot.Callable.CallDeferred
を利用した波形表示を行っています。
CRIWARE向けリソースのエクスポート/ロード
Godotエンジンは独自形式ファイルを直接ビルド成果物に含める仕組みを提供していません。
本サンプルではCRIWARE向けのデータをGodotエンジン独自形式でパッキングされたデータとしてビルド成果物に含めた上で、
ファイルIOの差し替えによってリソースのロードを行っています。
独自形式ファイルのエクスポート
Godotエンジンのデフォルトの挙動では、エンジンが認識する拡張子のファイルのみリソースとしてビルド成果物に含まれます。
ただし、エクスポート設定でリソース以外のファイルをビルド成果物内にパッキングするよう指定可能です。
本サンプルでは、エクスポート設定のリソースタブで「リソース以外のファイル/フォルダーをエクスポートするためにフィルター」に対して次のように設定済みです。
*.acf, *.acb, *.awb
ファイルIOの差し替え
Godot独自形式でパッキングされたデータをロードするには、Godot.FileAccess
クラスを利用する必要があります。
本サンプルでは、CRIWARE内部のファイルIOをGodot向けに差し替えることで、通常通りACF/ACB/AWBのロードを可能にしています。
詳細はCriFsGodotFileAccess.cs
の内容もご参照ください。
サンプル内容
Basec Controlsタブ
リストから選択したキューの再生/停止/ポーズが可能です。
ADX Functionsタブ
ADXが持つ機能のうち、AISAC/ブロック再生/REACT(ダッキング)を利用した再生の例です。
- https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_aisac.html
- https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_sequence_block.html
- https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_react.html
UnitySampleApp
Unity上でADXの機能を利用するサンプルです。
3Dポジショニングを利用したキュー再生を行います。
対応エンジンバージョン | Unity 2021~ |
動作確認済みプラットフォーム | Windows/macOS/Android/iOS/Web |
実行方法
プロジェクトをUnityで開いてください。
samples/UnitySampleApp
次のシーンを開いて実行してください。Assets/SampleScene.unity
サンプル内容
Unity上での3Dポジショニングを利用した音声再生を行います。
このとき、3Dポジショニングによって内部のサウンドレンダラの各チャンネル出力レベルを表示します。
独自データのロード
Unityにおいて独自形式のファイルを取り扱う方法はいくつか挙げられます。
本サンプルでは2通りの方法でロードを行っています。
詳細はSampleAudioPlayer.cs
もご確認ください。
- TextAssetとしてのロード
任意のファイルの拡張子を
.byte
とすることでTextAsset
としてプロジェクトにインポートできます。
- https://docs.unity3d.com/ja/2020.3/ScriptReference/TextAsset.html TextAssetはオリジナルのバイト列をそのまま含むアセットであるため、その内容をオンメモリデータとしてロード可能です。
- StreamingAssetsからのロード
名前を
StreaingAssets
としたフォルダに含まれるファイルは変換など行わずにアプリケーションに含まれます。
- https://docs.unity3d.com/ja/2018.4/Manual/StreamingAssets.html
StreaingAssets内のファイルはランタイムでパスを指定してロードできます。
ただし、Androidデバイスでは一部仕様が異なる点にご注意ください。
3Dポジショニング
3Dポジショニングを行うためにはCriAtomEx3dSourceに対して位置/回転を指定する必要があります。
ただし、引数としてはCriAtomEx.Vectorを取るためUnityEngine.Vector3
等の各エンジン実装の座標は直接指定できません。
本サンプルではCriAtomEx3dSourceやCriAtomEx3dListenerが実装するIPositionableに対して拡張メソッドを用意することで、
Vector3
やTransform
から位置/回転を指定しています。
詳細はCriAtomUnityExtension.cs
もご参照ください。
バスフィルターコールバックの利用
BusFilterCallbackByNameを利用して各チャンネルのレベル表示を行っています。
CRIWAREのコールバックをトリガーとしてゲームエンジンやUIフレームワークのAPIを呼び出す場合、スレッドの移譲を行う必要があります。
本サンプルでは、SampleExtensions
に含まれるRegisterListener
拡張メソッドを利用してスレッドを跨いだ購読を行っています。
スレッドを跨いだ購読では遅延して実際のコールバックが呼び出されるのに対して、フィルターコールバックの引数に与えられるPCMデータは遅延して参照した際に有効なことを保証できません。
そこで、本サンプルではSampleExtensions
に含まれるWithCopiedPcm
拡張メソッドを利用して別スレッドから参照可能なコピーを作っています。
disposable = CriAtomExAsr.BusFilterCallbackByName["MasterOut"].Post.WithCopiedPcm().RegisterListener(data => {
// ~ 中略 ~
});
詳細はSampleChannelsView.cs
も併せてご確認ください。
BlazorSampleApp
ADX/ファイルマジックPROを利用したBlazor WebAssemblyアプリケーションのサンプルです。
対応フレームワーク | net8.0-browser |
実行方法
CLIでの実行
samples/BlazorSampleApp
ディレクトリで次のコマンドにより実行できます。
dotnet run
VisualStudioでの実行
dotnet 8 のプロジェクトに対応したVisual Studioでsamples/sample.sln
を開いてください。
BlazorSampleApp
をスタートアッププロジェクトとして実行可能です。
サンプル内容
それぞれのタブでCRI ADXとCRI FileSystemの機能の利用例を示すサンプルです。
CRI ADX
ADXが持つ機能のうち、AISAC/カテゴリを利用した例です。
- https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_aisac.html
- https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_category.html
CRI FileSystem
パッキングされたCPKファイルの内容を表示する例です。