Изменение громкости в pygame.mixer (почти) не влияет

Я пытаюсь создать приложение в tkinter, в котором есть несколько кнопок, на которые можно назначить звук и воспроизвести его позже. Само нажатие кнопки вызывает только метод play(), поэтому загрузка звука производится заранее.

Я попытался сделать какое-то регулирование громкости с помощью ползунков (tk.Scale), и я заметил, что между большинством значений громкости нет заметной разницы, пока я не достигну очень близкого к нулю (принимая во внимание, что разрешение слайдера составляет 0,01 от 0,0 до 0,1). Примерно в 0,02, я думаю, я заметил, что громкость звука значительно ниже, и если я достигну нуля, звук будет отключен. Обратите внимание, что это происходит, если я перемещаю ползунок, пока не воспроизводятся звуки.

Интересно, что если я попытаюсь воспроизвести звук, достаточно длинный, чтобы позволить мне переместить ползунок во время его воспроизведения, я сразу почувствую разницу, но если звук перестанет играть, и я попробую воспроизвести его снова, он перейдет к громкость по умолчанию снова.

Так как я разделил свое приложение на несколько сценариев в соответствии с тем, что они делают (запись звука, воспроизведение звука, графический интерфейс), я подумал, что это может быть проблемой из-за того, что я непосредственно не инициализировал микшер 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.:)

Заранее спасибо.

4 ответа

Я нашел ответ (спасибо Gummbum из PyGame IRC).

Проблема не в Python или Pygame, а скорее в Windows. Кажется, что улучшения звука каким-то образом влияют на то, как воспроизводится мой сценарий (или любой другой сценарий Pygame).

Я на Windows 10, и вот как я это сделал:

  1. Щелкните правой кнопкой мыши значок динамика на панели задач

  2. Выберите устройства воспроизведения

  3. Выберите колонки и свойства
  4. Перейдите на вкладку "Улучшения" и снимите флажки "Эквалайзер и Эквалайзер громкости".

Вот и все.

Музыка на Raspberry Pi: используя Pygame для программирования воспроизведения музыки на моем Raspberry Pi, я обнаружил, что громкость слишком низкая при настройках от 0,0 до 1,0. Затем я попытался установить значение выше до 10.0(pygame.mixer.music.set_volume(vol)), и это работает Отлично!

Возможно, вам нужно изменить формат файла на mp3 для воспроизведения музыки, потому что, когда я скопировал этот код, получил музыку с будильником в расширении mp3 и запустил его в Spyder(anaconda) python 3.8, он работает, может быть 2 решения:

  1. Измените версию Python на 3.8
  2. Преобразуйте расширение .wav в mp3

Я не уверен, что это сработает или нет, но в этих ситуациях это может сработать с вашей стороны.

Для меня это работает, но не линейно, по крайней мере, для человеческого уха. 1 - это максимум, 0,2 - половина объема и т. Д.

Другие вопросы по тегам