Last active
May 5, 2022 04:46
-
-
Save esperecyan/2cf0e6ce0c8a46966ea9568ee7ae8ac4 to your computer and use it in GitHub Desktop.
『launch-syncroom-vcas.ps1.jse』SteamVR起動、SYNCROOM起動、既定のデバイス切り替え、VirtualCast起動を一括して順に行うPowerShellスクリプト。VirtualCast のユーザーコミュニティ「Vキャスカラオケ部」のメタカラ喫茶における利用を想定。 https://twitter.com/masanyu_vr/status/1447145052271099904
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#@~^AQAAAA==~IAAAAA==^#~@ function toPSString(str) { return "'" + str.replace(/%/g, '"%"').replace(/'/g, "''") + "'"; } /* -*- mode: powershell;-*- | |
<#*/ var command = 'param($AudioOutput, $VirtualCastPath)' | |
+ '; $_PSCommandPath = ' + toPSString(WSH.ScriptFullName) | |
+ '; Invoke-Expression (Get-Content ' + toPSString(WSH.ScriptFullName) + ' -Encoding UTF8 -Raw)'; | |
var namePattern = /^-(?!(?:b(?:and|or|xor|not)|sh[lr]|[ic]?(?:eq|ne|gt|ge|lt|le|(?:not)?(?:like|match|contains|in)|replace|split)|join|is(?:not)?|as|and|or|not|f)$)[0-9a-z]+$/i; | |
var args = ''; for (var i = 0; i < WSH.Arguments.Length; i++) { | |
var arg = WSH.Arguments(i); args += ' ' + (namePattern.test(arg) ? arg : toPSString(arg)); } | |
WSH.CreateObject('WScript.Shell').Run('PowerShell -Command &{' + command + '}' + args, 0); /*#> | |
<# | |
.SYNOPSIS | |
以下を行います。 | |
1. SteamVR起動 / SYNCROOM起動 | |
2. 既定のデバイス切り替え | |
3. VirtualCast起動 | |
.DESCRIPTION | |
あらかじめ nircmd.exe をパスの通った場所へ置いておく必要があります。 | |
https://www.nirsoft.net/utils/nircmd.html | |
また、設定→システム→サウンド→右の関連項目の「サウンド コントロール パネル」から、ASIOの再生デバイス名を「ASIOスピーカー」など、他と識別できるものに変えておきます。 | |
本ファイルのショートカットを作成し、以下のようにコマンドラインオプションを追加します。 | |
launch-syncroom-vcas.ps1.jse -AudioOutput ASIOスピーカー | |
SPDX-License-Identifier: MPL-2.0 | |
Version: 1.0.0 | |
Author: 100の人 | |
配布元: https://gist.github.com/esperecyan | |
【更新履歴】 | |
v1.0.0 (2022-05-05) | |
公開 | |
.PARAMETER AudioOutput | |
出力 (再生) デバイス名。 | |
.PARAMETER VirtualCastPath | |
VirtualCast/config.yaml を利用する場合のパス。 | |
https://github.com/esperecyan/virtualcast-config | |
#> | |
using namespace System.IO | |
using namespace System.Linq | |
using namespace System.Windows.Forms | |
using namespace System.Management.Automation | |
$DYLAY_AFTER_STEAMVR_STARTUP_SECONDS = 5 | |
$MAX_WAITING_STEAMVR_STARTUP_SECONDS = 10 | |
$SYNCROOM_EXE_PATH = 'C:\Program Files\Yamaha\SYNCROOM\SYNCROOM.exe' | |
$STEAMVR_PROCESS_NAME = 'vrmonitor' | |
$STEAMVR_EXE_URL = 'steam://rungameid/250820' | |
$VIRTUALCAST_EXE_URL = 'steam://rungameid/947890' | |
<# | |
.SYNOPSIS | |
例外の詳細を警告ダイアログで表示します。 | |
.PARAMETER ErrorRecord | |
catch { } 内の $_ 。 | |
#> | |
function Show-ErrorDialog([ErrorRecord]$ErrorRecord) | |
{ | |
[MessageBox]::Show( | |
"例外が発生しました。スクリプトを終了します。`n`n【例外メッセージ】(Ctrl+Cでコピー可能)`n$('-' * 78)`n" ` | |
+ "$($ErrorRecord | Out-String)`nScriptStackTrace:`n$($ErrorRecord.ScriptStackTrace)", | |
$SCRIPT_NAME, | |
[MessageBoxButtons]::OK, | |
[MessageBoxIcon]::Error, | |
[MessageBoxDefaultButton]::Button1, | |
[MessageBoxOptions]::DefaultDesktopOnly | |
) | Out-Null | |
} | |
try { Set-StrictMode -Version Latest; $ErrorActionPreference = 'Stop'; | |
Add-Type -AssemblyName @('System.Windows.Forms') | |
$SCRIPT_NAME = 'launch-syncroom-vcas.ps1.jse' | |
if (!$AudioOutput) { | |
throw (New-Object ArgumentException 'コマンドラインオプション -AudioOutput が設定されていません。') | |
} | |
# SteamVRとSYNCROOMを起動 | |
explorer $STEAMVR_EXE_URL | |
Start-Process -FilePath $SYNCROOM_EXE_PATH | |
# SteamVRの起動を待機 | |
$steamVRActive = $false | |
for ($i = 0; !$steamVRActive -and $i -lt $MAX_WAITING_STEAMVR_STARTUP_SECONDS; $i++) { | |
if ($i -gt 0) { | |
Start-Sleep -Seconds 1 | |
} | |
foreach ($process in (Get-Process)) { | |
if ($process.Name -eq $STEAMVR_PROCESS_NAME) { | |
$steamVRActive = $true | |
break | |
} | |
} | |
} | |
if (!$steamVRActive) { | |
throw "SteamVRの起動を確認できません。" | |
} | |
Start-Sleep -Seconds $DYLAY_AFTER_STEAMVR_STARTUP_SECONDS | |
# 既定デバイスの切り替え | |
nircmd setdefaultsounddevice $AudioOutput 1 | |
# VirtualCastの起動 | |
if ($VirtualCastPath) { | |
Start-Process -FilePath $VirtualCastPath | |
} else { | |
explorer $VIRTUALCAST_EXE_URL | |
} | |
} catch { | |
Show-ErrorDialog -ErrorRecord $_ | |
} # */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment