gpt4 book ai didi

python - 结合多个wave在python中一次演奏多个音符?

转载 作者:行者123 更新时间:2023-12-03 01:13:27 26 4
gpt4 key购买 nike

我正在尝试制作一个非常基本的程序,该程序可以在Python中将midi文件转换为单个波形,因此作为一个非常基本的测试,我使用np.cos生成了一些波形,然后将它们加在一起,但是,当我尝试使用sounddevice播放我产生的波形,听起来真的很奇怪。我绝不是声音和信号概念方面的专家;对我来说,这是一个相当新的主题,因此非常感谢您的帮助。
这是代码:

import sounddevice as sd
import numpy as np

def make_wave(freq, duration, sample_rate = 22050):
wave = []
for i in range(0,duration*sample_rate):
wave.append(i/((sample_rate/(2*np.pi))/freq))

wave = np.cos(np.stack(wave))
return wave



A = make_wave(440, 10)
Cs = make_wave(554.37, 10)
E = make_wave(659.25, 10)


sd.play(A+Cs+E, 22050)

最佳答案

对于实际上碰巧遇到相同或相似问题的人,事实证明,这实际上是一个非常简单的问题。因为加总的总振幅大于1,所以计算机音频会吓跑,并且会发生一些削波,从而产生怪异的噪音,因此,我只需要将振幅限制为0.1。
新代码:

import sounddevice as sd
import numpy as np

def make_wave(freq, duration, sample_rate = 22050):
wave = []
for i in range(0,duration*sample_rate):
wave.append(i/((sample_rate/(2*np.pi))/freq))

wave = np.sin(np.stack(wave))
return wave



A = make_wave(440, 10)
Cs = make_wave(554.37, 10)
E = make_wave(659.25, 10)

chord = A+Cs+E

chord = chord*0.1/np.max(chord)
sd.play(chord, 22050)
希望我通过写这篇文章至少可以帮助别人!

关于python - 结合多个wave在python中一次演奏多个音符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63166059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com