我知道
ISimpleAudioVolume
和 SetMasterVolumeLevelScalar
但我只是想了解数学这可能是 Calculate a value percentage of a value in a logarithmic scale
IAudioEndpointVolume::SetMasterVolumeLevel
我有这个,但它不正确,因为它输入的值不适合数据库使用的对数标度
volume.SetMasterVolumeLevel( (max_db - min_db) * percent + min_db, None)
如果你真的不想使用标量方法,我发现
dB = 34 * math.log(volume_percentage / 100, 10)
在我的机器上工作,除了34
之外方程应该是相同的,你必须微调它。此外,print(volume.GetVolumeRange())
将为您提供最小分贝数。在我的例子中它是 -65.25 dB,你必须为它(或一个接近的数字)做一个例外,因为 0 的日志是未定义的。希望这可以帮助。干杯。