From 9dbf5c2a085645447b4ac6a854c383cdc346a94c Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Sun, 5 Apr 2026 12:32:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=A4=EB=94=94=EC=98=A4=20=EB=94=94?= =?UTF-8?q?=EB=B0=94=EC=9D=B4=EC=8A=A4:=20Win32=5FSoundDevice=20=E2=86=92?= =?UTF-8?q?=20AudioEndpoint=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EB=A7=88=EC=9D=B4=ED=81=AC/=EC=8A=A4=ED=94=BC?= =?UTF-8?q?=EC=BB=A4=20=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/services/AudioCaptureService.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/services/AudioCaptureService.ts b/src/main/services/AudioCaptureService.ts index 4385c9a..8ec608d 100644 --- a/src/main/services/AudioCaptureService.ts +++ b/src/main/services/AudioCaptureService.ts @@ -226,9 +226,11 @@ class AudioCaptureService extends EventEmitter { ] try { - // PowerShell로 Windows 오디오 입력 디바이스 열거 + // PowerShell로 Windows 오디오 입력(마이크) 엔드포인트 열거 + // Get-PnpDevice -Class AudioEndpoint: 실제 오디오 엔드포인트 (마이크/스피커) + // MediaCategory가 'Capture' 또는 FriendlyName에 마이크 관련 키워드 포함 const { execSync } = await import('child_process') - const psCommand = `[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-CimInstance Win32_SoundDevice | Where-Object { $_.StatusInfo -eq 3 } | Select-Object -Property DeviceID, Name | ConvertTo-Json -Compress` + const psCommand = `[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-PnpDevice -Class AudioEndpoint -Status OK | Select-Object InstanceId, FriendlyName | ConvertTo-Json -Compress` const output = execSync(`powershell -NoProfile -Command "${psCommand}"`, { encoding: 'utf8', timeout: 5000, @@ -239,11 +241,11 @@ class AudioCaptureService extends EventEmitter { const parsed: unknown = JSON.parse(output.startsWith('[') ? output : `[${output}]`) if (Array.isArray(parsed)) { for (const dev of parsed) { - const d = dev as { DeviceID?: string; Name?: string } - if (d.DeviceID && d.Name) { + const d = dev as { InstanceId?: string; FriendlyName?: string } + if (d.InstanceId && d.FriendlyName) { devices.push({ - deviceId: d.DeviceID, - label: d.Name, + deviceId: d.FriendlyName, // SoX -t waveaudio는 이름으로 매칭 + label: d.FriendlyName, isDefault: false, }) }