所以我有一个可以产生声音的程序。我用单声道,但我想把它转换为立体声,以获得一些非常酷的东西。然而,当我试图这样做的时候,我所做的任何事情的明显音高都是整个八度音高。
import pygame.mixer, pygame.sndarray, time
def note(freq, len, amp=1, rate=44100):
t = linspace(0,len,len*rate)
data = sin(2*pi*freq*t)*amp
return data.astype(int16) # two byte integers
pygame.mixer.init(44100,-16,2,4096)
pygame.mixer.init()
cleft=pygame.mixer.Channel(0)
cleft.set_volume(1,0)
cright=pygame.mixer.Channel(1)
cright.set_volume(0,1)
toneL = note(440,.1,amp=10000)
toneR = note(440,.1,amp=10000)
snd_outL=pygame.mixer.Sound(toneL)
snd_outR=pygame.mixer.Sound(toneR)
cleft.play(snd_outL)
cright.play(snd_outR)
当我从立体声转为单声道时,上面代码中唯一的变化是:
pygame.mixer.init(44100,-16,2,4096)
第三个参数(2)之前是1。这表示是使用1个还是2个通道(因此,1表示单声道,2表示立体声)。
有谁知道为什么简单地将1更改为2为频道参数会增加音高八度?更重要的是,我怎么能解决这个问题(没有明显选择低八度音符,我不想这样做)?
答案 0 :(得分:0)
PyGame的mixer.init()
方法具有默认参数,这些参数在您第二次调用时使用。重要的是,默认采样率是22050而不是你想要的44100。
删除第二个电话&看看会发生什么。