使用Python制作音乐

3

尝试通过组合谐波序列来创建一些音符。代码非常简单,但声音却没有输出。有什么想法吗?

from IPython.display import Audio
import numpy as np
import matplotlib.pyplot as plt

def Harmonic(i,linComb):
    x=np.linspace(0,3,24000)
    y = [0 for _ in x] 
    weights = linComb
    for n in range(0,i):
        y += np.sin((2*n+1)*(2*np.pi*weights[n])*(x))/(2*n+1)
    plt.plot(x,y)
    plt.show()
    return y

out = Harmonic(3,[0,2,3])
Audio(data=out, rate=8000)

在此输入图片描述

我尝试过以下几个方法:

  • 更改速率
  • 操作y值
  • 确保谐波函数有效
  • 查看这个答案(使用相同的函数,但仍然不起作用)

非常感谢任何帮助。谢谢。


times未定义。也许你想使用x - Scene
@SeanXie 打错了,已更正为 x。感谢您的提醒。 - rb3652
@SeanXie 真的吗?嗯...有什么建议可以增强它吗?我听不到任何声音,但也许只是我自己的问题。 - rb3652
很好,这样更好。将代码块粘贴到评论中总是令人不安的 :) - Scene
@jasonharper 哦,有趣...你有什么修改建议吗? - rb3652
显示剩余5条评论
1个回答

1

这段代码生成的声音是可以听到的,但是比较微弱。

我没有音频编程的经验,但是以下代码可以生成类似于响亮蜂鸣声的某种噪音:

from IPython.display import Audio
import numpy as np
import matplotlib.pyplot as plt

def Harmonic(i, weights):
    x=np.linspace(0,3,24000)
    y = [0 for _ in x] 
    for n in range(0,i):
        y += np.sin((2*n+1)*(2*np.pi*weights[n])*(x))/(2*n+1)
    plt.plot(x,y)
    plt.show()
    return y

i = 1000
weights = [1000] * 1000 # Length equal to i

out = Harmonic(i, weights)
Audio(data=out, rate=8000)

谢谢Sean。已点赞并接受答案。如果有办法将权重整合进去,那就太好了,但如果不行也没关系。与此同时,我会自己尝试调整这个问题。 - rb3652
当然,权重可以保留。我不知道这意味着什么,但只要“weights”长度为“i”,代码就可以运行。 - Scene
啊,原来是这样!太好了。谢谢。基本上,权重允许你构建任何音符,而不仅仅是方波。嗯,我想这就是我要找的。谢谢。 - rb3652
很高兴能帮助 :) - Scene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接