約 1,157,152 件
https://w.atwiki.jp/mtgflavortext/pages/3700.html
Abandoning his sword to return to the lush forest of Pendelhaven, Jacques le Vert devoted his life to protecting the creatures of his homeland. レジェンド 【M TG Wiki】 名前
https://w.atwiki.jp/sanrub/pages/18.html
諸葛孔明 特殊 + ++ 図鑑NO 256 257 258 攻撃力 1690 防御力 970 HP 3600 コスト 24 必殺技 ダメージ 大 消費1 関羽 騎兵 + ++ 図鑑NO 262 263 264 攻撃力 1570 防御力 990 HP 3450 コスト 23 必殺技 特防御ダウン 大 消費1 呂布 騎兵 + ++ 図鑑NO 340 341 342 攻撃力 1800 防御力 920 HP 3750 コスト 25 必殺技 特攻撃ダウン 大 消費1 黄忠 弓兵 + ++ 図鑑NO 517 518 519 攻撃力 1774 防御力 960 HP 3600 コスト 24 必殺技 ダメージ 大 消費1 夏侯惇 歩兵 + ++ 図鑑NO 544 545 546 攻撃力 1750 防御力 1000 HP 3750 コスト 25 必殺技 ダメージ 大 消費1 呂布(女) 騎兵 + ++ 図鑑NO 571 572 573 攻撃力 2180 防御力 1370 HP 4050 コスト 27 必殺技 ダメージ 特大 消費2 司馬師 騎兵 + ++ 図鑑NO 601 602 603 攻撃力 2280 防御力 1470 HP 4050 コスト 27 必殺技 ダメージ 特大 消費2
https://w.atwiki.jp/wiki7_vf5/pages/15.html
レイフェイの略語
https://w.atwiki.jp/soundtasukeai/pages/22.html
adx2leウィキ、adx2le wiki ADX2 LE情報(facebook ADX2ユーザー助け合い所からコピー) 検索にひっかかるようにwikiにADX2LEでのスクリプトのヒント集をwikiにまとめたページになります。 ゲームサウンドを強力にサポートする ADX2LEダウンロードはこちら→ADX2 LE公式サイト ADX2用語集→ADX2用語集 オンラインマニュアル→オンラインマニュアル ADX2UnityPluginオンラインマニュアル→ADX2UnityPluginオンラインマニュアル AtomCraftマニュアル→Craftマニュアル ADX2に限らずゲームサウンドチャット場➡︎ゲームサウンド制作よろず Atom? エディターじゃないよ CRIAtomといってADX2の下で動いているモジュール名 ADX2ポータルはこちら→ADX2ポータル ADX2 LE採用タイトルはこちら→ADX2 LE採用タイトル ADX2Tips→http //criware.info/adx2tips/ なお、ここに書いてある情報はADX2とADX2LE両方の情報になります。一部LEでは未実装な機能もあるかもしれません。(わかる範囲で書いています) Unity向けの場合は一部の機能に制限されている場合があります。(一部のDSP関連のCallback(フィルターやシームレス連結コールバック)など) 目次 目次 トラブルシューティング古いツールで開けない DSPバス設定が今までと違う バスにセンドした音がでない カスタムプラグインに何もでてこない カスタムプラグインの影響でツールが起動しない AtomWindowが開かない うまくアップデートできない MonoDevelopでビルドするとエラー PCでビルドしようとしたらエラー The number of Field exceeds the number of MAX Field.とエラーになる CRI runtime library is not compatible. Confirm the version number. CriWareLeStub.csでエラー [CRIWARE] Error E2010040102 Can not find specified cue name. (Specified cue name is 'Beat1'.) Windows7 Windows8でUnityでエラー?XAudio2がなんとかで音が出ない場合 ACBHnでランタイム時に管理されいてるもの対戦などで、2人が同じキャラを選んだ場合の動作 仮想環境でCRIAtomCraftを動かす時の注意 CRIAtomCraftをAssetsフォルダ以下に配置してはいけない理由 突然爆音になる? 突然音が鳴らなくなった AtomWindowにキューが表示されない 突然エディタが終了する アップデートがうまくいかない ループ再生で音がループしない トラックで音が重なって鳴ってしまう ブロックの再生がまれにずれる ビート同期再生で音が重ならない セレクタを設定したキューを鳴らそうとしても鳴らない シーケンスマーカーいろいろ曲の途中から再生する音にする 曲の途中で終わらせる 曲の開始位置をランダムに再生する音にする AISACいろいろBGMをハイパスエフェクトを通した音にする アクションいろいろ特定キューを止めるキュー キューにつけたAISACを動かすキュー カテゴリにつけたAISACを動かすキュー キューにつけたセレクタを動かすキュー プレーヤーのフェードパラメータを変更するキュー BGMのピッチを下げつつ音を止める 複合技いろいろ「飛ばし」みたいな演出をする 「飛ばし」みたいなのの別回答 「飛ばし」みたいなのの別回答2(ビート頭で飛ばす) サイドチェインコンプ はじめに効果音を作りたい シーンの初期手順 ACFはどこで指定するの? スクリプトはじめADX2LE用の音を鳴らす為のSoundManager.csを作る CriAtomSourceコンポーネントの追加(スクリプトから追加) CriAtomSourceコンポーネントの取得 再生/停止/ポーズ/ポーズ解除 (Unity AtomSourceの関数) スクリプト特殊特殊な再生開始(時間指定して、フェードイン、フェードアウト設定を上書き) (Playerの関数) Pitch/Volume変更 (Unity AtomSourceの関数) Pan変更 (Unity AtomSourceの関数) パンの奥行き感をだす 3Dポジショニング[トラブルシュート]3D Positioningをチェックしても音の位置が変化しない [トラブルシュート]PanTypeを変えても音の位置が変化しない (AtomPlayerの関数) [トラブルシュート]リアスピーカの音がしない AISAC変更 (Unity AtomSourceの関数) カテゴリボリューム変更 (Atomの関数) カテゴリにつけたAISACの変更 (Categoryの関数) バスについて バスセンド(リバーブ量変化等) (Unity AtomSourceの関数) DSPバスのボリューム変更 (Asrの関数) ASRって何? ASRラックって何? スクリプト【状態取得】再生時刻の取得 (Unity AtomSourceの関数) 音楽のタイミングに合わせて何かしたい場合 (Playerの関数) シーケンスの時刻を得る (Playbackの関数) 再生状態の取得 (再生中かどうか) (Unity AtomSourceの関数) 振幅レベルをとりだす(プレーヤーから)(音量チェック、ピークメータ表示、口パク等) (PlayerOutputAnalyzerの関数) 振幅レベルをとりだす(バスから)(音量チェック、ピークメータ表示、口パク等) (Atomの関数) バスの波形フィルターコールバックを使って波形を参照したり直接加工する (AsrBusFilterCbの関数) プレーヤーの波形フィルターコールバックを使って波形を参照したり直接加工する (PlayerFilterCbの関数) ACF情報(カテゴリ、ゲーム変数、AISACコントロール)の取得 (Acfの関数) ACB(キューシート)情報の取得 キュー情報一括取得 (Acbの関数) キュー名とキューID一覧を得る (Acbの関数) キュー情報取得(キュー名指定) (Acbの関数) DSPバス設定のスナップショット切り替え (AsrRackの関数) スクリプト【ブロック再生】再生中のブロックインデックスの取得(ブロック再生)(Playbackの関数) 再生中のブロックインデックスの指定(ブロック再生)(Playbackの関数) 再生開始前にブロックをセットして再生(ブロック再生) (Playerの関数) シーケンスコールバックを得る (Sequencerの関数) スクリプト【ビート同期】BGMのビートを取り出す(ビート同期する処理) レイテンシー音で確認 バッファサイズ(サンプル数)とレイテンシー ADX2で音が遅れる一般的な要因と回避策 オーディオサーバーの周期 処理負荷 【for Unity iOS で遅延を減らしたい】 【for Windowsで遅延を減らしたい】 【ADX2LE iOSで遅延を減らしたい】 音の停止判定は遅い? スクリプト【テクニックアラカルト】サンプルディレイみたいなのはありますか? (Playerの関数) 再生開始位置をずらす XYでAISACを変更する(カオシレータ風) (Playerの関数) iOSなどバックグラウンドになった時にBGMを一時停止/復帰する AtomSourceからCriAtomExPlayerを得る(CriAtomExPlayerを呼び出す改良) AtomSourceからCriAtomExPlayerを初期設定に戻す(リセット) (Playerの関数) シーケンシャルを最初に戻す (Acbの関数) そのほかのリセット的な処理 シークして再生(シーク再生、途中から再生)(Playerの関数) 再生中の音をピッチベンドする (Playbackの関数) Updateで更新されるパラメータについて音が変化しないといった時は、Update系の処理を呼ぶ必要を検討します。 パラメータのセットと、再生のリクエストのタイミングについて もっとなめらかな変化が欲しい場合 AtomExPlayerを使用した再生 (Playerの関数) selectorLabelを設定する (Playerの関数) スクリプト【Unityの物理とかで再生制御】キューブをクリックすると再生/停止をする キューブに触れると再生/停止する スクリプト【初期化、ロード関連】スクリプトでのacbロードと解放の仕方 CRIAtomオブジェクトを用意する より簡単にStreamingAssets以外のパスから読む方法(New) ACFの登録をスクリプトから行う イニシャライザとか別オブジェクトだけど、スクリプトからできない? ADX2LEはApplication.temporaryCachePath等に保存してあるオーディオファイルを再生する・・・的な事は出来ますか? スクリプト【サウンド関連パラメータ変換】MIDIノートNoから音程を設定(0~127 - cent値) MIDIベロシティから音量を設定(0~127 - 0.0~1.0) 周波数からMIDIノートの変換(Hz - MIDINoteNo) (MIDIノート)から周波数の変換(MIDINoteNo - Hz) CRI Pitchから再生速度へ変換(cent値 - 0.0~4.0) BPMから一拍の長さ(msec)に変換 BPMから再生速度に変換 再生速度からCRI Pitchへ変換(0.0~4.0 - cent値) dBからCRI Volumeに変換(-96dB~+6dB - 0.00 ~ 2.00) CRI VolumeからdBに変換(0.00 ~ 2.00 - -96dB~+6dB ) インゲームプレビュー(他のマシンへ接続) PCでオーディオデバイスを切り替える関数 エフェクトパラメーターを直接いじる エフェクトの設定を取得する スクリプトでACFからとれる情報 スクリプトでACBからとれる情報 その他 ADX2Web版でありそうな対処 ご意見はこちら トラブルシューティング 古いツールで開けない CRFATは基本的に新しいツールでデータを作ってしまうと古いツールで開けなくなります。 この場合、最悪目コピーで復元する必要がでてきますが、キューシートの情報であれば、CSVインポートエクスポートが使える場合があります。 DSPバス設定が今までと違う 今までと同じように使いたい場合 1.BUSを8個追加し 2.バスマップのBusMap_Defaultのバス名のところを全て設定する。 3.AISACオートーメーション用バスマップのバス名のところを全て設定する。 バスにセンドした音がでない DSPBusSettingのバスのセンドにMasterOutを追加する。 カスタムプラグインに何もでてこない エフェクトプラグインマネージャーでプラグイン検索パスを追加する カスタムプラグインの影響でツールが起動しない iniファイル C \Users\ユーザ名\AppData\Local\CRIWARE\Adx2\CriAtomCraft\ CriAtomCraft.iniの記述 vstPath=C \\Program Files\\Common Files\\Steinberg\\VST2 を空フォルダにパスに置き換えて回避する AtomWindowが開かない Qiita記事「AtomWindowが開かない」➡︎https //t.co/QLsXLdQSTR うまくアップデートできない UnityEditor上で関連するコンポーネントなどが認識されている状態だとうまくImportができないようです。 ので まず、空のシーンを作る。 Unityを閉じる。 Unityを開いてcriware_unity_plugin.unitypackageをAssetsにドロップしインポートする。 とするとうまくいくはず。 MonoDevelopでビルドするとエラー エラーのでるProjectを右クリックしOptionsを選択、Build GeneralのTargetframework を「Mono/.Net 4.0」を選択する。 ※SolutionリストのAssembly-CSharp_Editorとかの右クリックです。(よくSolutionのOptionをみて項目が無くて焦るので) PCでビルドしようとしたらエラー Assets/Plugins/CriWare/CriHcaDecoder.cs(45,36) error CS0117 `System.IO.File does not contain a definition for `ReadAllBytes がでてるけど? Unity EditorのPlayerSettingがiOSになっていると出ます。(Macで作業したプロジェクトなど) WindowsではiOSがビルドできないため、Unity EditorのPlayerSettingでiOS以外(PCなど)にSwitchPlatformして下さい。 The number of Field exceeds the number of MAX Field.とエラーになる もしくは、 [CRIWARE] Error E2012113003 Invalid parameter. など。 これはデータフォーマットが不正な場合に起こります。ツールとランタイムのバージョンが合っているかどうか確認してください。 (ランタイムが古く、データが新しいフォーマットの場合に起こりやすいです) CRI runtime library is not compatible. Confirm the version number. これもデータの不整合が考えられるのですが、他に、 unity実行後に「criware_unity_plugin.unitypackage」をインポートした場合、 一部のオブジェクトが正しくインポートできない(実行中のファイルの上書きなどに失敗)している可能せがあります。 「criware_unity_plugin.unitypackage」を確実に再インポートするには、 ファイルメニューから、「New Scene」 を選択。 Unityを一度終了する。 Unityを起動する。 「criware_unity_plugin.unitypackage」をダブルクリックしてインポートする。 これで、確実にインポートができます。 Unity側で、一度でもシーンが実行されてしまう(Editor上でも)と、ファイルがロックされてしまうので、 空のシーンにしてから再起動する必要があります。 CriWareLeStub.csでエラー これは、ADX2LEを動かすためのソースです。ADX2プロ版の場合は不要ですので削除してください。 [CRIWARE] Error E2010040102 Can not find specified cue name. (Specified cue name is Beat1 .) これは、キュー名「Beat1」が見つからないというエラーです。正しくacbがロードされていない場合に起こります。 キューが見つからない場合にも起こります。 Windows7 Windows8でUnityでエラー?XAudio2がなんとかで音が出ない場合 これでWindows7 ADX2LE動いた→ DirectX エンド ユーザー ランタイム Web インストーラ という報告があります。 参考→http //watery.dip.jp/slash/archives/2118 なお、最近のバージョンではWASAPIに対応しているため、上記の問題が起こらないかもしれません。 ACBHnでランタイム時に管理されいてるもの ランダムやシーケンシャル、シャッフルなどのキューごとの状態(どのトラックを最後に再生したかなど、再読み込みするとリセットされる。 キューリミット、キューシートキューリミット 関連情報 対戦などで、2人が同じキャラを選んだ場合の動作 例えば、 対戦などで、2人が同じキャラを選んだ場合に、 それぞれ固有のランダムやリミットをしたい場合は、 ACBHnを別にして処理することで、それぞれで個別にできます。 (それぞれでランダムとかなので、同じセリフが連続するといったことも発生します。) 上記とは別に、 似たような機能で、1つのACBでも、サウンドオブジェクトの機能で、影響の範囲(スコープ)を全体か、オブジェクトごとかといった違いをつけるといったこともできます。 (全体で制御したいか、サウンドオブジェクトに関連するプレーヤー単位で制御したいかといった制御、例えば、二人くらいならACBロードでもよいけど、大量にでてくる敵キャラごとに個別にしたいといった場合など) 仮想環境でCRIAtomCraftを動かす時の注意 Macで作業する場合、ParallelsやVMWareなどの仮想環境でAtom Craftを動かす事になる。 このときビルドの出力先は通常のWindowsが認識出来るフォルダに設定する必要がある。 ほとんどの場合デフォルト設定のままで良いのですが、 仮想環境がファイルを同期するような特殊なフォルダの場合正しく出力できない場合があります。 (例:マイドキュメントがMacのドキュメントと共有されている等) ドライブレター(C とか)が含まれるフォルダであれば問題ありません。(\\から始まるパスだとうまくいかない) UnityではMac側で認識可能な共有フォルダを指定すると良い。(稀に共有にラグが発生するので日付など確認するとなお良い) CRIAtomCraftをAssetsフォルダ以下に配置してはいけない理由 Assetsを共有したい目的で、Assetsフォルダ以下にCRIAtomCraftのプロジェクト(.atmcproj)を置くと、 元素材の波形やビルド時に生成されるキャッシュファイルや生成されたcsファイルが多重にUnityに認識されて問題が発生します。 波形や関連ファイルが多いとUnityのロードに時間がかかります。 AtomCraftのファイルはAssetsフォルダの外側(Assetsと同階層または一つ上の階層にAtomCraftフォルダを作ってその中とか) で作成/管理し、生成物(.cs,acb,acf,awb)のみAssetsフォルダ内にコピー(CRI Atom WindowでUpdate)すると良いです。 突然爆音になる? 以下の操作時 コーデックがADXでシーク再生を行う ツールで再生位置を変えてプレビューした 原因として以下のものが考えられます。 ADXでのシーク再生は推奨されません。(ADXの場合、ADPCM的な予測値が不明になるため、無音部分以外のシークは問題が起こる場合があります。) HCAでは問題が起こらないため、ターゲットコンフィグのデフォルトコーデックをADXからHCAなどに変更すると良いです。 他、LEのみの使用では通常起りませんが、ADX2LEではないプロ版のデータを再生しようとした場合にも正しく発音されない場合があります。 爆音については、スピーカやヘッドフォン、耳を痛めてしまう恐れがありますので、ご注意ください。 暗号化のかかったデータの場合なども同様に爆音になる可能性が高いです。 突然音が鳴らなくなった ➡︎プレビュー再生で、「AWBのビルドに失敗しました」となった場合、previewCacheフォルダ内のAWB名のファイル(.awb,.TmpAwb,.oldなど)を削除すると復活する場合があります。 AtomWindowにキューが表示されない ➡︎UnityのCriAtomWindowにキューの情報が表示されていない場合、一度アプリを実行して実行中にGetInfoボタンを押すとリストが得られる。 突然エディタが終了する ➡︎ADX2LEはネイティブプラグインで動作しています。そのため、初期化などが正しく行われていない場合にCri〇〇といった関数にアクセスが行われるとUnityEditorごと落ちてしまいます。 もし、複雑な処理で落ちてしまうような場合、まずCri〇〇の呼び出しをコメントアウトし安定して動作するか確認し、 もしCri〇〇の呼び出しが原因と分かった場合、次にどのタイミングで落ちてしまうかをチェックします。 チェックは地道にコメントアウトを少づつ外して行くといった方法になります。 アップデートがうまくいかない 「CRIWARE Unity Plug-in」をアップデートする場合、プロジェクトを開いた後、まだシーンをロードしていない状態で、新しいカスタムパッケージをインポートしてください。 変更があるファイルのみ上書きされます。 いったんシーンをロードしてしまうと、パッケージのインポートに失敗する場合がありますので注意してください。 発音数が足りない Cri Ware InitializerのStandard Voice Poolの数を増やす あと、VirtualVoice(仮想ボイス)も合わせて増やす。 ストリーム数を増やす場合はFileSystemのストリーム数も増やす。 発音数の確認スクリプト(デバッグ用途) TextVoices.text = string.Format("{0} vocies", CriAtomExVoicePool.GetNumUsedVoices( CriAtomExVoicePool.VoicePoolId.StandardMemory).numUsedVoices + CriAtomExVoicePool.GetNumUsedVoices( CriAtomExVoicePool.VoicePoolId.HcaMxMemory).numUsedVoices); 発音数はボイスプールごとにある。ボイスプールの最大発音数もとれる。 CriAtomExVoicePool.GetNumUsedVoices( CriAtomExVoicePool.VoicePoolId.StandardMemory).numPoolVoices iPhone/Android同時開発で同じビルドデータを使いたい iPhoneとAndroid共有したい場合、Androidで出すといい。 理由は、低遅延再生のためのパラメータパレット設定(Native)がAndroidでのみ出力されるから。 Androidの設定の初期設定では44100でリサンプリングされてしまう。 これを避けるには強制リサンプリングレートフラグをfalseにする。 ただし、気をつける点として、低遅延再生(Native)を使う場合に44100でないとエラーになる。 低遅延再生(Native)を使うとBusエフェクトは効かない。 フィルターも使えない。あくまで、そのまま再生する用として使う。 低遅延再生は、音ゲーなどでのタップ音などにのみ使う。 低遅延再生(Native)はいろいろ制限があるので注意。(Androidの機種やバージョンなどによって発音負荷や動作が異なる) あと、iPhone/Androidはデフォルト設定だとADXコーデックなので、HCAに変更する。 ループ再生で音がループしない ➡︎タイムラインでのループマーカーでは波形の途中に戻るようなループはできません。ループ区間内に波形の出だし部分があるもののみ再度再生されます。 他にマテリアルの設定でループをつけるとサンプルレベルの精度でループが可能です。 他に「自動繰り返し間隔」を指定することでオーバーラップや間を入れてループといったこともできます。 トラックで音が重なって鳴ってしまう ➡︎トラックの設定の「トラックMonoフラグ」をオンにすると、重ならないようになります。 ブロックの再生がまれにずれる ➡︎サーバー周期が低い場合に起こります。サーバー周期をあげることで改善する場合があります。 ビート同期再生で音が重ならない ➡︎ビート同期再生は、次の音へ切り替わるような動作のため、複数の音をリクエストした場合に最後のリクエストした音のみが再生されます。 複数の音を鳴らすキューをアクションで呼び出すなどの工夫が必要です。 セレクタを設定したキューを鳴らそうとしても鳴らない ADX2(LEはまだ)セレクターの設定に「グローバル参照セレクターラベル」というのがあり、これを設定しておくことで、指定したセレクタの音が再生できる。 「グローバル参照セレクターラベル」はプログラムで変更が可能。 キュー固有で特定のラベルを指定したい場合は、キューの「デフォルト参照セレクターラベル」を設定しておく。 こちらを設定した場合、プログラムで「グローバル参照セレクターラベル」を変更しても影響を受けないようにもできる。 シーケンスマーカーいろいろ 曲の途中から再生する音にする 1.キューを作る 2.BGMをキューにドロップしてトラックを作る 3.キューに「シーケンススタート」マーカーを作成する 4.マーカーの位置を適宜ずらす 5.適当にウェーブフォームのエンベロープのアタックなどをいじってフェードインっぽくする 曲の途中で終わらせる 1.キューを作る 2.BGMをキューにドロップしてトラックを作る 3.キューに「シーケンスエンド」マーカーを作成する 4.マーカーの位置を適宜ずらす 5.適当にウェーブフォームのエンベロープのリリースなどをいじってフェードアウトっぽくする 曲の開始位置をランダムに再生する音にする 1.キューを作る 2.BGMをキューにドロップしてトラックを作る 3.キューに「シーケンススタート」マーカーを二つ以上作成する 4.マーカーの位置を適宜ずらす 5.適当にウェーブフォームのエンベロープのアタックなどをいじってフェードインっぽくする シーケンススタートが複数あると、ランダムにどれかから再生されます。 AISACいろいろ BGMをハイパスエフェクトを通した音にする 1.キューを作る 2.BGMをキューにドロップしてトラックを作る 3.トラックにAISACを追加し、「バンドパスフィルター-低域」を作る。 4.AISACのカーブを右肩上がりにする。 5.AISACを動かすとハイパスになる。 下記にあるアクションでAISACを動かしたり、REACTでAISACを動かしたりすることができる。 アクションいろいろ 特定キューを止めるキュー キューをリクエストすると、再生中の特定のキューのみを停止するキューの作り方 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーに止めたいキューをドロップ 4.アクショントラックに「停止」アクションを追加する。 キューにつけたAISACを動かすキュー キューをリクエストすると、AISACを一定時間かけて変更するキュー 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにAISACを動かしたいキューをドロップ 4.アクショントラックに「再生パラメータアクション」アクションを追加する。 5.「パラメータ変更」アクションのタイプをAISAC0、変更値、変更時間を設定する カテゴリにつけたAISACを動かすキュー キューをリクエストすると、カテゴリにつけたAISACを一定時間かけて変更するキュー 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにカテゴリをドロップ 4.アクショントラックに「再生パラメータアクション」アクションを追加する。 5.「再生パラメータタイプ」をAISACコントロール0、目標パラメータ値、目標への速度を設定する キューにつけたセレクタを動かすキュー キューをリクエストすると、特定のキューのセレクタを変更するキュー 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにキューをドロップ 4.アクショントラックに「セットセレクタラベル」アクションを追加する。 5.「セレクタラベル」を設定する プレーヤーのフェードパラメータを変更するキュー 1.キューを作る 2.プレーヤーアクショントラックを作る 3.プレーヤーアクショントラックに「プレーヤーフェーダー」アクションを追加する。 4.「フェードイン時間」「フェードアウト時間」「カーブタイプ」を設定する なお、フェーダーは別途、ランタイムでつけておく必要がある。 BGMのピッチを下げつつ音を止める 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにカテゴリをドロップ 4.アクショントラックに「再生パラメータアクション」アクションを追加する。 5.「再生パラメータタイプ」をピッチ、目標パラメータ値を-1200、目標への速度1.0を設定する 6.「停止」アクションを追加する。 複合技いろいろ 「飛ばし」みたいな演出をする 1.DSPバス設定にバスを追加する(飛ばし用のバス) 2.バスにエフェクト(リバーブ)をつける。 3.バスのセンド先をMainにつなぐ 4.バスマップで、飛ばし用バスを追加する 5.BGMのキューを作る 6.BGMのキューの飛ばし用バスを最大出力にする これで、エフェクトのかかった音が準備できたので、今度はこれらをコントロールキューを作る 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにBGMキューをドロップ 4.アクショントラックに「再生パラメータアクション」アクションを追加する。 5.「再生パラメータタイプ」をバスセンド(飛ばし)、目標パラメータ値を0、目標への速度10.0を設定する 6.「再生」アクションを追加する。 これで、エフェクトが抑えられた状態でBGMが鳴らせる。 次に飛ばしつつ止めるキューを作る 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにBGMキューをドロップ 4.アクショントラックに「再生パラメータアクション」アクションを追加する。 5.「再生パラメータタイプ」をバスセンド(飛ばし)、目標パラメータ値を1、目標への速度10.0を設定する 6.「停止」アクションを追加し、適宜後ろへずらす。(止まるまで少し時間かかる分の音だけエフェクトへ飛ばす) 「飛ばし」みたいなのの別回答 1.通常の音楽と、 その音楽にめっちゃリバーブのかかった音を用意する。 2.トラックにそれぞれ音を追加する これで、両方が同時に鳴っているキューができる。 次にこれを制御するキューを用意する。まずドライ音用キュー 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにBGMキューをドロップ 4.アクショントラックに「ミュートアクション」を追加する。 5.「トラックインデックス」を0、ミュート状態を「ミュート解除」 6.アクショントラックに「ミュートアクション」を追加する。 7.「トラックインデックス」を1、ミュート状態を「ミュート」 次にWet音用キュー 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにBGMキューをドロップ 4.アクショントラックに「ミュートアクション」を追加する。 5.「トラックインデックス」を0、ミュート状態を「ミュート」 6.アクショントラックに「ミュートアクション」を追加する。 7.「トラックインデックス」を1、ミュート状態を「ミュート解除」 メリットとしては、DSPエフェクト使わずお気に入りのかかった音を用意できる。 デメリットとしては2音常に再生し続けている状態になっている。 「飛ばし」みたいなのの別回答2(ビート頭で飛ばす) 1.通常の音楽と、 その音楽にめっちゃリバーブのかかった音を用意する。 2.トラックにそれぞれ音を追加する 1.セレクタによるトラック遷移キューを作る 2.トラックを2つ用意し、それぞれ波形を配置 3.セレクタを用意する。セレクタラベルを2つ用意する 4.トラックにセレクタラベルをセットする。 5.「ビート同期マーカー」を追加する(適宜BPMを設定する) 次にセレクタを切り替えるキューを用意する 1.キューを作る 2.アクショントラックを作る 3.アクショントラックのトラックヘッダーにBGMキューをドロップ 4.アクショントラックに「セットセレクタラベル」を追加する。 5.「セレクタラベル」をセットする これをトラックの数用意する。 (止める場合は、「停止」のアクションも追加する) これの良いところは、発音数が1で、クロスフェードする瞬間だけ2音になる。(すごく少ない発音数で済む)且つ、サンプルレベルで同期している。 さらに、 全体の尺が同じであれば、BPM違いのBGMを用意することもできる。 (トラックにBPM設定をする) サイドチェインコンプ DSPバス設定に「振幅解析機」と「コンプレッサー」を用意して、声とかバスドラ(?)を聞こえやすくするような効果を作る。 1.バスを用意、トリガーとなるバス、影響を受けるバス(BGMとか) 2.トリガーのバスに「振幅解析機」をつける 3.受けるバス(BGMとか)に「コンプレッサー」(こちらはセンド先をMasterOutにする) 4.バスマップを用意する(トリガー、BGMなど) トリガーのキューの設定 5.キューで、トリガーバスを指定し1.0をバスセンドしておく。 BGMのキューの設定 5.キューで、BGMバスを指定を指定し1.0をバスセンドしておく。MasterOutは0にする。 BGM再生中に、トリガーのキューを鳴らすとBGMにコンプがかかる。 はじめに 効果音を作りたい スライドの33ページから「爆発音」「レーザー音」「サイレン音」など作ってみましょう。 ↑チップチューン風の音が作れます。 ツールの基本的な使い方動画 シーンの初期手順 UnityでPluginをインストールした後に以下の手順でシーンに最低限必要なオブジェクトを作成します。 ①「CRI」メニューからCreate CRIWARE Libraly Initializerを選択し、ADX2システム初期化の為のオブジェクトをシーンに追加する。 ②「CRI」メニューからCreate CRIWARE Error Handlerを選択し、エラーハンドラをシーン追加 ③「CRI」メニューからOpen CRI Atom Window ...でCRIウィンドウを開きそのウィンドウ内の Select Assets Rootボタンで[Atom Craftの出力したAssetsフォルダ]を指定します。 Update Assets of "CRI Atom Craft"ボタンでACF,ACBを更新します。 この手順でツール「CRI Atom Craft」で作ったデータを更新する事ができます。 AtomCraftの(cs,acf,acb,awb)ファイルが正しく認識できたら ④「CRI Atom Window」の「CreateGameObject」ボタンを押してAtomSourceのついたオブジェクトを作成します。 この時、同時にCRIWAREオブジェクトが生成されます。 生成されたオブジェクトの「Play on Start」をチェックし再生確認をする。 ACFはどこで指定するの? CriWareInitializerのInitialize Atomの項目にあるACF File Nameに NewProject.acfといった名前で設定します。 または CRIWAREのCRI Atom(Script)で設定します。 CriAtomスクリプトにもACF Fileの項目がありますが、こちらは特に指定しなくても問題ありません。 逆に両方指定してしまうと2回初期化しようとしてエラーが発生します。 スクリプトはじめ ADX2LE用の音を鳴らす為のSoundManager.csを作る ①シーンに空のGameObjectを生成し、SoundManagerと名前をつける。 ②プロジェクトにC#スクリプトを作成し、SoundManager.csと名前をつける。 ③ ①で作ったオブジェクトに②で作ったcsをドロップし、コンポーネントとしてくっつける。 あとはこのcs内でAtomSouceを生成しても良いし、くっつけたコンポーネントを操作するも良い。 AtomSourceのスクリプトでの作り方は次に書いてある。 CriAtomSourceコンポーネントの追加(スクリプトから追加) atomSourceSe = gameObject.AddComponent CriAtomSource (); atomSourceSe.cueSheet = cueSheetName; //キューシート名指定 AtomSourceコンポーネントをスクリプトで作りたい場合はStart()内などに上記のスクリプトで追加すると、 実行時にCriAtomSourceが追加されます。 複数のAtomSourceをつけたい場合など上記のようなやり方もできるという例になります。 CriAtomSourceコンポーネントの取得 atomSourceSe = gameObject.GetComponent CriAtomSource (); ゲームオブジェクトにくっついてるAtomSourceコンポーネントを取得します。 スクリプトで制御したい時にこれを使って取り出す。 再生/停止/ポーズ/ポーズ解除 (Unity AtomSourceの関数) atomSourceSe.Play(4); // キューID指定再生 atomSourceSe.Play(“orchehit”); //キュー名指定再生 atomSourceSe.Stop(); atomSourceSe.Pause(true); atomSourceSe.Pause(false); 再生関数には、番号(ID)指定と名前(ラベル)指定の二種類があり、どちらでも好みのものを利用できます。 スクリプト特殊 特殊な再生開始(時間指定して、フェードイン、フェードアウト設定を上書き) (Playerの関数) atomsourceSelect.startTime = 30*1000; //30秒目から atomsourceSelect.Player.SetEnvelopeAttackTime(2000f); //2秒フェードイン atomsourceSelect.Player.SetEnvelopeReleaseTime(2000f); //2秒フェードアウト atomsourceSelect.Play(); //再生 Pitch/Volume変更 (Unity AtomSourceの関数) atomSourceSe.pitch = 100; // cent(100で半音) atomSourceSe.volume = 1.0f; // 1.0で原音と同じ振幅レベル 【即時反映】 ピッチやボリュームは変更したらすぐに反映します。 これは、同じatomSouceSeで複数の音を再生している場合、全ての音に反映します。 再生中の音に反映させたくない場合はピッチベンドの項目を参考にしてみてください。 Pan変更 (Unity AtomSourceの関数) パンは360度のパンになっており、ITU5.1chに合わせ LRの角度は30度、サラウンド(後ろ側)は120度の範囲で指定します。 atomSourceSe.pan3dAngle = -30; // Lスピーカから再生 2Dゲームであれば、-30~+30の範囲をL~Rとみなして操作することができます。 なお、後ろ側へパンをした場合、音が消えてしまうタイプと、ダウンミックス(4ch- 2chにダウンしてミックスされる)が行われる 場合があり、ハードウェアやプラットフォームに依存します。 (ダウンミックスされる場合は-3dBほど下がってフロントスピーカへ出力される。) パンの奥行き感をだす pan3dDistanceは初期値は1.0で 値が小さくなると他のスピーカから漏れていくようになり、0.0で完全に定位がなくなります。 1.0がスピーカの配置の円周上、0.0が全スピーカの中央となります。 atomSourceSe.pan3dAngle = 0.80; // 若干音像がぼやける (ステレオだと中央に寄る) 例えば、 画面の手前にいるキャラクタはしっかりと音の定位を動かし、遠い側にいるキャラは0.5くらいにして定位をぼかすといったことができます。 画面構成によってはまったく別パターンもあり ある距離無いは定位をぼかし、ある距離が一番定位がしっかりし、さらに遠くは音量が下がりつつまたぼかすといった形になります。 (カメラのフォーカス、マイクのフォーカスなどのイメージになり、画角が広い、狭い、望遠か近距離かなどでも演出方法が変わります) また、ゆっくりと音が頭上を通り抜ける場合(対角線上のスピーカへの移動)などにもこのパラメータを使うことで、スピーカ感の音のジャンプを防ぐことができます。 他にも、メニュー画面に遷移した時に0.0にしてモノラル風にし、ゲーム開始で1.0に変化させることで、 空間の広がり感の変化のメリハリをつけるといった効果も考えられます。 単純に音源までの距離とは違う場合があります。例えば、音源の大きさで考えることもあります。 大きな噴水の近くでは音像がつつまれる感じになるため0.0に近くなり、蚊や蜂などが30cm以内で飛ぶような音の表現は1.0になります。 3Dポジショニング 3Dポジショニングは毎フレームアップデートしつつ、CRI ListenerとのCRI SoundSourceの位置関係から音の定位をします。 さらに、距離減衰やドップラー、音源コーンなどの効果をもたせることができます。 トレードオフとして演算量や設定の手間が増えますが、距離AISACなどと組み合わせることで、自動化しつつ音の変化の表現を豊かにすることも可能です。 例えば、サラウンド側にまわった音はAISACでローパスフィルタの周波数をさげるなど。 注目させたい、ここぞという音につけていくのが効果的です。 [トラブルシュート]3D Positioningをチェックしても音の位置が変化しない AtomCraft側で [ウェーブフォームのPanTypeをオート] [キューの距離減衰を設定] にする必要がある [トラブルシュート]PanTypeを変えても音の位置が変化しない (AtomPlayerの関数) atomPlayer = new CriAtomExPlayer(); // AtomExPlayer()作成 atom3dSource = new CriAtomEx3dSource(); atomPlayer.SetPanType(CriAtomEx.PanType.Pos3d); atomPlayer.SetCue(null,"synth"); atomPlayer.Set3dSource(atom3dSource); atomPlayer.Set3dListener(CriAtomListener.instance.internalListener);//リスナーもセット void Update () { atom3dSource.SetPosition(this.transform.position.x,this.transform.position.y,this.transform.position.z); atom3dSource.Update(); } [トラブルシュート]リアスピーカの音がしない 正確には、iPhoneなど2ch出力の機種で、サラウンド側にある音が聞こえない場合の対処です。 マトリクスのエフェクトをつかってスピーカ出力のルーティングを変えることで、フロントへまわします。 これだと音量が1.5倍になるからヘッドルーム(音量の最大に達しないように音量を小さくし余裕をもつ事)を多めにしておく必要あり 他にも前後で音の質感を変えたい場合などにもマトリクスを使う方法もあります。 サンプルソース ADX2LE3DPosTest AISAC変更 (Unity AtomSourceの関数) atomSourceSe.SetAisac(aisac_id,value);//AISACコントロールID指定 atomSourceSe.SetAisac(“Any”,value); //AISACコントロール名指定 AISACはゲームの状況を音に影響させたい場合に使います。ピッチやボリューム変更と同じようなコントロール値という0.0~1.0の値で、ツールで作成したAISAC変化をプログラムから呼び出す事ができます。 持続音などの変化(エンジン音)やBGM、環境音に対するフィルター処理など様々な用途に使う事ができます。 カテゴリボリューム変更 (Atomの関数) CriAtom.SetCategoryVolume("BGM",bgmVolume); カテゴリはツールでキューに設定しておくことができます。 キューに適切にカテゴリを設定することで、ゲーム中のサウンドコンフィグとして使う事ができます。 カテゴリとは、BGM、SE、Voice、Ambientなど大まかな分け方と CutScene、MainChara、SubChara、Enemy、Weaponなどの分類 System、InGame、UI、Areaなど Shoot,Throw,Explosionなど 一つのキュー(音定義)に対して複数のカテゴリを持たせる事ができます。(タグのようなイメージ) カテゴリにつけたAISACの変更 (Categoryの関数) CriAtomExCategory.SetAisac(0,0,0); //カテゴリID 0のAISACControlID0にAISAC値0をセット CriAtomExCategory.SetAisac(1,0,0); //カテゴリID 1のAISACControlID0にAISAC値0をセット CriAtomExCategory.SetAisac(2,0,0); //カテゴリID 2のAISACControlID0にAISAC値0をセット CriAtomExCategory.SetAisac(3,0,0); //カテゴリID 3のAISACControlID0にAISAC値0をセット バスについて 最近バスの仕様が変更になって、AtomCraftでバスを追加しないとうまく動かないかもしれない。気をつけて。 バスセンド(リバーブ量変化等) (Unity AtomSourceの関数) これは個々のプレーヤーせ再生するキューのバスセンド量を調節する場合に使用します。 float depth = 1.0f; int busNo = 1; //reverb atomSourceSe.SetBusSendLevelOffset(busNo,depth); センドエフェクトは比較的重いDSP処理を行う目的で使用します。上記の関数はデータ設定に対して加算します。 トンネルに入った時にdepthを大きくするという使い方ができます。 ツールで他のバス(バスは0~7まで)にエフェクトを追加しておく事で、音に変化を与える事ができます。 【応用的な使い方】 バスセンドを動的に変えて、一部の音の振幅レベルだけを取り出す DSPバスのボリューム変更 (Asrの関数) これは、DSPバス設定のバスのボリュームを変更する場合に使用します。 void CRIAPI criAtomExAsr_SetBusVolume(CriSint32 bus_no, CriFloat32 volume ) ASRって何? AtomSoundRendererの略 サウンドのレンダリングを主に行う。 ASRラックって何? AtomSoundRendererはミキサーを持っていて、それの収まっているラック(入れ物)のこと。 スクリプト【状態取得】 再生時刻の取得 (Unity AtomSourceの関数) GUILayout.Label(atomSourceBgm.time.ToString()); 上記のはOnGUI()なっで呼ぶと再生時刻を表示します。 音楽のタイミングに合わせて何かしたい場合 (Playerの関数) より厳密に時刻を撮りたい場合、GetTimeSyncedWithAudioを使うと、上記のTimeよりも正確に時間がとれます。 例えば、ポーズ、ポーズ解除や、iOSなどスプリングボードに出入りするなど、サウンドのタイミングが乱される場合があります。(時刻取得がフレームスキップするなど) この関数は、サウンドの再生サンプル数から時刻を返すため極めて正確な時刻を得られます。 反面、ピッチを変えられません。また、内部処理の都合で同一フレームで度々呼ぶようなコードにしないことをお勧めします。(負荷がかかる) GetTimeSyncedWithAudioを使うには、対応したCriAtomExPlayerを用意し、再生する必要があります。 CriAtomExPlayer(bool enableAudioSyncedTimer) サンプル数を基準とするため、ピッチの変更ができません。 また、波形再生に依存するため、波形が存在しない区間のあるシーケンスでは正しく時刻をとれません。 音ゲーなど、必ず鳴り続けてる音があるものにピンポイントで使用するような感じになります。 シーケンスの時刻を得る (Playbackの関数) GetSequencePositionを使うとシーケンスの時刻を得ることができます。 シーケンスループやブロック再生、シーケンス再生レートの影響を受けた時刻が得られるため、ブロックの再生位置監視などに使うことができます。 再生状態の取得 (再生中かどうか) (Unity AtomSourceの関数) CriAtomSource.Status status = atomSourceBgm.status; if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) {//停止かエンドか this.playbackBGM = atomSourceBgm.Play(100); } 上記の例では停止かエンド時に再度トリガーします。 振幅レベルをとりだす(プレーヤーから)(音量チェック、ピークメータ表示、口パク等) (PlayerOutputAnalyzerの関数) CriAtomSource atomSource; //プレーヤー出力の解析 CriAtomExPlayerOutputAnalyzer criAtomExPlayerOutputAnalyzer; void Start () { atomSource = this.gameObject.AddComponent CriAtomSource (); // 解析モジュールの作成 CriAtomExPlayerOutputAnalyzer.Type[] type = new CriAtomExPlayerOutputAnalyzer.Type[1]; type[0] = CriAtomExPlayerOutputAnalyzer.Type.LevelMeter; // コンフィグでバンド数を指定 CriAtomExPlayerOutputAnalyzer.Config[] config = new CriAtomExPlayerOutputAnalyzer.Config[1]; config[0] = new CriAtomExPlayerOutputAnalyzer.Config(); // 出力データ解析モジュールを作成 criAtomExPlayerOutputAnalyzer = new CriAtomExPlayerOutputAnalyzer(type, config); //ソースに解析をアタッチ atomSource.AttachToAnalyzer(criAtomExPlayerOutputAnalyzer); } void Update () { Debug.Log("Player Level " + criAtomExPlayerOutputAnalyzer.GetRms(0).ToString()); } void OnDestroy() { //ソースに解析をデタッチ atomSource.DetachExPlayer(); } 振幅レベルをとりだす(バスから)(音量チェック、ピークメータ表示、口パク等) (Atomの関数) void Start () { CriAtomEx.AttachDspBusSetting("DspBusSetting_0"); //バス変更 CriAtom.SetBusAnalyzer(true); // バス解析器を有効化 } void Update () { CriAtomExAsr.BusAnalyzerInfo lBusInfo = CriAtom.GetBusAnalyzerInfo(0); //バス0 Debug.Log("level " + lBusInfo.peakLevels[0].ToString()); //チャンネル0(Left) } 8個あるバスのうちバス0はマスターアウトのバスで、全ての音がそのバスを経由します。 特定の音のみの振幅を検出したい場合は、専用のバスへもセンドして検出する事も可能。(声専用バス等) GetBusAnalyzerInfo()はUpdate()などで定期的に呼び出すことで、リアルタイムの変化が取り出せます。 他にも Debug.Log("level RMS " + lBusInfo.rmsLevels[0].ToString()); //RMS Debug.Log("level PeakHold " + lBusInfo.peakHoldLevels[0].ToString()); //RMS もあります。 デフォルトではRMSは50msec,ホールドは1000msec RMS、ピークホールドの時間設定は、AttachBusAnalyzerの引数で設定を変える事もできます。 各チャンネル0~7(L,R,C,LFE,Ls,Rs,Ex1,Ex2)のレベルが確認できるので、音量のチェックなどにも利用できます。 (使用しない時は負荷軽減になるのでCriAtom.SetBusAnalyzer(false); を呼んでおきましょう。) バスの波形フィルターコールバックを使って波形を参照したり直接加工する (AsrBusFilterCbの関数) CriAtomExAsrBusFilterCbFunc(void *obj, CriAtomPcmFormat format, CriSint32 num_channels, CriSint32 num_samples, void *data[]) これ使うとゲーム側でバスの音を変化させるDSP処理が書けたりする プレーヤーの波形フィルターコールバックを使って波形を参照したり直接加工する (PlayerFilterCbの関数) CriAtomExPlayerFilterCbFunc(void *obj, CriAtomExPlaybackId id, CriAtomPcmFormat format, CriSint32 num_channels, CriSint32 num_samples, void *data[]) これ使うとゲーム側でプレーヤーの音を変化させるDSP処理が書けたりする たとえば、ボイスチャットや別のサウンド処理へ流したり、サンプリングしたりといったことにも使える ACF情報(カテゴリ、ゲーム変数、AISACコントロール)の取得 (Acfの関数) // カテゴリ情報の取得数 int categoryNum = CriAtomExAcfDebug.GetNumCategories(); Debug.Log("categoryNum " + categoryNum.ToString()); CriAtomExAcfDebug.CategoryInfo categoryInfo; for(ushort categoryNo = 0; categoryNo categoryNum; categoryNo++){ bool ret = CriAtomExAcfDebug.GetCategoryInfoByIndex(categoryNo,out categoryInfo); if(ret){ Debug.Log("CategoryName \"" + categoryInfo.name + "\" GroupNo " + categoryInfo.groupNo.ToString()); } } // ゲーム変数の取得 int gameVariablesNum = CriAtomEx.GetNumGameVariables(); Debug.Log("gameVariablesNum " + gameVariablesNum.ToString()); CriAtomEx.GameVariableInfo gameVariableInfo; for(ushort gameVariablesNo = 0; gameVariablesNo gameVariablesNum;gameVariablesNo++){ bool ret = CriAtomEx.GetGameVariableInfo (gameVariablesNo,out gameVariableInfo); if(ret){ Debug.Log("GameVariablesName \"" + gameVariableInfo.name + "\""); } } // AISACコントロール情報の取得 for(uint aisacControlId = 0;aisacControlId 32;aisacControlId++) { string aisacControlName = CriAtomExAcfDebug.GetAisacControlNameById(aisacControlId); if(aisacControlName.Length != 0){ Debug.Log("AISAC Control ID " + aisacControlId.ToString() + " Name \"" + aisacControlName + "\""); } } ACB(キューシート)情報の取得 CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName); キュー情報一括取得 (Acbの関数) string cueSheetName = “Pinball”; CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName); CriAtomEx.CueInfo[] cueInfoList = acb.GetCueInfoList (); キューにはツールで設定された様々な情報があります。これを再生前に取得する場合上記の関数を使います。名前やID、ユーザーデータ、カテゴリやAISAC使用有無、キューの長さなど取り出す事ができます。 たとえば、サウンドテスト用に再生ボタンを並べる時、キュー名一覧が欲しい場合や、キューがループ(長さが-1)かどうかの判定に使います。 キュー名とキューID一覧を得る (Acbの関数) 以下のソースを参考にしてacbから情報を取得する事ができます。 // ACB(キューシート)情報の取得 string cueSheetName = "CueSheet_0"; CriAtomExAcb acb = CriAtom.GetAcb (cueSheetName); // キュー情報の一括取得 CriAtomEx.CueInfo[] cueInfoList = acb.GetCueInfoList (); // キュー名とキューIDをデバッグ出力 foreach(CriAtomEx.CueInfo cueInfo in cueInfoList){ Debug.Log("cueName "+cueInfo.name + " cueId "+ cueInfo.id); } 参考https //github.com/tatmos/ADX2Cursor/blob/master/ADX2Loader.cs キュー情報取得(キュー名指定) (Acbの関数) CriAtomExAcb acb; CriAtomEx.CueInfo cueInfo; int GetNumBlocks(string cueName){ acb = CriAtom.GetAcb (cueSheetName); acb.GetCueInfo (cueName, out cueInfo); return cueInfo.numBlocks; // ブロック数を得る } string GetUserData(string cueName){ acb = CriAtom.GetAcb (cueSheetName); acb.GetCueInfo (cueName, out cueInfo); return cueInfo.userData; // ユーザーデータを得る } ACBの情報をキューシート名で取得し、acbからキューの情報をキュー名で取り出します。ここでは。ブロック数を取得しています。 例)現在の再生時刻と組み合わせて、シークバー(どこまで再生したか)などのような表現などに使えます。 atomsourceBgm = gameObject.GetComponent CriAtomSource (); if(atomsourceBgm != null){ CriAtomExAcb acb; CriAtomEx.CueInfo cueInfo; acb = CriAtom.GetAcb (atomsourceBgm.cueSheet); if(acb.GetCueInfo (atomsourceBgm.cueName, out cueInfo)){ totalTime = cueInfo.length; } } キューの長さを取得する例。ここではCriAtomSourceから取り出している。 DSPバス設定のスナップショット切り替え (AsrRackの関数) criAtomExAsrRack_ApplyDspBusSnapshot(CriAtomExAsrRackId rack_id, const CriChar8 * snapshot_name, CriSint32 time_ms ) 時間指定でDSPバスエフェクトのスナップショットを切り替える エフェクトパラメータ設定の違うスナップショットをあらかじめツールで用意し名前をつけておくことで、その設定に変更することができる。 スクリプト【ブロック再生】 ブロック再生は、キューの一部の再生区間(ブロック)の遷移情報をもたせたキューをインタラクティブにコントロールする場合に使用します。 音楽的な変化として、ビートを崩さないで再生を連結するといった要望があるのですが、その解決の一つになります。 データ側で明示的なブロック(音楽的な区切り、Stem、小節、楽章(イントロ、サビ、アウトロ)など)を作成し、 そのブロックの再生中に別のブロックへの変更を行う際に 再生リクエストを音楽的な区切り目(ブロック終端または分割数区切り)まで自動遅延(待機)させたり、 指定回数ブロックをループした後に「次ブロックへ」の遷移指定ができます。 ブロック再生のデータ作成解説動画 再生中のブロックインデックスの取得(ブロック再生)(Playbackの関数) CriAtomExPlayback playbackBGM; playbackBGM = atomSourceBgm.Play(100); int cur = this.playbackBGM.GetCurrentBlockIndex(); ↑現在再生中のブロック番号を確認する方法。どのブロックが再生されているか、確認する用途で使用します。 再生中のブロックインデックスの指定(ブロック再生)(Playbackの関数) playbackBGM.SetNextBlockIndex(cur % this.cueInfo.numBlocks); 再生中のブロックを含むキューに対して上記の関数を呼ぶと、ツールでブロックをクリックした時と同じような動作になります。 例えば、ブロックを無限ループ(ループ回数-1)にしていたブロック再生中に、別のブロックへ遷移を指定したい場合に使用します。 遷移を指定しても即時に切り替わるのではなく、データ側で定義したブロックの遷移ルールに従って遷移します。 即時に切り替えたい場合は データ側の「分割数」を細かくする 一度停止して、ブロックセットしてから再生する。 再生開始前にブロックをセットして再生(ブロック再生) (Playerの関数) atomSourceBgm.cueName = "mainBgm"; atomSourceBgm.Player.SetFirstBlockIndex(1); atomSourceBgm.Play(); 再生開始前にセットする方法。 複数のイントロ(再生開始位置)がある楽曲などで使用します。 シーケンスコールバックを得る (Sequencerの関数) シーケンスコールバックは、AtomCraft側で、シーケンスコールバックマーカーを設定したデータを用意することで実現します。 楽曲のタイミングに合わせた演出を行いたい場合などに使います。 シーケンス上の任意の位置にコールバックイベントを埋め込むことで、 そのタイミングで、SequencerEventCallback関数が動作します。 void Start() { CriAtomExSequencer.SetEventCallback(SequencerEventCallback); //シーケンスコールバックの関数をセット } void SequencerEventCallback(string eventParamsString) { string[] strList = eventParamsString.Split( \t ); Debug.Log(strList[4]); // Callbackの文字列をログに表示 int tagNo = int.Parse( strList[4]);// CallbackのIDを取得 //GameObject go = Instantiate(itemPrefab,new Vector3(posX,9,0),Quaternion.identity) as GameObject; //GameObject.Destroy(go,4); } strListの4番目はコールバックのタグの内容が文字列で渡ってくるので、これをゲームの演出などに応用することができます。 例えば、出現位置とかに利用できます。 再生位置に連動した演出が簡単にできます。 スクリプト【ビート同期】 BGMのビートを取り出す(ビート同期する処理) void Start () { evBeatUpdate += beat; //(デリゲート) } void beat () { Debug.Log("beat" + beatNo.ToString()); } static int beatNo = 0; static int lastBeatNo = 0; public delegate void BeatUpdate (); static public BeatUpdate evBeatUpdate; void Update () { beatNo = (int)(0.001f*(atomSourceBgm.time*82f/60f)); //BPM82 if(lastBeatNo != beatNo){ evBeatUpdate(); lastBeatNo = beatNo; } } 再生時間を元楽曲のテンポ(あらかじめ知っている)で割って拍を取り出し、デリゲートを使ってビートに合わせる処理。 拍に合わせた処理をする(音ゲーなど)に使えるかも。 timeは再生中の時刻(msec)が入ります。 1000msec/60で1分(Minite)あたり何ビート(Beat)数の基準(60BPM)が取り出せます。 1BPM = 60000msec 2BPM = 30000msec 10BPM = 6000msec 60BPM = 1000msec 120BPM = 500msec テンポが早ければ、ビートの間隔は短くなり、遅ければ長くなります。 レイテンシー 【遅延について】 音の再生タイミング(レイテンシー)はオーディオサーバー周期とも密接に関連します。 周期が60FPSの場合、約16.6msecの単位で一括処理が行われます。(クォンタイズがかかったような状態) タイミングがシビアな音ゲー等の場合、4~6msecほどの精度をもたないと音がずれる(もたったり食った状態)などに 感じます。 音で確認 latency200_100_50_25_10.wav 200msec,100msec,50msec,25msec,10msecの違いを聞けます。 200「ツ、タン」,100「ツタン」,50「ツタ」,25「チャ」,10「タ」といった感じ。 ゲームの画面更新が16msecや32msecだとすると「チャ」「タ」くらい出て欲しい。 バッファサイズ(サンプル数)とレイテンシー 128,256sampleなどが処理単位となる。ADX2LEではボリューム値はリニアに補間するが、ピッチやフィルターなどはこの最小単位で処理される。 なめらかなピッチベンドなどを行うつもりでもこの最小単位msecの階段状に変化する。ドップラーなども影響受けるので、あまりに高速な音の変化を期待する時に気にかけておくと良い。(奇麗な変化を別サンプルで用意するとか) 最終出力が22050の場合 1000msec = 22050 sample 0.045351msec = 1 sample 5.804989msec = 128 sample 11.609978msec = 256 sample 16msec = 約352.8sample 32msec = 約705.6sample 高域がこもって聞こえる。 最終出力が32000の場合 1000msec = 32000 sample 0.03125msec = 1 sample 4msec = 128 sample 8msec = 256 sample 16msec = 512sample 32msec = 1024sample 処理負荷低い、切りが良い。CD品質より劣る。 最終出力が44100の場合 1000msec = 44100 sample 約0.022676msec = 1 sample 約2.902494msec = 128 sample 約5.804989msec = 256 sample 16msec = 約705.6 sample 32msec = 約1411.2 sample CD品質。 最終出力が48000の場合 1000msec = 48000 sample 0.020833msec = 1 sample 2.66667msec = 128 sample 5.33333msec = 256 sample 16msec = 768sample 32msec = 1536sample 処理負荷が上がるけど時間方向に細かい変化になる。 ADX2で音が遅れる一般的な要因と回避策 ストリーム再生を使っている。メディアから読み込むため再生開始に時間がかかる。 【回避策】 →メモリ再生をする。 →prep (一時停止状態で読み込み)pause解除で再生開始する。 ボイスリミットに達している音を発音している。 【回避策】 →ボイスリミットを多めにする。 ボイスリミットの確保の処理は早いのですが、ボイス開放処理は遅めなため、短時間で多くのリクエストをすると処理が滞る場合があります。 (ボイス開放待ちになる) →キューリミットを使う キューリミット、またはカテゴリの キューリミット数を、制限したい発音数 ボイスリミット数を、制限したい発音数+数音にしておく。 後着優先時の動作として、 キューリミットではリリースのある音を止めないため、実質の発音数はオーバーラップ分リミットを超える場合があります。 ボイスリミットでは、リリースを停止してボイスを取得しに行くため、ボイスの停止に時間がかかる場合、次のボイス取得が遅延します。 ボイスにゆとりをもたせて、リミットはキュー側で行うと処理として都合が良くなります。 シーク再生 【回避策】 →2つボイスを用意し、交互に扱うなど。 ブロック再生 シーケンスの精度の問題でサンプルレベルでの連続再生はできない。 【回避策】 →少し長めの余韻つき波形を、次の波形の頭にオーバーラップするように再生し誤摩化す。 Android 【回避策】 →低遅延再生を試みる。 CRIWARE Library Initializer コンポーネントにて低遅延再生標準ボイスプール数を指定 CriAtomSourceコンポーネントの「Low Latency Playback」チェックをオンにして再生開始 スクリプト上でCriAtomSourceを操作する場合は、CriAtomSource.androidUseLowLatencyVoicePoolプロパティに true をセットしてください。ただし、低遅延音声再生ボイスプールから音声を再生する場合、以下のような制限事項があります。 本機能はSE再生など遅延を少しでも減らした音声のみ使用し、BGMやエフェクトを使用したい音は通常再生を行ってください。 注意 •低遅延再生標準ボイスプールの最大数はメモリ再生・ストリーム再生あわせて27まで。 •音声データのサンプリングレートは44100Hz/22050Hz以外は再生できません。 •2Dパン、ボリューム調整のみ可能。ピッチ調整やリバーブなどのエフェクト機能などは使えません。 •本機能はAndroid OS 2.3以降の端末のみ有効です。 オーディオサーバーの周期 理想的にはオーディオサーバー処理を240FPSの処理になるのですが、 デフォルトの30FPSと比較して8倍の負荷になる計算。(実測値は環境や処理内容依存で変化します) ゲームの場合、他の処理の為に負荷を軽減する必要が多く これらの設定は大きなトレードオフが発生します。 オーディオサーバー周期はCriAtomInitializerで設定することができます。 ※実際には別の要因でボトルネックが発生する場合もあり、ある一定量以上は効果がでなくなります。 処理負荷 ハイエンド機やPCなどではほとんど問題ないのですが 携帯機では 「処理負荷が上がる」=「電池の減りが早く」なります。 CPUクロック等待機状態からの復帰に時間がかかるような処理では、 再生の供給が間に合わず音が途切れたりする事もあります。 (想定しているサーバー周期で動作しないし、システムの保証がない) おそらく、音の途切れをなくすための膨大なレイテンシー(100~300msec)のある端末やOS、ハードウェアの組み合わせがあるようで、 電話やメッセージの着信、カメラのシャッター音など、システムレベルのサウンドとのミキシングなど公開されていないレイテンシーもあります。 同じ内容のものでも端末によって気持ちよさが変わってしまいます。 例えば 300msecは200BPMで1拍(beat)音楽的に4分音符分の遅れということになります。 150msecで8分音符 75msecで16分音符 32.5msecで32分音符 16分音符のずれはほとんどの人が知覚できるレベルでずれに感じます。 これらのシビアなタイミングが気持ちよさにダイレクトに繋がるような 音ゲーを作る場合には重要な問題となります。 【for Unity iOS で遅延を減らしたい】 プロジェクトセッティングのAudioManagerからDisable Audioをチェックする。 iOS ConfigのBuffering Timeを100から16にする。 メモリ再生にする。 【for Windowsで遅延を減らしたい】 criAtom_SetSoundBufferSizeを小さくする。(あまり小さくすると音途切れなどの原因になります) 【ADX2LE iOSで遅延を減らしたい】 楽器アプリを作っていて気がついたのですが [CriWareInitializer]の[iOS Config]というところの[Buffering Time]という項目がデフォルト100msecとなっています。 これを50msecに変更する と少し改善します。 「ツタン」から「ツタ」くらいに変わる。 ※ただしこの設定を下げるとGC(ガベコレ)時に音途切れが発生する可能性があります。発音中にGCが発生するような作りにしない工夫も必要です。(シーン切り替え時に無音部分を用意するなど) ちなみによくあるBPM120で 4分音符 500msec 8分音符 250msec 16分音符 125msec 32分音符 62.5msec なので、32分音符分ずれていたらこれが原因。 iOSの画面を爪でコツンと叩くような感じで、音を鳴らした時にこれくらいずれていたら 設定を疑うと良い。 「ツ、タン」(120~200msec)が「ツタン」(60msec)くらいになります。(鳴らし開始と音が出るまでの時間が短縮する) 楽器レベルでは(10msec以内に押さえたいところ) 解像度的な乱れ(密度がばらつく)の改善 定期的に 32分音符で叩いていて、たまに動作が乱れる場合は [CriAtomInitializer]の[InitializeAtom]の[Server Frequency]をデフォルト30から 60または120にします。 「タタッタタタ」とかが「タタタタタタ」と改善するはず。(サーバーの鳴らす処理の入るタイミングの解像度が上がる) 30FPS 約32msec 60FPS 約16msec 120FPS 約8msec ※ただし、負荷も上がるので、携帯機などでは電池の減りが早くなる等別の問題が発生します。 ※また、処理量も増えるため大量のサウンドを同時再生しているなど負荷の増加に注意が必要です。 音の停止判定は遅い? サウンドの発音までの処理は早いのですが、停止の処理は精度が低いようです。(エンベロープのリリース処理や解放処理など) リミットがかかった場合なども若干の停止待ちが発生するため、 発音を優先するのであれば、多めのボイスを確保するようにしておくことが良いです。 スクリプト【テクニックアラカルト】 サンプルディレイみたいなのはありますか? (Playerの関数) サンプル単位ではなくミリ秒単位で以下のような方法が可能です。 [データ] キューにプリディレイ用のAISAC「PreDelay」を作る。カーブに「プリディレイ」を設定し AISAC(0.0~1.0)をmsecにマッピングする。例えば、0~100msec。 ただし、波形の再生だけが遅くなるだけなので、オートメーションとかシーケンスのタイミングは元のままで再生されます。 また、PreDealy中も発音カウントは増えるので、リミット処理などが行われます。(PreDelay時間時に無音が再生されているイメージ) プログラムで以下のように呼び出す atomSourceBgm.SetAisac("PreDelay",msec/100.0f); atomSourceBgm.Play("hit"); これでとりあえずディレイ再生が可能です。 再生開始位置をずらす criAtomExPlayer_SetStartTimeを使う XYでAISACを変更する(カオシレータ風) (Playerの関数) // TapPos(new Vector2(x/Screen.width,y/Screen.height)); static public void TapPos(Vector2 tapPos) { atomSourceBgm.SetAisac("y",tapPos.y); atomSourceBgm.SetAisac("x",tapPos.x); } AISACを2つ使って音を面(2軸)で操作する。AISACは一つのキューで最大8個まで別のコントロールを持たせる事ができる。 例えば カオシレータ風にするならば スケール用のピッチの階段上のグラフ(AISAC) エフェクト用のバスセンドのグラフ(AISAC) といった形にもできます。 エンジン音ならば RPM(回転数) Laod(エンジン負荷) 環境音なら 天候 群衆の人数 ゲーム状況をインタラクティブに反映するならば ゲームの進行具合 メインキャラの体力ゲージ による音の変化など。 【Unity機能】 Unityの標準再生などの再生速度指定系でピッチを指定したい場合に使います。ADX2LEでは再生速度指定AISACなどで使うかも。 iOSなどバックグラウンドになった時にBGMを一時停止/復帰する void OnApplicationPause(bool pause) { atomSourceBgm.Pause(pause); } iOSなどスプリングボードへ移動する瞬間などの若干のフェードアウトしている間も音は再生されています。これを使うことでほんの少し抑制できます。 Androidなどバックグラウンド動作を許す端末などでは、 void OnApplicationFocus(bool focusFlag) { atomSourceBgm.Pause(!focusFlag); } でフォーカスが当たっていない時に音を止めたりします。 AtomSourceからCriAtomExPlayerを得る(CriAtomExPlayerを呼び出す改良) CriAtomExPlayerはpitchの変更やtimeの設定など低レベルな隠されたリアルタイム処理を使用する場合に取得します。 いろいろな事ができる反面、状態や動作をよく理解しておかないと混乱(意図しない再生など)する可能性のある機能もあるので注意。 Plugins/CriWare/CriWare/CriAtomSource.csに以下の行を追加 public CriAtomExPlayer player { private set; get; } 一度も再生をしていないと不定な場合があるため、初回呼び出し前に下のリセットを呼び出すと少し安定する? AtomSourceからCriAtomExPlayerを初期設定に戻す(リセット) (Playerの関数) Playerに対して様々なパラメータをセット(ピッチ等)してしまった後にもとに戻したい場合リセットをすると最初の状態に戻ります。 atomsourceSelect.Player.ResetParameters(); atomsourceSelect.Stop(); https //game.criware.jp/manual/unity_plugin/jpn/contents/classCriAtomExPlayer.html#a737656c7766a62eaf497ac3dff3b6bf4 シーケンシャルを最初に戻す (Acbの関数) キューが、シーケンシャルに複数のトラックを切り替えて再生する時に、意図的に最初のトラックの再生に戻したい場合があります。 シーケンシャルなキューの再生を最初の状態に戻したい場合は、 criAtomExAcb_ResetCueTypeStateByName criAtomExAcb_ResetCueTypeStateById を使います Unityだと後ろの方が省略されて、引数違いの関数になります。 CriAtomExAcb.ResetCueTypeState https //game.criware.jp/manual/unity_plugin/jpn/contents/classCriAtomExAcb.html#a8e24ac2d79f00aa12e729c96961afc80 そのほかのリセット的な処理 関数リファレンスで「Reset」などで検索するといろいろでてきます。 https //game.criware.jp/manual/unity_plugin/jpn/contents/modules.html シークして再生(シーク再生、途中から再生)(Playerの関数) 次回再生の再生開始時刻を指定する atomsourceSelect.startTime = 30*1000; //次回再生音は30秒目から atomsourceSelect.Play(); atomsourceSelect.startTime = 0; //次回再生音を0秒目からに戻す プレーヤに直接指定する場合 atomSourceSe.Player.SetStartTime((long)settime); atomSourceSe.Stop(); atomSourceSe.Play(cueNo); CriAtomExPlayerのSetStartTimeを呼び出すため、CriAtomExPlayerを呼び出す改良を施しておいて下さい。 SetStartTimeには開始msecを指定します。次回再生時に指定時刻から再生します。 再生中の音をピッチベンドする (Playbackの関数) CriAtomExPlayback playback; void Playback(int cueNo) { playback = atomSourceSe.Play(cueNo); } void PitchBend(float pitch){ atomSourceSe.Player.SetPitch(pitch); atomSourceSe.Player.Update(playback); } CriAtomExPlayerのSetPitchを呼び出すため、CriAtomExPlayerを呼び出す改良を施しておいて下さい。SetPitchにはcent値(100で半音、1200で1オクターブ)を指定します。 playbackを取得して、Updateしたタイミングで再生中の音に反映します。 Updateで更新されるパラメータについて 音が変化しないといった時は、Update系の処理を呼ぶ必要を検討します。 playerに対してSet系や Attach系で指定したパラメータは、その後のPlayerで再生した音にのみ影響を与えます。 これは、 「再生中の音」に影響を与えたい場合は、Play時のPlaybackIDを利用するか、 UpdateAllなどの関数を呼び、そのプレイヤーで再生中の全ての音に 現在のPlayerのパラメータ設定を影響させるといった操作が必要です。 マニュアル https //game.criware.jp/manual/unity_plugin/jpn/contents/classCriAtomExPlayer.html#aa2c147ef0814431078ffc89e39045d77 パラメータのセットと、再生のリクエストのタイミングについて 通常は、パラメータをセットしてから、音を鳴らすという操作になります。 もし、音がなってから、ボリュームやピッチを変更すると、 最悪一瞬だけ音が鳴ってから変化したり、たまたま音の出だしが遅いなどのタイミングが間に合って、 正しく鳴ったりといった不正確な動作になります。 もっとなめらかな変化が欲しい場合 Updateにしても、オーディオの処理フレームとはタイミングの操作になるため、 変化の解像度は階段状になったり、更新タイミングも不正確で音の鳴り方が不定になりがちです。 基本的には、エンベロープの設定やフェーダーなどを利用して、影響が少ないようにした方が良いです。 AtomExPlayerを使用した再生 (Playerの関数) より低レベルなサウンド処理を行う場合の再生方法です。 CriAtomExPlayer atomPlayer = null; void Start() { atomPlayer = new CriAtomExPlayer(); // AtomExPlayer()作成 } void Play(string cueName) { atomPlayer.SetCue(null,cueName); atomPlayer.Start(); // 再生開始 } void OnDestroy() { if(atomPlayer != null){ atomPlayer.Dispose(); // 破棄 atomPlayer = null; } } selectorLabelを設定する (Playerの関数) CriAtomExPlayerの関数を呼ぶ audioSource.player.SetSelectorLabel(”Ground”,"concrete"); //床セレクタのコンクリートのラベル指定 スクリプト【Unityの物理とかで再生制御】 キューブをクリックすると再生/停止をする クリックの判定にRaycastHitを使う方法を紹介。 CubeにCriAtomSourceをつけて、cri/unity/samples/criatom/script/Unity3Project/ScriptSample01_ClickToPlay/Assets/Scripts/PlayAndStopSoundOnClick.csを使う。 void Update () { if (Input.GetMouseButtonDown(0)){ Ray clkRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit rh; // Collision Dectection if (Physics.Raycast(clkRay, out rh, 20)) { GameObject target = rh.collider.gameObject; if (target == this.gameObject) { // Play Cue CriAtomSource atom_src = target.GetComponent(); if (atom_src != null) { CriAtomSource.Status status = atom_src.status; if ((status == CriAtomSource.Status.Stop) || (status == CriAtomSource.Status.PlayEnd)) { atom_src.Play(); } else { atom_src.Stop(); } } } } } } キューブに触れると再生/停止する 参考https //github.com/tatmos/ADX2Cursor/blob/master/ADX2ColliderPlayStop.cs スクリプト【初期化、ロード関連】 スクリプトでのacbロードと解放の仕方 if(GUILayout.Button("Remove")){ CriAtom.RemoveCueSheet("PinballMain"); } if(GUILayout.Button("Add")){ CriAtom.AddCueSheet("PinballMain","PinballMain.acb",""); } ACBを動的に切り替えたいなどの特殊用途に使用します。 具体例をいくつか ダウンロードコンテンツ(DLC) キャラクターダウンロード(読み上げる声優の切り替え) アイテムのダウンロード プログラム上の差し替えでリクエストに対する音が切り替わる等を表現したい場合など。 対戦格闘におけるキャラ選択後のパンチやキックの音の変化 レースゲーム等で車選択による音の切り替え 音ゲーでの楽曲選択による音の切り替え ステージ切り替えによるアンビエント変化等 なお、あらかじめInitializerオブジェクト、CriAtomオブジェクトが必要です。 CRIAtomオブジェクトを用意する CRI Atomのインスタンスが無い状態で、関数を呼び出そうとするとnullアクセスになります。 // CRI Atom作成 var criAtom = new GameObject("CRIAtom"); criAtom.AddComponent CriAtom (); といった感じで、CriAtomのコンポーネントを先に作っておくと良いです。 参考:ADX2Cursor https //github.com/tatmos/ADX2Cursor/blob/master/ADX2Loader.cs より簡単にStreamingAssets以外のパスから読む方法(New) AddCueSheet関数にフルパスを指定するだけ。 if(GUILayout.Button("Add")){ CriAtom.AddCueSheet("PinballMain","C /PinballMain.acb",""); } AddCueSheetはパスが相対パスの時はStreamingAssetsから読むようです。 ACFの登録をスクリプトから行う CriAtomEx.RegisterAcf CriAtomEx.UnregisterAcf を使う。 イニシャライザとか別オブジェクトだけど、スクリプトからできない? Unityは初期化順序や、永続性がGameObjectに依存するので、 CRI Initializerを別オブジェクトで追加するのが簡単です。 もし何らかの理由で、自前で行いたい場合は、CRI Initializerの中と同様の処理を行うことでできますが、 初期化順序や破棄なども注意深く行う必要がでてきます。 例えば、 Unity Execution orderで初期化を早めに呼ぶ。 セットアップシーンを用意して、初期化を済ませておく。 ADX2LEはApplication.temporaryCachePath等に保存してあるオーディオファイルを再生する・・・的な事は出来ますか? Assets以下のフォルダにあるACBをロードして、再生するサンプルの動画作ってみました。 ここでは、無関係なゲームジャムのELISEのacbを読み込んで再生しています。http //www.youtube.com/watch?v=DyhujH43ozI feature=youtu.be 通常のCriAtomSourceで指定したキューシート名のロード先はStreamingAssets以下から読み込みますが 外部デバイス(SDカード)、URLでサーバーからACBをダウンロードなど、 UnityのAsset管理外のフォルダから直接acbファイルを指定して再生する場合に使用します。 CriAtomExACB acb = null; void LoadACB(string loadAcbPath) if(acb != null){ acb.Dispose(); // ロード前に既にあったら破棄 acb = null; } acb = CriAtomExAcb.LoadAcbFile(null,loadAcbPath,null); // ロード } void OnDestroy() { if(acb != null){ acb.Dispose(); // 破棄 acb = null; } } スクリプト【サウンド関連パラメータ変換】 MIDIノートNoから音程を設定(0~127 - cent値) static public void SetMidiNote(float note) { atomSourceSe.pitch = (note-69)*100; // cent(100で半音,ベースノート A4=69) } セント値への変換 MIDIベロシティから音量を設定(0~127 - 0.0~1.0) static public void VelocityToVoluem(float velocity) { atomSourceSe.volume = velocity/127f; // 0.0~1.0の正規化ボリューム指定 } 周波数からMIDIノートの変換(Hz - MIDINoteNo) static public float Ftom(float freq) { return (69f + (1f/.057762265f) * Mathf.Log(freq/440f)); } (MIDIノート)から周波数の変換(MIDINoteNo - Hz) static public float Mtof(float note) { return (440f * Mathf.Exp(.057762265f * (note - 69f))); } CRI Pitchから再生速度へ変換(cent値 - 0.0~4.0) static public float PitchToSpeed(float pitch) { return Mathf.Pow(2,pitch/1200.0f); } BPMから一拍の長さ(msec)に変換 beat per minute 1分で何拍打つかという指定なので、 BPM120は1分(60*1000msec)で120回。 一拍の長さは、60000/120で求められる。 beatLength = 60000/bpm BPMから再生速度に変換 ピッチの変化を上記の再生速度にしてしまえば、1.2倍速とかの指定ができる感じになります。 (目的のBPM/元のBPM)をスピードとして指定するといったBPM変換も可能です。 speed = DstBpm/SrcBpm; // 元のBPMが100で、120にしたい場合、120/100 = 1.2倍 再生速度からCRI Pitchへ変換(0.0~4.0 - cent値) //pitch = 1200.0f*logf(ratio)/logf(2.0f); pitch = 1200.0f*Mathf.Log(ratio)/Mathf.Log(2.0f); dBからCRI Volumeに変換(-96dB~+6dB - 0.00 ~ 2.00) volume = Mathf.Pow(10.0f,dB / 20.0f); CRI VolumeからdBに変換(0.00 ~ 2.00 - -96dB~+6dB ) db = 20.0f * Mathf.Log10(volume); インゲームプレビュー(他のマシンへ接続) MacでParallelsなど使用している場合、MacのIPを「ツールメニュー>プロパティ>ターゲット>PC>リモートPC IP アドレス」に指定し、チェックします。 Unity側「CriWareLibraryInitializer」のUses In Game Previewのチェックも忘れずに。 Unityの動作がバックグラウンドで止まってしまう場合は、PlayerSettingsの「Run In Background」をチェックすると良いです。 AtomCraft早見表.jpg PCでオーディオデバイスを切り替える関数 criAtom_SetDeviceId_WASAPI を使う エフェクトパラメーターを直接いじる SetEffectParameterと UpdateEffectParameterを使う。 https //game.criware.jp/manual/native/adx2/pc/contents/cri__atom__asr_8h.html バス1につけたリバーブの残響時間を操作 CriAtomExAsr.SetEffectParameter("BUS1", CRIATOMEXASR_I3DL2_REVERB_NAME , CRIATOMEXASR_I3DL2_REVERB_PARAMETER_DECAY_TIME, 3 ); エフェクトの設定を取得する // バスの数を得る CriSint32 dspSettingNum = criAtomExAcf_GetNumDspSettings(); //DSP設定の数だけループ for(int dspSettingNo = 0; dspSettingNo dspSettingNum;dspSettingNo++){ const CriChar8* dspSettingName = criAtomExAcf_GetDspSettingNameByIndex(dspSettingNo); { CriAtomExAcfDspSettingInfo setting_info; // DSP Setting情報の取得 criAtomExAcf_GetDspSettingInformation(dspSettingName, setting_info); } } // スナップショット情報 CriAtomExAcfDspSettingSnapshotInfo settingSnapshotInfo; criAtomExAcf_GetDspSettingSnapshotInformation(snapShotIndex, settingSnapshotInfo); // バスリンク情報 CriAtomExAcfDspBusLinkInfo criAtomExAcfDspBusLinkInfo; criAtomExAcf_GetDspBusLinkInformation(startBusLink+num_buslink, criAtomExAcfDspBusLinkInfo); // FX情報 criAtomExAcf_GetDspFxType(bus_infoList[num_buses].fx_indexes[num_fxes]); スクリプトでACFからとれる情報 https //game.criware.jp/manual/native/adx2/pc/contents/group__ATOMEXLIB__ACF.html スクリプトでACBからとれる情報 https //game.criware.jp/manual/unity_plugin/jpn/contents/classCriAtomExAcb-members.html その他 ADX2Web版でありそうな対処 他のサーバーからロードする場合 CORSの設定も必要 AACエンコーダが別AddOnで別パッケージになっている Mac版UnityEditorなら以下の手順でAACもならせる。 1.CriWareLibraryInitializer Initialize Atom Max VirtualVoicesを増やす。(32- 64など) 一部のエフェクトが機能しない。リバーブやディレイは実装が少し異なる(音が変わる場合がある) ACFやACBのLoadを完了してから呼ぶ UnityのResourcesからロードもできる(サーバーにacf,acbを置かない方法もある) Loadしたデータもガベコレされないようにしておく ``` byte[] raw_dataAcf; byte[] raw_dataAcb; IEnumerator Start () { // ---- // テキストアセットとしてACFを読み込む。NewProject.bytesはResourcesフォルダに配置する。 // ---- TextAsset text_assetAcf = Resources.Load TextAsset ("NewProject"); 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"); } ``` ブラウザの開発メニューからエラーメッセージなどが確認できる ご意見はこちら 名前 コメント
https://w.atwiki.jp/tuntun_sunao/pages/77.html
ええ、ここではお知らせ等を致します。 まぁ、タイトル見りゃわかると思うけど Le→フランス語。 管理人→日本語。 Radio→英語。 なんかもうgdgdである。 第一回目ラジオ http //124.38.226.98 81/servlet/M302/bbs/127587/img/0041349125.mp3
https://w.atwiki.jp/skygaleon/pages/513.html
番号:EX005 レアリティ:★★★★★ コスト:6 属性:赤 分類:女性 識別:A011 配置:全て 能力:治癒・護神・躍神 使用制限:1枚制限 ステータス LV 0 1 2 3 4 5 6 7 8 9 HP 140 142 145 148 151 154 156 159 162 168 AT 40 40 41 42 43 44 44 45 46 48 AG 25 25 25 25 25 25 25 25 25 25 カード説明 オリンポス十二神の一人であり、ゼウスの子である絶対的処女闘神。非常に気が強くプライドが高い一面もある。恋愛には無縁だったが、美貌で知られるアフロディテに並ぶ容姿を持っていたので、醜いヘパイストスに言い寄られたこともある。知慧と芸術にも秀で、パルテノン神殿を持ち多くの支持を集めたといわれている。 行動 特技:戦女神の進撃(ゲージ:5) [オーラ]味方全体のATとAGがAT分アップし、敵全体にAT×0.5のダメージを与える 発動確率:100% 効果1属性:無 効果1範囲:絶対 攻撃範囲 ■■■ ■■■ ■■■ 効果2属性:赤 効果2範囲:絶対 攻撃範囲 ■■■ ■■■ ■■■ 前列:戦神の激震・烈 敵全体のHP140以上のキャラクターにかかっている効果を打ち消し、さらにAT×0.45のダメージを与える 発動確率:100% 効果1属性:無 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■■■ 75% ×0.45 ■■■ 20% ×0.7 ■■■ 5% ×0.9 効果2属性:赤 効果2範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■■■ 75% ×0.45 ■■■ 20% ×0.7 ■■■ 5% ×0.9 中列:戦神の激震 敵全体にAT×0.45のダメージを与える 発動確率:100% 効果1属性:赤 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■■■ 60% ×0.45 ■■■ 30% ×0.54 ■■■ 10% ×0.7 後列:戦十字斬り 範囲内の敵にAT×0.55のダメージを与える 発動確率:100% 効果1属性:赤 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 □■□ 75% ×0.55 ■■■ 20% ×0.85 □■□ 5% ×1.1 考察 スカイガレオンを代表する人気カード、アテナ様がみたび御降臨。 元のSRアテナからさらに全体攻撃に特化し、総合的に強化された。 また護神持ちでは珍しい純アタック構成となっている。 全ての列で攻撃できるため、他の護神持ちほど隊列崩れに気をつけなくて良いメリットを持つ。 アイギス?知らんな。 弱点は広範囲攻撃しかないことによる単発火力の低さ。1対1の殴り合いに持ち込まれると不利になってしまうので、早期決着が望まれる。 特技:味方全体強化&全体加速+赤属性の全体攻撃オーラ SRアテナから純粋に強化された特技。【LEアテナ威光】で用いられるが、普通のデッキではまず狙えない。 味方の超強化に加えて素のAT分の全体攻撃という、決着には十分すぎるほどの威力を持つ。 苦手な青属性相手でもゴリ押しできるほど強力だが、オーラ故に発動ターンは隙となる。 元はダメージがAT分(強化してから攻撃なので素の2倍)だったが、あまりにも強すぎたためか修正で半分にされた。 前列:HP140以上限定の敵全体打ち消し+赤属性の全体攻撃 威力の大きい全体攻撃。打ち消しを併せ持つ。 単純に強力なので、適当に配置するだけでも十分強いが。 護神を盾にして最前列で味方を引っ張るアテナ様の勇姿を、とくとその目に焼き付けよう。 中列:赤属性の全体攻撃 威力は前列と同じ。打ち消しは無し。 護神による維持力が前列ほどは活かされないので、打ち消しの有る無しに関わらず若干魅力は落ちる。 それでも中列で復活しても攻撃に参加できるのは、他の護神と違って大きなメリットとなるだろう。 後列:赤属性の十字攻撃 これまた威力の大きい十字攻撃。 最初から置くとSRラクシュミやSRテスカトリポカのロックを回避しつつ攻撃可能。 ただAGが並程度なので、護神のある1ターン目はともかく中盤以降はその半端な威力と範囲がアダになってくることも。 関連ページ 【第1弾】エクストラ リインカネーションの書1 SRアテナ LEアテナ&アポロン
https://w.atwiki.jp/soundtasukeai/pages/25.html
ADX2LEをダウンロードしてみたけど、何して良いかいさっぱりわからない人向けのページです。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (adx2マップ.png) 目次 目次 あなたはどんなタイプ? ADX2LEを使うと何が出来るようになるか?そもそも音を鳴らすってどうやるのか? 面倒な事が簡単になり、且つ容量を削減しコストを下げる。 音をなるべく簡単に扱うターゲットコンフィグで設定が楽にエンコード品質ひとつ変えるだけで、さらに小さく。 メモリ再生かストリーム再生かをデータ側で設定 キューシートは大量音声時に役立つ ストリーム再生のPrep再生で遅延を無くす 3Dサウンドの扱いについて センター、LFE出力 バスセンドバスセンド-スナップショット 音にこだわった演出ができるようになる音の消え方 音を重ねないカテゴリで再生中の音を管理 距離に応じて変化させる 状況によって色々変化する音の扱いを楽にしたい 任意のコントローラパラメータを追加できる エフェクトが楽に使える モジュレーションエフェクト カテゴリ間の相互作用が可能 シーケンサーやDAWのようなエディター 階層構造でパラメータ管理サブシンセ キューリンク AISACリンク 階層構造でウェーブフォーム(マテリアル)パラメータ管理 コマンドラインツール(ADX2Pro版のみ) 音程をつけて鳴らすのが簡単 圧縮音声のデメリットがない(ゲーム的な意味で) 大量発音時の制限がかけられる ランダムな要素に音の変化を加える事ができるようになる 曲が切り替わる時のこだわり演出 環境音のデザイン 再生中の音に対しての情報取得が可能 音声解析その他(Pro版のみ) 圧縮音声を使っても苦労しない acb,awbという独自フォーマットのため、ダウンロードコンテンツ化できる ストリーム再生が手軽且つローコスト 多言語リソース管理 #adx2leハッシュタグをつけてtwitterでつぶやく まずはマニュアルを読む サンプルを動かす もういちどマニュアルを読むCriAtomCraft.exeを動かす DemoProj ADX2LEの本 ADX2LEのトレーニング ADX2LEスクリプト ADX2LEの動画解説 ADX2ユーザー助け合い所で聞いてみるりんごのツイート ADX2LEリアルタイム検索 ADX2 x Oculus よくある勘違い波形編集ソフトではない 音楽作成ソフトではない 効果音集ではない MAソフトではない シーケンサではない Unityのサウンドシステムを叩いているわけではない 何でもできるわけではない 制限される事 良い事ADX2Pro版とのデータ互換性 何がやりたいのか自問自答する ご意見はこちら あなたはどんなタイプ? ADX2LEを使うと何が出来るようになるか? そもそも音を鳴らすってどうやるのか? 通常はwaveファイル(.wav)のファイルを鳴らすとかがよく行われます。 .wavの中身は、例えば、1秒間における空気の振動を44100回とらえた数値のようなものになります。 マイクで入力して、スピーカーで流せば音が再現できます。 ですが、音のデータは膨大になりがちなので、圧縮したくなります。 ADX2では、HCAといった圧縮フォーマットがあります。 1秒間の振動情報を1/12くらいに圧縮できるのでサイズが減ってお得です。 (12倍の音声が入れられる) 再生するときは元の44100の振動に戻す処理が入ってスピーカーから音がでます。 振動を数値にするのがエンコード、 数値を振動に戻すのがデコード。 これらのフォーマットのことをコーデックと呼びます。 話はそれましたが、音を鳴らすときに、情報を圧縮したり展開したりを簡単にやってくれるのがADX2の持つ最大の特徴です。 面倒な事が簡単になり、且つ容量を削減しコストを下げる。 ゲームのサウンドに求めるものとは? ゲームにおいて、無駄に高い負荷の処理は望まれません。 一方で、ユーザーは心地の良い音を望みます。 サウンドの再生において、心地よさはさまざまな要因で決まります。 例えば、音質とか音の変化とか。 最低限の処理でたくさんの音を鳴らす。 メモリの少ない状況でも飽きさせない音を鳴らす。 こういうチューニング(心遣い)が大事です。 これらを行うには、プログラムの知識、サウンドの知識、そしてハードウェアの知識など様々なものが必要です。 また、それらを理解したところで、昨今のゲームにおける大量のサウンドを効率よくハンドリングする必要があります。 なるべくなら、これらを楽したいところ。ちょっとした事は、チェックボックスひとつで済ませたい。 でもこだわるところ、気になるところがあればとことん調整したい。 こういったサウンドの願いは ADX2LEのオーサリングツールを使うことで、簡単に定義することができます。 ゲームサウンド再生におけるほぼすべての基本的な動作を網羅しています。 また、それらの再生するプログラムもものすごく簡単にできるようになります。 音をなるべく簡単に扱う ターゲットコンフィグで設定が楽に ADX2のオーサリングツールでは「ターゲットコンフィグ」というデータセットによって、ビルド内容を置き換える機能があります。 ここには、主に圧縮音声についての設定が行えます。 より低負荷を求められるターゲットの場合、再生時の負荷の軽いコーデック。 PCなど負荷に余裕があるターゲットでは音質の良いコーデックを選びます。 ADX2のオーサリングツールでは、初期状態で良さげなコーデックが選択されています。 例えば、PS4とかなら専用の再生モジュールを利用して再生とかします。 これらをゲーム内容や状況に応じて変更することもできます。 ADX(低負荷)HCA(高圧縮)HCA-MX(制限付き低負荷高圧縮)のエンコード設定のデフォルトが指定できます。 波形単位での設定はデフォルトから変えたい時だけ設定します。 デフォルト設定は機種に対して良い感じの設定になっていますが、用途に合わせて変更してください。 ただ、今時ではADXはさすがにもう古いかもしれません。(ファミコン後期くらいの時代のもの) HCAがおすすめです。(HCAは最近のもの) エンコード品質ひとつ変えるだけで、さらに小さく。 デフォルトではエンコード品質は「高品質」。でも、もっと圧縮したい場合は「最高圧縮」を選択することでさらに小さくなります。 (HCA,HCA-MX時のみ) メモリ再生かストリーム再生かをデータ側で設定 ストリームという言葉は「流れ」という意味。 溜め込まずに流し続けるという意味で、 コンピュータのメモリをちょっとしか使わずに再生する方式。 一方、メモリを大量に消費して、どーんと読み込んでしまうのがメモリ再生方式。 音声(ダイアログ)や、楽曲など長めの音声データはストリーム再生にすると、メモリを低消費にすることができます。 再生中常にちょっとずつ読む処理のために若干の遅延が発生します。 逆に効果音など、応答性の良い音の場合はメモリ再生方式が良いです。 再生前にどーんと読み込んでいるので、メモリは食いますが即座に再生が可能です。 すべてのデータがストリームで良い場合は、ターゲットコンフィグでまとめて設定しても良いです。 なお、マテリアルフォルダでデフォルト設定を上書きできるので、特定のフォルダだけストリームといった事もできます。 これらの設定はデータ作成時に行うので、 プログラムからはメモリかストリームか気にせず Play("CueName"); といった関数で簡単再生できます。 プログラマが意識するのはボイスプールというボイスの事前予約数を決めておくことくらいです。 プログラマは利用するメモリを固定でとり、そのとる量によって、発音数がきまります。 その発音数の制限内であればいくらでも鳴らせます。 鳴らし過ぎた場合は、プライオリティの低い音、古い音から消えていきます。 プライオリティの設定はデータ側で行います。 重要で消えて欲しくない音はデザイナがプライオリティを上げておくことで、 プログラマは意識せずに再生をがんがんできます。 ADX2は、プライオリティに従って低いものは止めたりします。 キューシートは大量音声時に役立つ 通常、音声を大量に扱う場合、用途によって大きく2つの方法が考えられます(3つありますが最初の2つ) 複数の波形情報を個々に管理する場合(波形個別再生) 波形単位は非常に分かりやすい。数が少ない場合はこれで問題ない。 音声(ダイアログ)など、一言しゃべるだけで再利用されない場合など、使って、破棄がはっきりしているものはこれ。 大量にある時のデータ管理(ロード、破棄単位)など管理がしっかりしたものはこちら。 ある程度の単位でまとめて一ファイルにパックする(あるいはバンク化する) もし、一音ごとに1ファイルに分かれているとその管理だけでも大変なことになるのが分かります。 例えば、再生するには、開いて、再生し、再生が終わったら閉じる。 これだけでも、大変です。音が鳴り終わるのをプログラムが知っている必要があったり、どれくらいの頻度で監視すれば良いかなど。 同時に複数鳴っていたり、それらがいつどのタイミングで必要かを、何かしら別情報で管理するとしても、 数が膨大になるとミスが発生しがちです。 さらに、ADX2では、波形の再利用によるバリエーションによって容量を小さくしつつも、自然な音のバリエーションが増やせる強力な機能があるのですが、 効果音などで、同じ波形を共通で利用しているものはキューシート内で一つの波形メモリとして共有されることで実現しています。 これらも、他の波形に依存する形となるため、個々に扱うと大変です。 ※プログラマであれば、グラフィックでいうところのテクスチャアトラス的なものといえば、用途が分かりやすいかもしれません。 足音のバリエーションなどピッチパラメータやタイミングだけ変更したようなデータが多い場合はこちらがの方がメモリが少なくすみます。 パックする単位はシーン、ステージ、キャラクター、エネミー種類など工夫が必要になります。 1ファイルで扱うので、プログラムやバージョン管理はシンプルになります。 ストリーム波形もパック? キューシートは再生パラメータ情報はacbとして出力されます。 メモリ再生の場合、acb側に波形情報がパックされます。 ストリーム再生の場合、波形要素はawbという別ファイルで出力されます。これはストリーム用なので、メモリに展開しない(例えばCDメディアやSDカード上などに置かれる)ため、別ファイルとなり配置場所が変わる場合があります。(iOSなどではもはやメディアの区別がありませんが...速度の違うメモリ上に配置されるイメージで、若干遅く容量が多いのはストリーム、超高速なのはメモリという使い分け) ADX2ではストリームのパラメータ情報はacb側、波形情報はawb側に出力され非常に小さいメモリとしてロードすることができます。 ストリーム再生のPrep再生で遅延を無くす 条件が整わないと完全に遅延0とまではいきませんが、ストリーム再生のオーバーヘッドを極力少なくする方法としてPrep再生があります。 これは、ポーズ状態で再生を行うことで、ストリーム用の先頭部分をバッファ上にあらかじめ溜め込む動作で、ポーズを解除すると即座にストリームが開始される仕組みです。(いわゆる先読みのテクニック) ゲームでは先読みして、ユーザーにロードの遅延を気がつかせない工夫が必要な場合が多く、 この解釈をもう少し広げると、キューシートによってある程度の処理ブロック単位で先読みし、その分の音声データ情報を用意しておくという事ができます。 3Dサウンドの扱いについて ADX2では、パン3Dと3Dポジショニングの2つの音像のコントロール方法が提供されています。 パン3D 現実のスピーカ配置に従った位置で指定します。 2mixの再生などはこちら。 水平面の360度の方向で音の位置を指定します。 5.1chオーディオシステムへの親和性があります。 環境音など音像をサラウンドに配置して広がりをもたせたい場合もこちら。 ダイアログなどセンタースピーカから出したいといったものもこちらで指定可能。(3Dのボリュームを下げる) 3Dポジショニング ゲーム中のxyz座標によって位置を指定します。 仮想空間上で、リスナー、ソースそれぞれの相対距離で設定情報(距離減衰、最小(Near)、最大(Far))から自動的に音量や再生角度が計算されます。 プログラムで3D空間上に音を配置する場合はこちらが便利です。 スペーシャルオーディオ オブジェクトベースオーディオなどとも呼ばれます。 最近のVRなどでの再生で、3Dポジショニングとほぼ同等に扱えますが、上下方向の音の変化も扱えます。 変わりに少し特殊な経路で再生が必要になります。 センター、LFE出力 センタースピーカやLFEなど特殊装置への出力は、センド方式となっています。 センターへどれだけ出力するかといった指定になります。 パン3Dや3Dポジショニングとは別系統の出力があると思うと良いです。 他にもADX2Pro版ではリモコンのスピーカやヘッドセットなど様々な出力への対応が可能。(基本的にメモリが許す限り何chでも拡張可能) バスセンド DSPバス設定という、少し重めのエフェクトを動かすためのバスがデフォルトで8本用意されています。 これらにエフェクトの設定、ルーティングなどを設定し、各音はバスのセンド量だけを指定することで、 多くの音声にエフェクト効果をかける事ができます。 例えば、各音毎にエフェクトをかけてしまうと発音数xエフェクト処理負荷となってしまうので、バス(ミキサーみたいなもの)にまとめて、一括でかけてしまう方法をとります。 バスセンド-スナップショット エフェクトのルーティング、アルゴリズムの配置は変更せず、パラメータだけ異なるものをスナップショットのグループとして持つ事ができます。 同じDSPバス設定に依存するスナップショットは、個別に持てるパラメータの設定集(プリセットのうなイメージ)で持て、 これをプログラムから名前で指定することでリアルタイムに変更が可能となる。変化にかかる時間を指定することで、パラメータも補間が行われ スムーズにエフェクトを変化させる事ができます。 音にこだわった演出ができるようになる 音の消え方 例えば、音を止める時、ブツッと切れるのではなく、ちょっとフェードアウトしたい場合は、エンベロープのリリースタイムを20msecとか指定するだけでOK。音毎にリリースタイムを指定できる。 音を重ねない ボイスリミットグループを使うと、同じグループの音の数を制限することができる。例えば、同じ声優のボイスはリミット数1にしておくだけで、必ずどれか一つしか鳴らないようにできる。 ルールは、音にプライオリティ(優先度)をつけておくだけでOK。 ボイスリミット:確実にリミットしたい時に使う。 ボイスは一つの波形をデコードする単位。キューをリクエストすると音を一つ鳴らすために使われる。あらかじめ初期化時に用意したボイスプールと呼ばれるものから利用される。ボイスプール側にも最大数があるが、ボイスリミットグループ単位でもリミットできる。 例えば、ストリーミングは最大2音のみといった形で制限できる。2音以上リクエストするとリミットがかかりプライオリティの低いものが停止する。 キューリミット:キュー単位でリミットしたい時に使う。リリース分はオーバーラップする。 カテゴリで再生中の音を管理 カテゴリって聞き慣れない人もいるかもしれません。 プログラムではBGMカテゴリとかよく使われるのですが、 ゲームの効果音とBGM(iTunesミュージック)は同時に鳴っても問題ないとかいった場合に、 音が何のカテゴリなのかが重要になります。 ゲームでもBGMだといっておけば、iTunesで音が再生している時は、効果音だけのモードにしたいといったことが可能になります。 カテゴリでボリュームを変えたり、ミュート(まったく鳴らさない)といったことができます。 カテゴリキューリミットを使うことで、どのカテゴリにどれだけ発音を許すか?といった設定ができます。 カテゴリリスト:カテゴリのボリューム調整などにも便利 カテゴリプライオリティ:カテゴリ内でのプライオリティ設定で優先度も音ごとにコントロールできる。 距離に応じて変化させる 音が遠くで鳴ると小さくなる(3Dポジションサウンド)が可能です。(距離減衰設定) さらに、こだわりたければ 距離に応じてローパスフィルターをかけたり(距離AISAC)角度によって音色を変えたり(角度AISAC)といった変化のデザインが可能です。 音が近い時と遠い時での変化、近い時には音につつまれているといった表現で、 インテリア(内部)かエクステリア(外部)かといった設定も可能で、 最小距離以内の場合、各スピーカからもれる(ダイバシティー)ようになり、自然な通過音が可能となっている。 音源の大きさといったもので、スプレッドの設定もできます。 これらの設定はどこまでやるかは悩みどころですが、 プログラムには負担がかからないように、(データ差し替え程度) 後から一部の音だけでもこだわるといったことができます。 状況によって色々変化する音の扱いを楽にしたい 例えば耳元だと「びゅん」って鳴るけど、遠くだと「スカッ」。武器の振る速度に応じて変化する音、武器の大きさによって変化する音、武器の耐久度によって変化する音など。なんとなく一つの音なんだけど、ちょっとパラメータ付与して音にバリエーションをつける事が簡単にできます。複数のパラメータ変化や波形の切り替えなどをまとめてキューとして呼びます。 任意のコントローラパラメータを追加できる AISACを使うことで、ゲーム内の変化量を音色変化に割り当てる事が可能。グラフで直感的にパラメータ指定が可能。 状況に応じて変化する音のデザインが楽になる。(例えば、高度に応じて音にハイパスフィルターをかけるなど) エフェクトが楽に使える 空間演出のためのリバーブ設定、エコー(ディレイ)などをバスエフェクトとして使える。 また、音毎(インサーションエフェクト)としてバンドパス、バイクアッドフィルターの2系統を同時に使用可能。 モジュレーションエフェクト AISACオートモジュレーションを使うと、LFOのような音のパラメータの揺れを作る事が可能になる。 ピッチを揺らしてビブラートしたり、ボリューム変化でトレモロ効果、パンを相対的にふることでロータリースピーカのような効果も可能。 複数のモジュレータを並列(最大8個)で扱える。 AISACコントロールのグラフも描けるので、モジュレータを直列に設定することも可能。 カテゴリ間の相互作用が可能 REACTを使うと、ある音が鳴った時だけ音量を下げるといった事が可能。 音量以外にもAISACも変化可能なので、音量ではなくローパスやハイパスフィルターにしたり、バスセンドを変えたりといった事も可能です。 プログラムは一切かかわらずにデータ側でやろうとおもえばできます。 シーケンサーやDAWのようなエディター CRI Atom CraftはDAWのようにマルチトラックでタイムライン上に波形を置いたり、オートメーションカーブを書いたりできます。 波形のループ(自動繰り返し間隔)機能や、再生タイミングのランダム(プリディレイランダム)といったゲーム向けの拡張も行われています。 トラックをランダムに切り替えて再生するといった機能もあります。 ほとんどすべての設定をこのタイムライン上で行え、プレビュー再生も行えるため、直感的に作業が行えます。 複数まとめてパラメータを変更したい場合はタイムラインではなくリスト編集やプロパティ編集が行えます。 これに登録する素材は、使い慣れたProtoolsやLogicなどで作ります。 DAWに似ていますが、リアルタイムの制御のためのオーサリングツールになります。 ボリュームの操作や、リアルタイムにクロスフェードするなどといった、DAWでは設定できない プログラムで行うような処理を簡単にするために、ここで苦労をしておくことになります。 階層構造でパラメータ管理 一つの音(キュー)も以下のような構造を持ちます。 キュー トラック ウェーブフォーム 各階層それぞれにピッチ、ボリュームなどのパラメータが存在し、それぞれ内容によって、乗算、加算されるようになっています。 階層の下位のものは、上位の設定に従うという事を覚えておくと、まとめてパラーメータ変更などに役に立ちます。 ほとんどの場合、キューのパラメータだけで事足りる形となっています。 AISACを付ける位置などで影響範囲が変化します。 サブシンセ キューの中にキューと同じ構造を入れ子で持つ事ができます。 キュー トラック サブシンセ トラック ウェーブフォーム サブシンセ側でランダムなども可能です。 キューリンク キューの中にサブシンセとしてではなく他のキューを取り込む事が出来ます。 キュー トラック キューリンク 同じキューシート内のキューをキューリンク、他のキューシートのキューを指定する場合外部キューリンクと呼びます。 サブシンセとの違いとして、複数のキューから参照される場合に使用します。(カットシーンで再利用するなど) 外部キューリンクは、同時に読み込まれたキューシートから検索して再生を行います。(サウンドを差し替えるといった用途) AISACリンク AISACも共有したい場合、リファンレンスAISACやグローバルAISACとしてつくることができます。 キュー AISACリンク 階層構造でウェーブフォーム(マテリアル)パラメータ管理 一つの波形の圧縮の設定、メモリかストリームかといった情報はマテリアルフォルダで管理されています。 階層の例 マテリアルルート マテリアルサブフォルダ マテリアル(wavファイル) 各階層それぞれにコーデックの指定ができますが、初期状態では、デフォルトという設定が割り当てられています。 デフォルト設定は、上位のフォルダの設定に従うようになっています。 さらにマテリアルルートの上位には、ターゲットコンフィグという、機種別設定によるデフォルトパラメータの設定があります。 基本的なデフォルト設定は、ターゲットコンフィグ側で行い、各フォルダの単位で個別設定をオーバライド(上書き)するイメージで管理します。 コマンドラインツール(ADX2Pro版のみ) 大量のデータをデイリービルドしたいといった場合などコマンドラインツール上でビルドする事ができます。 音程をつけて鳴らすのが簡単 音を1cent単位(1/100半音)2オクターブまで上げられる。(初期化時の上限サンプリングレートを越えない限り上げられる) 圧縮音声のデメリットがない(ゲーム的な意味で) ゲーム用なので、mp3などにあるような細かなピッチの変更ができないとか変化までのレーテンシーとか気にせず使える。沢山鳴らしてもOK。 例えばmp3は可変ビットレートなどで再生中のサイズ変化が多様になり処理にピークが発生しやすい(データ依存による処理負荷変動が多い)が、 hcaでは固定ビットレートなので処理負荷が一定で見積もりしやすい。音の劣化具合もシンプルなので調整しやすい。 ループもサンプル単位で指定可能だし、シーク再生(途中からの再生)もmsec単位で可能。 複数波形の同時リクエスト、再生もずれない。(メモリ再生時。ストリーム再生時はprep(先読み)再生を使う必要あり。) 大量発音時の制限がかけられる 発音が多重に鳴ってしまうと耳障りな音がある場合、その音(音色、キュー)単位で全体の再生数を制限する事ができる。 音をカテゴリに分けて音量コントロールしたり、カテゴリ毎にリミット(再生数制限)をかけられる。 ランダムな要素に音の変化を加える事ができるようになる 例えば、花火アプリで、花火の「大きさ」「種類」「距離」などパラメータに応じた音のデザインが可能になります。 さらに、「天候」「場所」などの違いも演出できるようになります。 車のエンジン音なら「回転数」「負荷」「速度」など。地面の材質などによる変化などもこだわる事ができます。 料理アプリなら、油の温度変化による音の違い。とかお湯が湧く時の音の鳴るケトルのシミュレーションとか。 これらは、プログラムでも設定できるかもしれませんが、ADX2LEのオーサリングツールを使う事で楽に作れます。 AISACという機能が任意のコントローラとなります。 曲が切り替わる時のこだわり演出 遷移時のみ音が鳴るといったものが作れます。複数のトラックの同期再生などのデザインが、 オーサリングツール上でできます。 ブロック再生を使います。 環境音のデザイン ランダムといってもでたらめではなく、どれくらいの割合で、どんな音が鳴るのか?といった設定も オーサリングツール上で調整できます。(ランダム確率、再生確率、複数波形組み合わせ) トラックのランダム再生やパラメータのランダム再生などを使用する事で、音素材が少しでも多様な音を再生できます。 (キューのシンセタイプのランダム、AIASCのコントロールタイプのランダム) 再生中の音に対しての情報取得が可能 再生している音の音量(Peak,RMS値)が取得できます。(Pro版ではラウドネス値も) 再生時刻を取り出したりできるので、音ゲーなど作る時に重宝します。 音の一時停止や、再開、時刻指定による途中から再生なども可能です。 音声解析その他(Pro版のみ) ピッチやBPM検出機能。外部入力やメモリ上の波形へのエフェクト処理(リバーブ、コンプ、ピッチシフト、解析など他ADX2で使用できる全てのエフェクト)およびターゲット上でのリアルタイムエンコード。 圧縮音声を使っても苦労しない 基本的な設定は、メモリ再生かストリーム再生かの2択。さらに細かい設定として圧縮品質も選択できます。 メモリ再生はメモリ上に展開されるため、高速に再生が可能です。 ストリーム再生は、メディアから直接読みながら再生するので、BGMや台詞などに向いています。 圧縮品質を変えてもほとんど処理負荷は変化しません。圧縮率が高い方が処理量が減る分動作が軽くなる場合もあります。 acb,awbという独自フォーマットのため、ダウンロードコンテンツ化できる acb,awbは波形情報や再生パラメータなど複数の音をひとまとめにした独自形式のファイルです。 これらを読み込むだけで音が鳴らせるので、差し替えや追加が容易です。 ストリーム再生が手軽且つローコスト 流量管理をやってくれるので、裏読みしても音が途切れない よほどの高負荷状態が続かないかぎり音とびは発生しません。 ADX2ではサウンドの為に、ファイルシステムや動画再生も含めて音の問題を解決します。 それでも音が途切れる場合は初期設定で調整、変更する事ができます。 多言語リソース管理 波形レベルでの差し替えによりacb単位(複数ボイスをまとまった形)で言語別データを作る事ができます。 これにより、プログラムからは言語によってacbを読み替えるだけでOK。 #adx2leハッシュタグをつけてtwitterでつぶやく adx2le に関するツイート!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http /.test(d.location)? http https ;if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+ //platform.twitter.com/widgets.js ;fjs.parentNode.insertBefore(js,fjs);}}(document, script , twitter-wjs ); まずはマニュアルを読む http //www.criware.jp/adx2le/docs/plugin/contents/index.html http //www.criware.jp/adx2le/docs/tools/index.html ダウンロードして解凍したcriフォルダの中の documentationフォルダ内のindex_criadx2le_unity_j.htmlを読みます。 CRI_ADX2LE_Unity_Plugin_Manual_j.chmを読みます。 サンプルを動かす unity/samples/criatom/basic/Assets/Scenes/Scene_01_SimplePlayback.unity をダブルクリックして開く サンプルがうまく動かないよくある例:日本語のパスが含まれる環境でexeが動作している(Unityの日本語パスのバグの影響) ちなみに日本語パスの問題はADX2製品版では解決済みで、ADX2LEに反映されるのは春頃になる予定。 もういちどマニュアルを読む CRI_ADX2LE_Unity_Plugin_Manual_j.chmを読みます。 Macの人はchmビューワーとかで見れます。 CriAtomCraft.exeを動かす 波形(.wav)はC /WINDOWS/Media/にあるファイルとかをマテリアルとかに入れてみる。 DemoProj さまざまな音が作れる例 ADX2LEの本 http //books.shoeisha.co.jp/book/b108260.html ADX2LEのトレーニング http //www.adx2le.com/training/index.html ADX2LEスクリプト http //www53.atwiki.jp/soundtasukeai/pages/22.html ADX2LEの動画解説 ADX2LEの動画解説 ADX2ユーザー助け合い所で聞いてみる https //www.facebook.com/groups/adx2userj/ 問題が発生したら聞く習慣をつける。遠慮は要りません。なぜなら皆が同じ事を疑問に思っているから。 誰かの解決策が、みんなのためになります。 助け合い所を活用しましょう。 りんごのツイート @ringo_cri からのツイート ADX2LEリアルタイム検索 ADX2LEリアルタイム検索 ADX2 x Oculus http //ch.cri-mw.co.jp/all/55925.html よくある勘違い 波形編集ソフトではない →音の鳴らし方を工夫できる。波形編集ソフトは別途必要。 音楽作成ソフトではない →音楽の組み合わせやつながりを工夫できる。音楽素材はDAWなどで作る必要あり。 効果音集ではない →ある程度の効果音を作る事はできる。 MAソフトではない →ある程度の動画に音を付ける事は可能。 シーケンサではない →ある程度のシーケンス(時間軸配置)は可能。 録音機能はない。→再生した音を録音(バウンス)は可能だが、マイクからの入力した音の録音とかの機能は無い。 Unityのサウンドシステムを叩いているわけではない →独自のサウンドシステムが動く。ネイティブプラグインなので高速。 何でもできるわけではない →基本的な演出はやりやすい。特殊な演出は工夫次第。足りないものは要望次第。(LE版は直接要望はNGですが、twitterとかに) Pro版の機能がゆっくりLE版にも反映していきます。(急ぎ必要な場合はPro版を) 制限される事 Windowsのツールでデータ作成する。(Macだけでは使えない。MacではParallelsなどVM環境が必要。) 良い事 Unity上での管理がシンプルになる。(機種共通(PC,Mac,iOS,Android)で扱えるので、SwitchPlatformで待たされる時間が少なく済む) サウンド演出の調整のほとんどがデータ側で行える。(バージョン管理がしやすくなる) 大量のデータも独自形式でパックしているため、管理しやすい。サウンドの方とのデータのやりとりなど分業しやすい。 その気になれば、プログラムでもいろいろ音が弄れる。 ADX2が持つ独自の圧縮アルゴリズムなので、機種依存が無い。ループやシーク再生が可能。 HCA-MXを使うと再生数が増えた時にmp3やoggレベルの圧縮率なのに、ADPCM再生より処理負荷が軽くなる。 圧縮音声なのでメモリ(ストリーミング帯域、ダウンロードコンテンツ)に優しい。 ADX2Pro版とのデータ互換性 ADX2Pro版に移行すればストリーミング(音声、動画、データ)に強い独自のファイルシステムや動画再生など魅力的な機能にグレードアップできる。 また暗号化も可能なのでコンテンツ保護も強い。 さまざまなゲーム機や環境(家庭用、携帯ゲーム機、アーケード機、組み込み機器、WebAudio、UE4など)のネイティブ環境に対応しているためデータ移行がスムーズに行える。 基本的に古いデータもランタイムで再生可能なため数年のオーダーでデータ互換性も保たれる。 何がやりたいのか自問自答する 音を作る、鳴らす、といった事は様々な方法が考えられます。 大抵のことはプログラムを組むことでできるでしょうし、より自由度もあるでしょう。 ADX2を使うことで 圧縮音声を意識せず簡単に扱える。 オーサリングツールによって、ゲームに組み込む前に、複数音の再生、それらの相互作用、音量の調整ができる。 ランダマイズによるメモリ使用量を押さえたバリエーションの増量が可能。 シーケンスによる波形の長さ以上のサウンド演出。 音量調整に加え、発音制御、発音時のふるまい、カテゴリによるバランス調整、 リアルタイムの変化音のデザインとコントロールをデザインし、直感的に扱える。 例えば、「たった一つの音」を鳴らすためにADX2LEが必要か考えてみます。 もし、エンジン音や時間によって多様に変化する音であれば、ADX2LEのAISAC機能が役に立ちます。 短い波形を数音、ただ単純再生するのであれば、標準のオーディオソリューションでやった方が楽でしょう。 でも、 「たった一つの音」の単純再生でも、とても長いBGMのようなものであれば、圧縮の利点、圧縮時の音質での利点がある可能性があります。 圧縮音声を用意するのもオーサリングツール上で簡単に行えます。実際の音質で確認できます。 圧縮音声は好みがあります。ADX2LEではADPCMとHCAで大きく音質、圧縮率が異なります。 BGMの場合よくイントロ付きループ(サステインループ、ABループ)といった波形にループポイントを設定してイントロ部分は初回しか鳴らないといったデータを用意する事があります。ADX2LEではループをサポートしているので、ADX,HCAどちらのコーデックでも手間をかけずにループ再生が可能です。 HCAであれば、圧縮率を5段階で指定できます。よほどの高級オーディオ機器につなぐのでない限り、最高圧縮でも問題ない場合がほとんどです。 音は圧縮時に変化するので、それらも考慮して調整が要るかもしれません。例えば、圧縮率を上げると何らかの音の情報が欠けてしまいます。可聴範囲外の要素や、位相情報(ステレオ感)、時間変化粒度など。 これらの変化を必ず耳で確認し、問題ないかチェックする必要があります。 また、負荷の問題、ワークフローの変化による作業効率の比較も重要でしょう。 もし、ADX2LEと長く付き合うのであれば、将来との互換性なども重要です。極端にADX2LEの機能に依存したデータを作った時、将来においてそれが再利用されるシーンでの保証はありません。とても長い期間(例えば5年10年とか)使う場合、標準的、一般的なソリューションの選択も考慮した方が良いでしょう。 これらを比較、検証し、 自分のコンテンツでは有用だと判断した場合にのみ利用する事が良いです。 とりあえずは、手元にある波形を入れてみて一音だけでも鳴らしてみる。 それにかかる手間とやりたい事へのトータルの手間を比較してみると良い。 と、固くかいてありますが、基本無料ですので、サウンドプログラムのノウハウを勉強したり、どんなものか興味本位で触ってみたり、 ゲームジャムで実践するために調べたりといった感じで触れて行くのもあり。 手軽に音がこだわれる環境を手にした時、もう他のサウンドシステムでは満足出来なくなっているでしょう。 ご意見はこちら 名前 コメント
https://w.atwiki.jp/kauzpon/pages/20.html
年打率試合打数安打本塁打打点盗塁三振失策猛打賞 第1季.271144576156 第2季 第3季 通算.271144576156 バスターランチャー ◆lE945iQJOE 第1季日にち別ID バスターランチャー ◆lE945iQJOE 第2季日にち別ID バスターランチャー ◆lE945iQJOE 第3季日にち別ID
https://w.atwiki.jp/skygaleon/pages/718.html
番号:EX069 レアリティ:★★★★★ コスト:6 属性:青 分類:男性 識別:A145 配置:後○中○前× 能力:威光・治癒・躍神・光壁 使用制限:1枚制限 ステータス LV 0 1 2 3 4 5 6 7 8 9 HP 150 153 156 159 162 165 168 171 174 180 AT 40 40 41 42 43 44 44 45 46 48 AG 32 32 32 32 32 32 32 32 32 32 カード説明 トリムールティでは世界の維持を司る三大神の一柱。普段は端正な顔立ちの美青年の姿を取っているが、世界に悪が蔓延し始めると自身を様々な姿に変身させて地上に降臨し、世界のバランスを修復すると言われている。 行動 特技:世界の維持(ゲージ:4) 味方全体にかかっているマイナス効果を打ち消し、HPを最大値を超えてAT分回復する 発動確率:100% 効果1属性:無 効果1範囲:絶対 攻撃範囲 ■■■ ■■■ ■■■ 効果2属性:無 効果2範囲:絶対 攻撃範囲 ■■■ ■■■ ■■■ 前列:激震のスダルシャナ 範囲内の敵で3回一番HPが低いキャラへAT×0.7のダメージを与え、範囲内の敵の属性を赤属性にする(1ターン) 発動確率:100% 効果1属性:青 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■□□ 75% ×0.7 ■□□ 20% ×1.05 ■□□ 5% ×1.4 効果2属性:無 効果2範囲:相対 攻撃範囲 クリティカル率 効果係数 ■□□ 75% ×0.7 ■□□ 20% ×1.05 ■□□ 5% ×1.4 中列:十字のスダルシャナ 範囲内の敵にAT×0.5のダメージを与える 発動確率:100% 効果1属性:青 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 □■□ 60% ×0.5 □■□ 30% ×0.6 □■□ 10% ×0.75 効果2属性:青 効果2範囲:相対 攻撃範囲 クリティカル率 効果係数 □□□ 60% ×0.5 ■■■ 30% ×0.6 □□□ 10% ×0.75 後列:維持の理 青属性の味方全員のHPを平均化し、HPをAT×0.4回復する 発動確率:100% 効果1属性:無 効果1範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■■■ 75% ×0.4 ■■■ 20% ×0.6 ■■■ 5% ×0.8 効果2属性:無 効果2範囲:絶対 攻撃範囲 クリティカル率 効果係数 ■■■ 75% ×0.4 ■■■ 20% ×0.6 ■■■ 5% ×0.8 考察 SRヴィシュヌのリメイクカード。 EXのLEなので1枚制限になったものの、特技の性能変化により色々な威光デッキが作りやすくなった。 また、前中列の攻撃性能変更により攻撃が当たらずに詰むパターンが無くなった。 特技:味方全体のマイナス効果打ち消し+最大値を超える全体回復 SRヴィシュヌからの大きな変更点。 敵味方全体打ち消しだったものが、味方のマイナス効果のみ打ち消しに変更。 これにより味方のバフを消さずに済むようになったため、防御的な青威光以外も非常に組みやすくなった。 ただ、敵の打ち消しがなくなったのは地味に痛いところではある。 前列:敵前列から低HPサーチで3回青属性の連続攻撃+敵前列を赤属性に変更 敵前列とサーチ範囲は狭いものの倍率、攻撃回数、クリティカル倍率と優秀な攻撃。 また、おまけについてくる敵前列の赤属性変更もこのカード自体のAGが32とそこそこ早いため生かしやすい。 SRヴィシュヌとは攻撃方法が変わっているので前列にこのカードのみが残っても詰むというパターンがなくなった。 中列:青属性の中列薙ぎ+突進の複合範囲攻撃 LE補正なのか同じ攻撃範囲のEX/SRセクメトや、似た攻撃範囲のEX/SRカーリーよりも倍率が0.05高い。 前列の行動は強いが、中列の攻撃も十分強いため無理に前列に出なくてもアタッカーとして活躍させやすい。 中列薙ぎ+突進という疑似十字に変更になったため、この位置でも相手に攻撃が当たらず詰むパターンはなくなった。 後列:青属性限定の味方全体HP平均化+全体回復 最大値を超えて回復の多い青属性なので、使い道はありそうではあるが…平均化によってHPが上限値を超えることはない。 なので上限を超えたキャラが平均化を受けるとただHPが減るだけになる。 蘇生後以外ではここに来ることはまずないだろう。 関連ページ 【第3弾】エクストラ リインカネーションの書3 SRヴィシュヌ
https://w.atwiki.jp/pismonia/pages/42.html
25 名前: 名盤さん 03/07/07 18 55 ID U2KoAotq Pixies/Trompe le monde ★★★★ 1 Trompe le monde ★★★★ ギターが面白い。1曲目から勢い出まくり。 2 Planet of sound ★★★★★ 凄すぎ。さらに勢い加速。ここまでハイテンション なものはそうそうお目にかかれない。宇宙旅行してる気になれる。 3 Alec Eiffel ★★★★☆ まだ勢いが衰えない。歌詞が面白い。 4 The sad punk ★★★☆ 短いイントロで勢いが一度途切れる。しかしまた復活する。 5 Head on ★★★ ジザメリのカバー。なかなか良い。 6 U-Mass ★★★ さすがに続いてきた勢いは消え去る。でもこの曲は良い。ギターはキンクス風。 7 Palace of the brine ★★☆ だんだんダメになってってしまう。でもこのアルバム では数少ない、キムのバックボーカルが聞ける。 8 Letter to memphis ★★☆ ここらへんちょっとだるい。でもわざとかも知れない。 9 Bird dream of the olympus mons ★★ なんかU2っぽい。 10 Space(I believe in) ★★★★☆ 傑作じゃないか?ファンクの要素も入ってる。 何よりも"jefrey with one f jeffery"の部分が頭に残る。 11 Subbacultcha ★★★ それなりの良さ。 12 Distance Equals ★★★☆ 微妙なメロディーが好き。少しラテンっぽい。 13 Lovely Day ★★☆ 頭にあんまり残らない。 14 Motorway to roswell ★★★ まぁ平均点。 15 The navajo know. ★★★★ やっと最後でまた良い曲が来る。やっぱキムの バックボーカルって良いわ。 16~19のBone machine,Cactus,Debaser,Gouge awayのライブver 全て★★★★~★★★★★ 好きだけどこう見ると確かにあまり良いアルバムじゃないなぁと思えてくるw あまりにも「平均的な曲」が多すぎてレビューに困ってしまった。 しかし1~3までの流れは秀逸なんてもんじゃないし、ちょこちょこ良い曲が出てくる。 ほぼブラック一人で作ったらしく、喧嘩状態にあったキムはふてくされたように ほとんど出てこない。しかし逆にキムの偉大さが分かってしまう。 最後のライブ4曲と合わせて★四つが妥当か。少し悲しいpixies最後の一枚。