Ubuntu外设(麦克风)音量控制

20次阅读
没有评论

共计 1525 个字符,预计需要花费 4 分钟才能阅读完成。

ubuntu20.04 中实测有效,其他操作系统待验证

def find_mic_control(card_numbers):
    cmd = ['amixer', '-c', card_numbers, 'contents']
    output = subprocess.check_output(cmd).decode()

    for line in output.splitlines():
        if 'name=' in line and 'Mic Capture Volume' in line:
            # 提取 numid=x
            numid = int(line.split('numid=')[1].split(',')[0])
            return numid
    return None

def find_alsa_card_by_usb_id(vendor_product_id):
    """
    根据 USB ID(格式为 xxxx:xxxx)查找 ALSA 声卡编号。:param vendor_product_id: USB ID,例如 '3634:4155'
    :return: 对应的声卡编号列表(可能多个)"""
    cards = []
    base_path = '/proc/asound'

    for entry in os.listdir(base_path):
        full_path = os.path.join(base_path, entry)

        # 确保是目录,并且是以 "card" 开头的目录(如 card0)if os.path.isdir(full_path) and entry.startswith('card'):
            try:
                card_number = entry.replace('card', '')  # 提取数字部分
                int(card_number)  # 确保是数字

                usbid_path = os.path.join(full_path, 'usbid')
                if os.path.exists(usbid_path):
                    with open(usbid_path) as f:
                        usbid = f.read().strip().upper()
                        if vendor_product_id.upper() in usbid.upper():
                            cards.append(int(card_number))
            except ValueError:
                # 如果 card_number 不是数字,跳过
                continue

    return cards

usb_id = '3634:4155'  # 注意:不带 USB 前缀
print(f"[INFO] Looking for ALSA sound card(s) matching USB ID: {usb_id}")
card_numbers = str(find_alsa_card_by_usb_id(usb_id)[0])
print(f"Found card_numbers={card_numbers}")

mic_numid = find_mic_control(card_numbers)
print(f"Found Mic Capture Volume at numid={mic_numid}")

subprocess.run(['amixer', '-c', card_numbers, '-M', 'cset', f'numid={mic_numid}', '0'])   # 麦克风静音 
正文完
 0
icvuln
版权声明:本站原创文章,由 icvuln 于2025-07-24发表,共计1525字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)