如何在Pygame中使用音频创建一个能够流畅播放的440 Hz声音?我认为这应该很容易,但我不想使用任何愚蠢的文件来完成任务.这样做的最终目的是在我按照另一个问题提出的要求按下按键时播放音符.任何帮助将不胜感激,因为我浪费了大量的时间试图找到答案.
解决方法
什么样的440赫兹声音? “440赫兹”有很多类型的波浪:正弦,锯齿,方形等.你可以用长笛演奏A,这也可能算得上.
假设您想要一个正弦波,看起来您可以使用pygame.sndarray.samples生成一个Sound对象. (我没有测试过这个)你可以创建样本:
samples = [math.sin(2.0 * math.pi * frequency * t / sample_rate) for t in xrange(0,duration_in_samples)]
这是希望基本的正弦波.频率是所需频率,单位为Hz. sample_rate是生成的音频中的采样数/秒:44100 Hz是典型值. duration_in_samples是音频的长度. (5 * 44100 == 5秒,如果您的音频采样率为44100 Hz.)
看起来您可能必须在传递给pygame.sndarray.samples之前将样本转换为numpy.array.文档表明音频应该与pygame.mixer.get_init返回的格式匹配,因此适当调整样本,但这是基本的想法. (mixer.get_init会告诉你上面的sample_rate变量,以及你是否需要考虑立体声,以及你是否需要调整波的幅度或移动它.)
使样本长度为整数波,并且应该循环.