見出し画像

INFINITASをASIO対応させて遅延とオサラバしよう

どうも。
おうちビートマニア、楽しんでいらっしゃるでしょうか。

今回はINFINITASをASIO対応させて"音声の遅延を"限りなくゼロにしようという記事です。

ぶっちゃけググるとASIO対応化ツールが出てくるのですが、それの設定方法が誰でもわかるほど簡単とは言いづらく、むしろかなり複雑で難しいので、誰でもできるよう備忘録を書いておこうと思い執筆しております。

では早速本題に入りましょう。

・そもそもASIOって?対応させるとどうなるの?

※ここら辺の事どうでもいい!!とか知ってる!!って人は飛ばしてください

・ASIOとは

このあたりの知識ガチでにわかなので、話半分で聞いてください。
もし詳しい方いらっしゃったらコメントで訂正してください。どうぞよろしくお願いいたします。

ASIOは、Windows用に開発されたオーディオインターフェースとWindowsを繋ぐためのドライバです。
PCに接続されたあらゆる機器は、Windowsがその機器の使い方をわかるようにするために、その機器のWindows用の取扱説明書をPCに入れてやる必要があります。
それが「ドライバ」です。
とはいえこのドライバはUSB接続の機器とかだと、接続したときに勝手にインストールされるので、さして気にすることはないでしょう。

オーディオに関するドライバは、Windowsが標準で用意してくれてるものがいくつかあって、そのおかげで特にドライバを入れなくても音を聞くことは出来ます。
ですがこれらは、Windowsの内部のオーディオミキサーを経由して音が出ます。我々がアプリの音量をWindowsの設定から個々に弄れるのはこのおかげです。
ところがこのオーディオミキサーを経由すると音質が下がっちまう!!ってのが問題だったので、オーディオミキサーを経由せずに直接音送ろうぜ!ということで作られたのがASIOなわけです。

オーディオミキサーを経由せず、直接音を送るため、とても低遅延で、さらに音質劣化も少ない。それがASIOなのです。

・対応させるとどうなる?WASAPI排他モードからどう変わる?

さて、INFINITASが標準搭載しているオーディオ出力方法として、「WASAPI排他モード」があります。

WASAPIには排他モードと共有モードがありますが、排他モードにすると前述のオーディオミキサーを経由せず、共有モードだと経由します。
INFINITASをOBSで配信したい!とか思ったときに、排他モードだと音を取り込めないのはWindows内部を経由しないからなんですね。

