立体声与单声道,八度改变? (蟒蛇)

时间:2014-08-14 19:51:50

标签: python pygame

所以我有一个可以产生声音的程序。我用单声道,但我想把它转换为立体声,以获得一些非常酷的东西。然而,当我试图这样做的时候,我所做的任何事情的明显音高都是整个八度音高。

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为频道参数会增加音高八度?更重要的是,我怎么能解决这个问题(没有明显选择低八度音符,我不想这样做)?

1 个答案:

答案 0 :(得分:0)

PyGame的mixer.init()方法具有默认参数,这些参数在您第二次调用时使用。重要的是,默认采样率是22050而不是你想要的44100。

删除第二个电话&看看会发生什么。