news 2026/4/23 15:52:49

python 操作麦克风

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 操作麦克风

目录

查询麦克风:

测试麦克风:


查询麦克风:

import sounddevice as sd # 1. 查看所有主机API print("=== All Host APIs ===") for i, h in enumerate(sd.query_hostapis()): print(f"HostAPI {i}: {h['name']}") print("\n=== All Devices ===") # 2. 查看所有设备 for i, d in enumerate(sd.query_devices()): hostapi = sd.query_hostapis(d['hostapi']) device_type = [] if d['max_input_channels'] > 0: device_type.append("Input") if d['max_output_channels'] > 0: device_type.append("Output") print(f"Device {i}: {d['name']}") print(f" HostAPI: {hostapi['name']}") print(f" Type: {', '.join(device_type)}") print(f" Input channels: {d['max_input_channels']}") print(f" Output channels: {d['max_output_channels']}") print() # 3. 尝试使用默认设备 print("\n=== Testing Default Devices ===") print(f"Default input device: {sd.default.device[0]}") print(f"Default output device: {sd.default.device[1]}") # 4. 直接使用默认输入设备 try: def audio_callback(indata, frames, time, status): if status: print(f"Status: {status}") print(f"Audio shape: {indata.shape}") with sd.InputStream(samplerate=16000, channels=1, dtype='int16', blocksize=320, callback=audio_callback): input("🎤 Recording with default device... Press Enter to stop\n") except Exception as e: print(f"Error: {e}") # 5. 或者,列出所有输入设备 print("\n=== All Input Devices ===") input_devices = [] for i, d in enumerate(sd.query_devices()): if d['max_input_channels'] > 0: hostapi = sd.query_hostapis(d['hostapi']) input_devices.append((i, d, hostapi['name'])) print(f"Device {i}: {d['name']}") print(f" HostAPI: {hostapi['name']}") print(f" Channels: {d['max_input_channels']}") # 6. 选择一个可用的输入设备 if input_devices: print("\n=== Try using first available input device ===") mic_index = input_devices[0][0] device_info = input_devices[0][1] channels = min(1, device_info['max_input_channels']) # 使用单声道更通用 try: with sd.InputStream(device=mic_index, samplerate=16000, channels=channels, dtype='int16', blocksize=320, callback=lambda indata, frames, time, status: print(f"Audio shape: {indata.shape}")): input(f"🎤 Recording with {device_info['name']}... Press Enter to stop\n") except Exception as e: print(f"Error with device {mic_index}: {e}") else: print("No input devices found at all!")

测试麦克风:

import sounddevice as sd import numpy as np # 直接使用设备10 mic_index = 10 print("Testing microphone...") def callback(indata, frames, time, status): volume = np.linalg.norm(indata) * 10 print(f"Microphone level: {volume:.2f}", end='\r') # 尝试不同的参数组合 settings_to_try = [ {'samplerate': 16000, 'channels': 1, 'dtype': 'int16'}, {'samplerate': 44100, 'channels': 1, 'dtype': 'float32'}, {'samplerate': 48000, 'channels': 1, 'dtype': 'int16'}, ] for i, settings in enumerate(settings_to_try): print(f"\nTry {i+1}: {settings}") try: with sd.InputStream( device=mic_index, callback=callback, **settings ): input(f"Settings {i+1} working! Press Enter to stop...\n") break except Exception as e: print(f"Failed: {e}")

读取麦克风:

import sounddevice as sd import numpy as np from scipy import signal mic_index = 10 target_samplerate = 16000 # 目标采样率 original_samplerate = 44100 # 设备支持的采样率 print(f"Recording at {original_samplerate}Hz, resampling to {target_samplerate}Hz") def callback(indata, frames, time, status): """接收44100Hz音频,重采样到16000Hz""" if status: print(status) # 如果是立体声,转换为单声道 if indata.shape[1] > 1: audio = np.mean(indata, axis=1) else: audio = indata.flatten() # 重采样到16000Hz num_samples = int(len(audio) * target_samplerate / original_samplerate) resampled = signal.resample(audio, num_samples) print(f"Original: {len(audio)} samples, Resampled: {len(resampled)} samples", end='\r') with sd.InputStream(device=mic_index, samplerate=original_samplerate, channels=1, dtype='float32', callback=callback): input("Recording and resampling... Press Enter to stop\n")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:19:58

YOLOFuse API接口设计草案:为后续产品化做准备

YOLOFuse API接口设计:迈向产品化的工程实践 在智能安防、自动驾驶和夜间监控等现实场景中,单一可见光图像的检测能力正面临严峻挑战。低光照、雾霾遮挡、伪装干扰等问题频繁导致传统目标检测模型漏检率上升,系统可靠性下降。这背后的核心矛盾…

作者头像 李华
网站建设 2026/4/23 11:25:48

【Java毕设全套源码+文档】基于springboot的半成品配菜平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 12:59:11

【嵌入式开发必看】:C语言处理YUV视频数据的5个核心技巧

第一章:C语言处理YUV视频数据的核心挑战在多媒体开发领域,C语言因其高效性和底层控制能力被广泛应用于视频数据的处理。其中,YUV格式作为图像采集和编码中的主流色彩空间,其数据结构与RGB存在显著差异,给开发者带来了一…

作者头像 李华
网站建设 2026/4/23 12:55:52

YOLOFuse Docker镜像拉取命令分享:一行搞定部署

YOLOFuse Docker镜像拉取命令分享:一行搞定部署 在夜间监控、边境安防或工业巡检场景中,摄像头常常面临低照度、烟雾遮挡等恶劣环境。仅靠可见光图像已难以稳定检测行人或车辆——这时候,红外(IR)成像的优势就凸显出来…

作者头像 李华
网站建设 2026/4/23 14:30:36

基于Crowbar电路的双馈风力发电机DFIG低电压穿越LVRT仿真之旅

基于Crowbar电路的双馈风力发电机DFIG低电压穿越LVRT仿真模型 Matlab/Simulink仿真模型 在电网电压跌落时crowbar电路工作,抑制了转子过电流 crowbar电路的电阻阻值以及投入时间均可调节,可以自行模拟多组不同程度的电压跌落深度,跌落持续时间…

作者头像 李华
网站建设 2026/4/23 15:29:53

YOLOFuse K80还能用吗?老旧GPU兼容性说明

YOLOFuse K80还能用吗?老旧GPU兼容性说明 在高校实验室的某个角落,一台尘封已久的服务器悄然启动,搭载着两块NVIDIA Tesla K80显卡。它的主人正试图复现一篇最新的多模态目标检测论文——但手头没有RTX 3090,更别提A100了。他皱着…

作者头像 李华