【问题标题】:I want to detect the volume of my speakers while playing a video through a variable我想在通过变量播放视频时检测扬声器的音量
【发布时间】:2024-04-16 17:15:01
【问题描述】:

所以我最近一直在尝试使用 Python,我真正想知道的一件事是如何将扬声器作为输入设备并作为回报输出一个显示音量的数字。 例如:

0 如果没有视频播放。 如果是播客,则为 30-50。 70-90 如果是烟花表演。 如果只是频率,则为 100。

感谢任何可以提供帮助的人:)

【问题讨论】:

  • 这有一些关于如何获取音频的替代方法:*.com/questions/35344649/…。仅使用操作系统的本机 api 可能是最强大的,您使用的是 Windows、Linux 还是 Mac .. 还是 iOS 或 Android?

标签: python python-3.x audio


【解决方案1】:

我认为您正在寻找的是声音环回,即记录声音设备的输出。

如果您在 Windows 上,则有一个 PyAudio 的分支:pyaudio_portaudio

正如项目主页上的示例所示,它就像这样简单:

import pyaudio
p = pyaudio.PyAudio()
stream = p.open([...], as_loopback = True)

然后你只需计算音频流的幅度。

【讨论】:

  • 所以“流”将成为声音的价值?
  • 没错,stream 将根据给open() 的参数包含实际的声音样本,例如16 位整数或浮点数。
  • 那么我真的可以这样做吗:在一个while循环中打印(流)它会打印音量?
  • 否,stream 包含原始、PCM encoded 音频样本。体积可以通过不同的方式从样本中计算出来。峰值只是一个区间的最大绝对值。由于音频可能包含虚假的高幅度峰值,这不是一个很好的衡量整体间隔的方法,因此计算root mean square(一种平均值)通常更有用。
  • 对不起,回复的太晚了,我刚刚成功安装了Pyaudio,你能提供一个公式,我可以分配给一个等于音量的变量。*页面并不是我能得到的最有用的东西,所以我可以只使用一个变量来根据音量输出 0-100 之间的数字吗?