Skip to content

Instantly share code, notes, and snippets.

@esperecyan
Last active May 5, 2022 04:46
Show Gist options
  • Save esperecyan/2cf0e6ce0c8a46966ea9568ee7ae8ac4 to your computer and use it in GitHub Desktop.
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
#@~^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