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, }) }