【发布时间】:2019-11-25 02:16:59
【问题描述】:
几个月前,我终于想出了如何用 python 程序制作声音文件。但我有问题。该代码依赖于模块“numpy”中名为“sin”的函数。这是我制作的代码:
import numpy as np
from scipy.io.wavfile import write
sps=44100
freq=440.0
duration=5
amp=0.02
eachSampleNumber=np.arange(duration*sps)
waveform=np.sin(2*np.pi*eachSampleNumber*freq/sps)
waveformQuiet=waveform*amp
waveformIntegers=np.int16(waveformQuiet*32767)
write('first_sine_wave.wav',sps,waveformIntegers)
问题是如果我做某些事情会发生奇怪的事情。如果我改变声音的长度,它会改变音高。此外,如果我尝试将声音连接在一起(我一直在通过简单地将生成的数组添加在一起),则生成的声音文件将使两个声音相互重叠,而不是一个接一个地出现。例如,如果我将两个长度为一秒的声音加在一起,而不是创建一个两个音符一个接一个地播放的两秒声音文件,我将得到一个两个音符为一秒的声音文件同时播放。
我不知道 sin 波实际上是如何手工制作的,也找不到向我揭示此函数使用的公式的文档。我也不明白为什么在这种情况下将两个数组连接在一起会导致一个长度相同的数组。打印出结果数组,对我来说看起来很正常。我不明白为什么任何事情都是这样工作的。
至于我是如何制作声音文件的,我只是手动更改代码本身中的变量并运行程序。由于我遇到的问题,我还没有开始制作适当的可执行文件。我希望最终能用它来制作我自己的音乐制作程序。
【问题讨论】:
-
我投票决定将此问题作为题外话结束,因为它似乎更像是一个数学问题而不是编程问题。