【Python通过分贝监测Windows系统是否有声音播放】

Python监测Windows系统是否有音频播放

项目自动化中有一个涉及到播放音频的脚本case
要判断下是否真的播放成功了,系统声卡是否有声音出来,网上找了好久没找到啥解决方案,综合了树莓派对声音实时监控的 解决方案生成了下面的方法,记录下

import pyaudio
import numpy as np

    def monitor_video():
        """
        声音监测
        :return:
        """
        p = pyaudio.PyAudio()
        stream = p.open(format=pyaudio.paInt16,
                        channels=2,
                        rate=44100,
                        input=True,
                        frames_per_buffer=1024)
        print("开始监测是否有声音播放")
        for i in range(0, 10):
            data = stream.read(1024)
            audio_data = np.fromstring(data, dtype=np.short)
            temp = np.max(audio_data)
            print(temp)
            time.sleep(1)
            if i >= 4 and temp >= 200:
                print("检测到信号")
                print('当前阈值:', temp)
                return True
        print("监测10秒结束,没有监测到当前电脑设备有音频正在播放")
        stream.stop_stream()
        stream.close()
        p.terminate()
        return False

大致思路就是 通过 pyaudio 结合 numpy 进行一个录制的音频分贝判断监测
解决思路:录制一小段的声音后再去检测分贝,如果超过阈值(自己定的一个 有声跟没声的一个值,这里我定了一个200)就意味监听到有声音播放,否则就继续录制。
这里就是连续10秒去监测,去掉前5秒的分贝,一是因为为了让声音播放一段时间后再判断,二是因为项目那个音频播放有个渐进,所以等待下。

下面再记录下如何判断Windows系统当前是否静音,以及系统音量多少以及去设置音量的方法:

from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume

devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(
    IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))

# 判断是否静音,mute为1代表是静音,为0代表不是静音
mute = volume.GetMute()
if mute == 1:
    print('当前是静音状态')
else:
    print('当前是非静音状态')

# 获取音量值,0.0代表最大,-65.25代表最小
vl = volume.GetMasterVolumeLevel()
print('当前音量值为%s' % vl)

# 获取音量范围,我的电脑经测试是(-65.25, 0.0, 0.03125),第一个应该代表最小值,第二个代表最大值,第三个不知道是干嘛的。也就是音量从大到小是0.0到-65.25这个范围
vr = volume.GetVolumeRange()
print('当前音量值为%s' % str(vr))

# 设置音量, 比如-13.6代表音量是40,0.0代表音量是100
volume.SetMasterVolumeLevel(-13.6, None)
print('已设置音量为40%')

猜你喜欢

转载自blog.csdn.net/Yxf11824/article/details/124715892