LoginSignup
1

More than 5 years have passed since last update.

unityroomでADX2を使う

Last updated at Posted at 2019-03-16

はじめに

まず、残念ながら
ADX2LEではUnity WebGL用のデータが作れません。
将来的なTipsとして載せておきます。

ADX2 Unity for WebGLでは使えますが、
使用する場合はライセンスなどの確認が必要です。

ここでは、将来のため人柱的に
Unity1weekで試みた備忘録になります。

環境は

Mac
Unity 2018.3.8f1 (2019-03-16時点での最新)
CRI Atom Craft Ver.3.35.00 (2019-03-16時点での一つ前のバージョン)
Unity for WebGL(2019-03-16時点での最新)
CRIWARE Unity Emscripten Ver.2.30.42

を使用。

データの作成

WebGLターゲットを追加し、
Unity Assetsを出力するようにしてビルド。

image.png

Unityで新規プロジェクト作成

チュートリアル
をみつつ

Unity PluginではAtom WindowからAssetsを選択して
Updateしてデータ更新。

UnityのSwitch TargetでWebGLに切り替えて

AtomPlayerのPlayOnStartをチェックし
Editor上で実行、音が鳴ることを確認。

ビルドしてブラウザで音が鳴ることも確認。

unityroom対応

さて、unityroomへあげてみて音が鳴るだろうか?

音が鳴らない!

image.png

ブラウザで実行中に
cmd+opt+iキーで開発者モードに
エラーが出ているのがわかる。

ACFのロードに失敗している。

unityroomの仕様で、streamingAssetsのファイルを上げることができない
これが原因で音が鳴らない。

これをなんとか解決しないといけない。

ADX2のチュートリアルなどでは、
streamingAseetsにデータが置かれているけれど、
実のところこれ、好きなところからロードできるようです。

参考→ ADX2Web版でありそうな対処

どうやらtextリソースとしてbytes配列で渡す方法があった。

image.png

Resourcesにファイルを移動し、拡張子をbytesに変更。
HierarchyにあるCRIWAREとbgm(CriAtomSource)を無効化。(こちらでロード再生できないので)

空のGameObjectを追加して、
ADX2Loaderなるスクリプトを追加。ここでリソースからもロードと再生をしてみた。

ADX2Loader.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ADX2Loader : MonoBehaviour
{
    CriAtomSource atomSourceSe;
    byte[] raw_dataAcf;
    byte[] raw_dataAcb;
    IEnumerator Start()
    {
        // ----
        // テキストアセットとしてACFを読み込む。tunagary20190316-2.bytesはResourcesフォルダに配置する。
        // ----
        TextAsset text_assetAcf = Resources.Load<TextAsset>("tunagaru20190316-2");
        raw_dataAcf = text_assetAcf.bytes;
        // ----
        // テキストアセットとしてACBを読み込む。CueSheet_0.bytesはResourcesフォルダに配置する。
        // ----
        TextAsset text_assetAcb = Resources.Load<TextAsset>("CueSheet_0");
        raw_dataAcb = text_assetAcb.bytes;
        // ----
        // ACF登録
        // ----
        CriAtomEx.RegisterAcf(raw_dataAcf);

        // ----
        // CriAtomを作成しゲームオブジェクトに追加
        // ----
        this.gameObject.AddComponent<CriAtom>();
        // ----
        // キューシートを追加
        // ----
        var cuesheet = CriAtom.AddCueSheet("CueSheet_0", raw_dataAcb, null);
        // ----
        // キューシートのロード完了まで待つ WebGL版はロードに時間がかかる(ロード前にAtomにアクセスしないようにここで待つ)
        // ----
        while (cuesheet.IsLoading)
        {
            yield return new WaitForEndOfFrame();
        }
        // ----
        // DSPバス設定
        // ----
        CriAtom.AttachDspBusSetting("DspBusSetting_0");



        atomSourceSe = gameObject.AddComponent<CriAtomSource>();
        atomSourceSe.cueSheet = "CueSheet_0"; //キューシート名指定

        atomSourceSe.Play(0); // キューID指定再生
    }
}

Editorで音が鳴るのを確認!

unityroomでも音が鳴るのを確認!

image.png

データにビート同期情報埋め込んだり

image.png

アクションで音止めたり
アクション経由で音を鳴らすことでビート同期させたり
image.png

ビート同期でオブジェクトの大きさ変えたりはこちら
CRIADX2のビート同期を使ってリズムに合わせた演出をつける
を参考に

再生後にコールバックを設定しないとうまくいかないところが注意点。
Editor上だと問題なくても、ブラウザで動かすと再生タイミングによってうまくコールバックが機能しない時があった。
確実に再生されているタイミングでコールバックを登録する。

まとめ

Webならではの対処がいろいろあるけど、
一度鳴ってしまえばあとはPC版と同じはずなのでいろいろできそう。

実際のところ、Web上でのファイル操作などはURL指定だったりするのかもしれない。(Web関連詳しく無いけど、ストレージサービスみたいなのとかでも、上の例みたいなバイナリでロードもできるのでいろいろとできるはず)
なにかの参考になれば幸い。

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