Python 如何控制麦克风的音量大小?

要做个类似于 QQ 上录音检测的功能。
Python 如何控制麦克风的音量大小?

6 回复

I remeber that the python has a win32 api package, that should work.


import pyaudio
import numpy as np
import struct

def set_microphone_volume(volume_level=0.5, duration=5):
    """
    实时调整麦克风输入音量
    
    参数:
        volume_level: 音量级别 (0.0-1.0)
        duration: 录音时长(秒)
    """
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 44100
    
    p = pyaudio.PyAudio()
    
    # 获取默认输入设备信息
    default_input = p.get_default_input_device_info()
    print(f"使用设备: {default_input['name']}")
    
    def callback(in_data, frame_count, time_info, status):
        # 将字节数据转换为numpy数组
        audio_data = np.frombuffer(in_data, dtype=np.int16)
        
        # 应用音量调整
        adjusted_data = (audio_data * volume_level).astype(np.int16)
        
        # 转换回字节数据
        out_data = adjusted_data.tobytes()
        
        return (out_data, pyaudio.paContinue)
    
    # 打开音频流
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    output=True,  # 同时输出以便监听
                    frames_per_buffer=CHUNK,
                    stream_callback=callback)
    
    print(f"开始录音,音量级别: {volume_level}")
    print("按Ctrl+C停止...")
    
    stream.start_stream()
    
    try:
        # 保持录音状态
        import time
        time.sleep(duration)
    except KeyboardInterrupt:
        pass
    finally:
        stream.stop_stream()
        stream.close()
        p.terminate()
        print("录音结束")

# 使用示例
if __name__ == "__main__":
    # 设置50%音量录制5秒
    set_microphone_volume(volume_level=0.5, duration=5)
    
    # 设置20%音量录制3秒
    # set_microphone_volume(volume_level=0.2, duration=3)

代码说明:

  1. 核心原理:通过PyAudio的回调函数实时处理音频数据流,在回调中对原始音频数据乘以音量系数来调整增益。

  2. 关键步骤

    • 使用pyaudio.PyAudio()初始化音频接口
    • 在回调函数中将输入的字节数据转换为numpy数组
    • 对音频数据应用音量系数(audio_data * volume_level
    • 将处理后的数据转换回字节格式输出
  3. 参数说明

    • volume_level:0.0为静音,1.0为原始音量,可设置为大于1的值进行放大(但可能导致削波)
    • duration:控制录音时长
  4. 依赖安装

    pip install pyaudio numpy
    

注意:Windows系统可能需要先安装PortAudio,macOS可能需要brew install portaudio

这个方案直接操作音频数据流,适用于实时音频处理场景。如果只是需要调整系统级的麦克风音量,可以考虑使用系统API(如Windows的pycaw库),但跨平台性较差。

简单说就是实时处理音频流数据来调音量。

能控制整个系统的声音了

只能调整扬声器的声音, 麦克风的还不能调。 哈哈 好难受

之前我用的时候只用了一小部分功能

回到顶部