获取python的音频设备指南

发布于 2025-02-02 23:48:48 字数 1407 浏览 3 评论 0 原文

我正在尝试获得音频设备的GUID。可以在注册表 Computer \ Hkey_local_machine \ Software \ Microsoft \ Microsoft \ Windows \ CurrentVersion \ Mmdevices \ Mmdevices \ Mmdevices \ Audio \ Render \ render \ 该GUID应该看起来像 {0.0.0.000000000000}。 -47EA-BF9F-59D5F2B43}

基本上是这样。但是我想在python

我已经尝试过自己,但是我只能找到使用命令行并在Python中解析它,

import subprocess

sd = subprocess.run(
    ["pnputil", "/enum-devices", "/connected", "/class", "AudioEndpoint"],
    capture_output=True,
    text=True,
)

output = sd.stdout.split("\n")[1:-1]

def getDevices(devices):
    deviceList = {}
    for device in range(len(devices)):
        if "Instance ID:" in devices[device]:
            deviceList[devices[device+1].split(":")[-1].strip()] = devices[device].split("\\")[-1].strip()
    return deviceList

print(getDevices(output))

这使我

{'Headset (Soundcore Life Q30 Hands-Free)': '{0.0.0.00000000}.{4ac89ef7-f00d-4069-b96b-421bd3276295}', 'Speakers (Echo Dot-BQP)': '{0.0.0.00000000}.{8085b216-297a-4d02-bc3d-83b997b79524}', 'Headphones (Soundcore Life Q30)': '{0.0.0.00000000}.{37e73048-025a-47ea-bf9f-59d5ef8f2b43}'}

跳上了更好的方法

I am trying to get GUID of audio device. The GUID can be found in registry Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\ the guid should look like {0.0.0.00000000}.{37e73048-025a-47ea-bf9f-59d5ef8f2b43}

basically like this. but I want in python Getting GUID of audio output device (speaker,headphones)

I've tried myself but only thing I can find is to use command line and parse it in Python

import subprocess

sd = subprocess.run(
    ["pnputil", "/enum-devices", "/connected", "/class", "AudioEndpoint"],
    capture_output=True,
    text=True,
)

output = sd.stdout.split("\n")[1:-1]

def getDevices(devices):
    deviceList = {}
    for device in range(len(devices)):
        if "Instance ID:" in devices[device]:
            deviceList[devices[device+1].split(":")[-1].strip()] = devices[device].split("\\")[-1].strip()
    return deviceList

print(getDevices(output))

which got me

{'Headset (Soundcore Life Q30 Hands-Free)': '{0.0.0.00000000}.{4ac89ef7-f00d-4069-b96b-421bd3276295}', 'Speakers (Echo Dot-BQP)': '{0.0.0.00000000}.{8085b216-297a-4d02-bc3d-83b997b79524}', 'Headphones (Soundcore Life Q30)': '{0.0.0.00000000}.{37e73048-025a-47ea-bf9f-59d5ef8f2b43}'}

Hopping there is better way

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰雪梦之恋 2025-02-09 23:48:48
from __future__ import print_function
import comtypes
from pycaw.pycaw import AudioUtilities, IMMDeviceEnumerator, EDataFlow, DEVICE_STATE
from pycaw.constants import CLSID_MMDeviceEnumerator

def MyGetAudioDevices(direction="in", State = DEVICE_STATE.ACTIVE.value):
    devices = []
    # for all use EDataFlow.eAll.value
    if direction == "in":
        Flow = EDataFlow.eCapture.value     # 1
    else:
        Flow = EDataFlow.eRender.value      # 0
    
    deviceEnumerator = comtypes.CoCreateInstance(
        CLSID_MMDeviceEnumerator,
        IMMDeviceEnumerator,
        comtypes.CLSCTX_INPROC_SERVER)
    if deviceEnumerator is None:
        return devices
    

    collection = deviceEnumerator.EnumAudioEndpoints(Flow, State)
    if collection is None:
        return devices

    count = collection.GetCount()
    for i in range(count):
        dev = collection.Item(i)
        if dev is not None:
            if not ": None" in str(AudioUtilities.CreateDevice(dev)):
                devices.append(AudioUtilities.CreateDevice(dev))
    return devices

output_device = MyGetAudioDevices("out")
input_device = MyGetAudioDevices("in")

print(output_device)
print(input_device)

这对我有用

from __future__ import print_function
import comtypes
from pycaw.pycaw import AudioUtilities, IMMDeviceEnumerator, EDataFlow, DEVICE_STATE
from pycaw.constants import CLSID_MMDeviceEnumerator

def MyGetAudioDevices(direction="in", State = DEVICE_STATE.ACTIVE.value):
    devices = []
    # for all use EDataFlow.eAll.value
    if direction == "in":
        Flow = EDataFlow.eCapture.value     # 1
    else:
        Flow = EDataFlow.eRender.value      # 0
    
    deviceEnumerator = comtypes.CoCreateInstance(
        CLSID_MMDeviceEnumerator,
        IMMDeviceEnumerator,
        comtypes.CLSCTX_INPROC_SERVER)
    if deviceEnumerator is None:
        return devices
    

    collection = deviceEnumerator.EnumAudioEndpoints(Flow, State)
    if collection is None:
        return devices

    count = collection.GetCount()
    for i in range(count):
        dev = collection.Item(i)
        if dev is not None:
            if not ": None" in str(AudioUtilities.CreateDevice(dev)):
                devices.append(AudioUtilities.CreateDevice(dev))
    return devices

output_device = MyGetAudioDevices("out")
input_device = MyGetAudioDevices("in")

print(output_device)
print(input_device)

This worked for me

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文