我正在开发一个需要在程序中从头开始创建信号的项目。信号存储在一个数组中,每个元素都是一个样本。它应该以 44.1 kHz 播放。由于项目的其他方面,我正在使用 pygame 来完成此任务。Pygame 具有允许从 numpy 数组创建 Sound 对象并像 wav 文件一样播放的功能。在初始化 pygame.mixer 时,我将频率设置为 44100 Hz,然而,Sound 对象正在播放大约 10 kHz。
这是 pygame 中的错误,还是需要做其他事情才能以给定的速率播放数组?
def test_script(t):
bin_sig[0:8] = throttle(t)
bin_sig[8:28] = restofsignal()
bin_sig[28:32] = checksum(bin_sig)
print bin_sig
sig = create_audiosig(bin_sig)*60
pygame.mixer.init(44100,-16,1,2**16)
num_ary = numpy.array(sig)
plt.plot(num_ary)
plt.savefig('generated_signal.jpg')
if (sys.argv[1] == 'on'):
s = pygame.sndarray.make_sound(num_ary)
s.play()
plt.show()
返回的信号图
有 60 个长度为 6835 的脉冲。以 44.1 kHz 播放,这需要 9.3 秒。但是,它需要 37.2 秒 (11020 Hz)。
如果您需要查看更多代码,可以在这里找到