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

时间:2017-03-26 21:00:14

标签: python-2.7 pygame windows-10 mixer

我正在尝试在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())

输出如下: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)

没有运气,这里也发生了同样的事情。

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

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

我在Windows 10上就是这样做的:

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

  2. 选择播放设备

  3. 选择扬声器和属性
  4. 转到“增强功能”选项卡,取消选中“均衡器和响度均衡”
  5. 那就是它。

答案 1 :(得分:0)

Raspberry Pi上的音乐: 使用Pygame在Raspberry Pi上编程播放音乐时,发现音量太低,设置为0.0到1.0。然后我尝试将值设置为更高,直到10.0(pygame.mixer.music.set_volume(vol)),它的效果很好!

答案 2 :(得分:0)

也许您需要将文件格式更改为 mp3 以运行音乐,因为当我复制此代码时,在 mp3 扩展名中获得了闹钟音乐并在 Spyder(anaconda) python 3.8 中运行它,它可以工作,可能有两种解决方案:

  1. 将您的 Python 版本更改为 3.8
  2. 将 .wav 扩展名转换为 mp3

我不确定它是否有效,但在这些情况下,它可能对您有用。