Из свойства .pan
docstring :
Способ вычисления уровней из скалярных значений от -1 до +1 зависит от .norm
.
и соответственно из свойства .norm
docstring :
Для Player
экземпляра p
, если для p.pan
задано скалярное значение между -1 и +1 относительные уровни левого и правого каналов вычисляются таким образом, что ::
left ** p.norm + right ** p.norm = 1
Значение p.norm=2
создает панораму с естественным звучанием, но это означает что стереофонические звуки по умолчанию уменьшены до 70,71% от их максимальной амплитуды. Таким образом, вместо этого по умолчанию используется бесконечность-норма p.norm='inf'
, которая гарантирует, что наибольшая из двух сторон всегда равна 1,0
Таким образом, настройкой по умолчанию действительно является негладкое панорамирование. Добавление norm=2
к вашим Player
свойствам может быть подходящим способом, при котором общий сигнал power будет постоянным по каналам. Между прочим, самый чувствительный способ оценить это - использовать непрерывный тональный стимул, как вы получаете от ToneTest()
:
import math, audiomath as am
am.RequireAudiomathVersion('1.10')
period_in_seconds = 4.0
p = am.ToneTest(norm=2, pan=lambda t: math.sin(2 * math.pi * t / period_in_seconds) )
p.Play()
# now experiment with `p.norm` while it's playing
Вы также можете попробовать norm=1
(сохраняет сумма канала амплитуды постоянная вместо мощности).