改变 pygame.mixer 中的音量(几乎)没有效果

Mea*_*aty 2 pygame mixer python-2.7 windows-10

我正在尝试在 tkinter 中制作一个应用程序,它有许多按钮,您可以在上面分配声音并稍后播放。按钮的点击本身只调用 play() 方法,所以声音的加载是预先完成的。

我尝试使用滑块 (tk.Scale) 进行某种音量控制,我注意到大多数音量值之间没有明显差异,直到我非常接近于零(考虑到滑块分辨率为 0.01,从 0.0 到 0.1)。在 0.02 左右,我想我注意到音量显着降低,如果我调到零,声音就会静音。请注意,如果我在没有声音播放的情况下移动滑块,就会发生这种情况。

有趣的是,如果我尝试播放足够长的声音以让我在播放时移动滑块,我可以立即注意到差异,但是如果声音停止播放并且我再次尝试播放它,它会转到再次“默认”音量。

由于我根据它们的作用(录制声音、播放声音、GUI)将我的应用程序分成多个脚本,我认为可能是我没有直接初始化 pygame 混音器,而是从导入的模块中初始化的问题,所以我做了一个新的python脚本并在以下位置键入此代码:

import pygame
import time
pygame.mixer.pre_init(frequency=44100, size=-16, channels=1, buffer=512)
pygame.mixer.init()

sound1=pygame.mixer.Sound("sound.wav")
sound1.set_volume(1.0)
print sound1.get_volume()
sound1.play()
time.sleep(sound1.get_length())
sound1.set_volume(0.5)
print sound1.get_volume()
sound1.play()
time.sleep(sound1.get_length())
sound1.set_volume(0.08)
print sound1.get_volume()
sound1.play()
time.sleep(sound1.get_length())
Run Code Online (Sandbox Code Playgroud)

输出如下:1.0,0.5,0.078125(一个低于另一个)确认音量确实已设置(我希望正确)。

我唯一能注意到差异的是第三种情况,实际上并不是那么明显,我希望音量增加是线性的,这远非如此。

我用频道尝试了同样的事情:

sound1=pygame.mixer.Sound("sound.wav")
channel=pygame.mixer.find_channel(True)
channel.set_volume(1.0)
channel.play(sound1)
time.sleep(sound1.get_length()/2)
channel.set_volume(0.5)
print "Volume set"
time.sleep(sound1.get_length()/2)
Run Code Online (Sandbox Code Playgroud)

不走运,同样的事情也发生在这里。

我花了一整天的时间在谷歌上搜索“pygame 混合器音量问题”“pygame 混合器音量设置问题”和类似的短语,但没有运气。希望这里有人可以提供帮助,考虑到我的文凭取决于 python 方法。:)

提前致谢。

Mea*_*aty 5

我找到了答案(感谢来自 PyGame IRC 的 Gummbum)。

问题不在于 Python 或 Pygame 本身,而在于 Windows。似乎声音增强在某种程度上摆弄了我的脚本播放的声音(或任何其他 Pygame 脚本)。

我在 Windows 10 上,这就是我的做法:

  1. 右键单击任务栏中的扬声器图标

  2. 选择播放设备

  3. 选择扬声器和属性
  4. 转到增强选项卡并取消选中均衡器和响度均衡

就是这样。