WASAPI排他モードもASIOと同じでオーディオミキサーを経由しないなら、変わんないんじゃね?と思われるかもしれませんが、実際にWASAPI排他モードとASIOの遅延を比較したデータによると、ASIOの方が圧倒的に低遅延を実現できていることがわかります。
(参考記事:https://frchick.blog.fc2.com/blog-entry-551.html?sp)

Beatmaniaは一般的な音楽ゲームと違い、ノーツに合わせてボタンをたたくと、そのノーツにアサインされた音がボタンをたたいたタイミングで鳴る、という性質の音楽ゲームですので、ボタンを押してから実際に音が鳴るまでに遅延があると、その遅れに引っ張られて正確にリズムをキープすることが難しくなってしまいます。
音声遅延を限りなくなくすことで、より快適にBeatmaniaをプレイすることが出来るようになるでしょう。

・実際にINFINITASをASIOに対応させよう

だれかさん さんが開発してくださった素晴らしいツールを使用してASIOに対応させていきます。

こちらのツールです
(https://github.com/darekasan/inf_launch_ext.git)

・前提条件

※こちらについては引用したツールのasio.mdファイルに詳しく書かれています。

INFINITASには設定画面にはありませんが、実はASIO出力モードが隠されています。
KONAMIは以前、ARESPEARというゲーミングPCを販売していました。
ARESPEARのページには「INFINITASの大型アップデートでARESPEARゲーミングPCに完全対応!」と銘打ったページが存在し、そこには"LIGHTNING MODELと同等のサウンドレスポンス!"との記載があります

画像

このARESPEARに搭載されているサウンドカードがASUSのXONAR AEというサウンドカードであり、INFINITASはこのXONAR AEのみASIO出力に対応しています。

ただし、このXONAR AEというサウンドカードは古い製品であり、既に生産終了しているのか、かなり品薄な状態となっています。

ではどうするのかというと、INFINITASに「現在使用しているサウンドカードはXONAR AEですよ」と誤認させる事で、無理矢理ASIOに対応させるわけですが、当然誤認させるサウンドカード(もしくはオーディオインターフェイス)はXONAR AEと同じデータ形式に対応している必要があります。

INFINITASでASIOに対応させるためには、"44.1khz / 24bit (ASIOSTInt24LSB)"のデータ形式に対応したサウンドカード、もしくはオーディオインターフェイスである必要があります。

これからサウンドカードやオーディオインターフェイスをINFINITASの為に購入する場合は、このデータ形式に対応した製品を購入しましょう。

既に何かしらの製品を持っている場合は、ASIO capsというツールで上記のデータ形式に対応しているか調べることができます。

※ただし、上記のデータ形式に対応していないように見えても、問題なく再生できる可能性もあります。実際、私所持しているオーディオインターフェイス(UR24C 44.1khz / 32bit)では問題なく再生できました。ですがなるべく44.1khz / 24bitに対応したサウンドカードもしくはオーディオインターフェイスを購入しましょう。
非対応機種の動作保証はありません。


・INFINITASにXONAR AEだと誤認させよう

順を追って手順を解説していきます。

①レジストリエディタを開く
Windowsマークを右クリックし、「ファイル名を指定して実行」を選択すると以下のようなウィンドウが表示されるので、"regedit"と入力してレジストリエディタを開きましょう。

画像
Win+X → Rキーでも開けます


②使用している機器のASIOドライバを見つける
表示された画面の左側のツリーから、
HKEY_LOCAL_MACHINE → SOFTWARE → ASIO
の順に開いていきましょう

画像

このASIOのフォルダの中に、貴方の製品のASIOドライバがあるはずです。
(私の場合は"Yamaha Steinberg USB ASIO"ですね)


③偽装用のキーを作成する
ASIOフォルダの上で右クリックし、新規→キーを選択しましょう。

画像
キーを作成する

すると新しいキーが作成されるので、名前を
"XONAR SOUND CARD(64)"
と、します。

次に、作成したキーを選択した後、レジストリエディタの右側の何もないエリアで右クリックし、新規→文字列値を選択して値を"2つ"作成し、
それぞれの名前を
"CLSID", "Description"
とします。

画像
値を作成する
画像
この状態にしましょう


④使いたい機器のASIOドライバから、値をコピーする

画面左のツリーから、使いたい機器のASIOドライバをダブルクリックして開くと、画面右側にそのドライバのCLSIDが表示されるはずです。

そのCLSIDと書いてある部分をダブルクリックすると、次の画面が表示されます。


画像
値のデータを間違って消してしまった場合は、キャンセルをクリックして
もう一度やり直しましょう

ここに表示されている値のデータをコピーします。

次に画面左のツリーからXONAR SOUND CARD(64)を選択し、右側のCLSIDをダブルクリックすると、値のデータが空欄になっていると思いますので、そこに先ほどコピーした値のデータをコピーします。

最後に、そのまま今度はDescriptionをダブルクリックして、値のデータに
"XONAR SOUND CARD(64)"と入力しましょう。

以上でASIOの設定は完了です。


・スクリプトを使ってINFINITASをASIOモードで起動させよう

ここから少し難しくなってきます

①スクリプトをダウンロードする

こちらのページにアクセスします。
右側のダウンロードボタンからスクリプトをダウンロードします。

画像

ドキュメントには、ダウンロードする場所はどこでもいいと記載されていますが、
INFINITASのインストールフォルダに配置すると後々エラーを吐くので、必ずINFINITASのインストールフォルダ以外に配置してください。


②PowerShellを開いて、ダウンロードしたフォルダに行く

Windowsマークを右クリックし、ターミナル(管理者)をクリックしましょう。

次に、スクリプトをダウンロードしたフォルダへ行き、パスをコピーします。

画像

PowerShellにコマンドを打ち込んで、ダウンロードしたフォルダに移動します。

cd コピーしたパス

を入力してください。

画像

次に以下のコマンドを入力します

Set-ExecutionPolicy Bypass

このコマンドを実行したとき、
何かしらのエラーが出る時があります。
対処法を記載しておきます。

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。
既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプションを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを変更するには、"Set-ExecutionPolicy
-Scope CurrentUser" を実行してください。

管理者として実行されていないため起こるエラーです。
Windowsマークを右クリックして、ターミナル(管理者)をクリックして、
②からやり直してください。

Set-ExecutionPolicy : Windows PowerShell により実行ポリシーは正常に更新されましたが、設定は範囲がより明確に定義されたポリシーで上書きされました。
この上書きにより、シェルで現在有効な実行ポリシーRemoteSigned が保持されます。実行ポリシーの設定を表示するには、「Get-ExecutionPolicy -List」と入力してください。詳細については、"Get-Help Set-ExecutionPolicy" を参照してください。

このようなエラーが発生した際は、一度次のコマンドを入力してみてください。

Get-ExecutionPolicy -List

すると次のようなリストが表示されるはずです。

画像

この場合、CurrentUserを先にBypassにしてやることでエラーが回避できます。
Undefinedは未定義という意味なので気にしなくていいです。
Undefinedでないものを、リストの上から順にBypassにしていきましょう。
例えばCurrentUserをBypassにする場合、次のコマンドを実行します。

Set-ExecutionPolicy Bypass -Scope CurrentUser


画像
エラーが出なくなりました。


③スクリプトを実行する

いよいよスクリプトを実行します。
次のコマンドをコピーして、PowerShellに貼り付けてください。

.\inf_launch_ext.ps1
currently command: "INFINITASのランチャーのパス" "%1"

script path: スクリプトのパス(今回の例ではG:\Download\inf_launch_ext.ps1)
game path: INFINITASのインストールフォルダのパス

0: revert to default
1: copy script file to game directory and set to new script path
number->:

このコマンドは、コピペしてそのまま実行しても上手くいきません。
INFINITASのランチャーのパス、スクリプトのパス、INFINITASのインストールフォルダのパスを、あなたの環境からコピーして入力する必要があるからです。
間違わないための方法を解説します。

まず"currently command: "以降に張り付けるINFINITASのランチャーのパスを取得する方法です。
INFINITASのインストールフォルダへ行きましょう。

画像
こんな感じの構成になっているはずです

そうしたら、launcher→modulesの順に開いてください。
bm2dx_launcher.exeを右クリックし、パスのコピーをクリックします。

画像

コピー出来たら、PowerShellで左右キーでカーソルを移動させて、コピーしたパスを貼り付けましょう。

貼り付けたら恐らく
currently command: ""C:\Games\beatmania IIDX INFINITAS\launcher\modules\bm2dx_launcher.exe"" "%1"
のように、ダブルクォーテーションマーク( " )がダブってしまっていると思いますので、それぞれ削除して
currently command: "C:\Games\beatmania IIDX INFINITAS\\launcher\modules\bm2dx_launcher.exe" "%1"
このように修正してください。


次に"game path:"以降に貼り付けるINFINITASのインストールフォルダのパスです。
こちらは簡単で、INFINITASのインストールフォルダのパスをコピーするだけです。

画像
赤枠の何もない場所をクリックするとパスがコピーできるようになるので、
コピーしましょう

コピーしたら、PowerShellで"game path: "以降に貼り付けましょう。
貼り付けたパスの両端のダブルクォーテーションマークは削除してください。


最後に"script path:"以降に貼り付けるスクリプトのパスです。
こちらも簡単です。
ダウンロードしたスクリプトの場所まで行きましょう。
inf_launch_ext.ps1を右クリックして、パスのコピーです。


画像

コピーしたら、PowerShellで"script path: "以降に貼り付けましょう。
貼り付けたパスの両端のダブルクォーテーションマークは削除してください。


これら三つのパスを貼り付けることができたら、Enterを押して実行しましょう

実行すると数字を聞かれます。
0と入力してEnterを押すとデフォルト状態、つまり普段どうり公式のランチャーが起動するようになります。スクリプトをアンインストールするときはこちらを選択しましょう。
デフォルト状態に戻さずにスクリプトファイルを削除してしまうとランチャーが起動できなくなって詰みます。

1と入力してEnterを押せば、特殊なランチャーが有効になります。
done.  Press enter key to exit.
と表示されたらもう閉じて大丈夫です。
Enterを押すといっぱいエラーが出ますが気にしなくて構いません。


・完了!

以上でインストールは完了です。お疲れ様でした。
普段通りWebからランチャーを起動すると、オプション選択画面が表示されます。

Please select option.
0 : Launcher
1 : Normal
2 : Normal + window mode
3 : ASIO
4 : ASIO + window mode
5 : Run from Steam
number(last time: 0):

単にASIOモードで起動したいだけなら3を入力してEnterでOKです。
その他のオプションについては公式ドキュメントを参照して下さい。
無事、あなたの使用しているサウンドカード又はオーディオインターフェイスから音が出力されれば、成功です。やったね。


・おわりに

今回はINFINITASのASIO化についてなるべく分かりやすくなるように解説しました。
半ば個人的備忘録も兼ねているのと、ここまでかみ砕いてなお分からないことは、恐らく僕にもわからないのでコメントで何か聞かれても答えません。
また、このnoteを参考にして行った行為によって生じる問題等の責任は一切負いません。
最後にこのスクリプトを製作してくださっただれかさん さんにこの上ない感謝を送らせていただきます。本当にありがとうございます。

それではまたどこかで。

いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
INFINITASをASIO対応させて遅延とオサラバしよう|Alpha
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1