我试着写一段代码,根据我给它的一系列频率生成一个声音文件,但已经达到了一个点,我们把整数值数组编译在一起,在每一个后面放一个小数点,这会破坏我生成的声音文件。你知道吗
我试着把它转换成一个列表,然后把所有元素转换成整数值,然后再转换回来。 这会删除点,但仍会损坏文件
这是我的密码:
import numpy as np
from scipy.io.wavfile import write
#Samples per second
sps = 44100
#Duration
duration = 0.1
def wavegen(build):
final_array = np.array([])
for i in build:
freq = i
eachnum = np.arange(duration * sps)
waveform = np.sin(2 * np.pi * eachnum * freq / sps)
waveform_quiet = waveform * 0.3
waveform_integers = np.int16(waveform_quiet * 32767)
final_array = np.append(final_array, waveform_integers)
print(final_array)
write('sine.wav',sps, final_array)
wavegen([100, 50, 100, 50])
生成的数组如下所示:
[ 0. 140. 280. ... -210. -140. -70.]
在循环中使用
np.append
效率很低。List append更好,因为它可以在适当的位置工作。np.append
是np.concatenate
的一个cover函数,它为每个调用生成一个全新的数组(包含所有相关的复制)。你知道吗获取小数点的原因是
final_array = np.array([])
是一个创建浮点型数组的过程。当用浮点型数组final_array
附加整数数组waveform_integers
时,得到的是浮点型数组,因为final_array
被设置为使用浮点。你知道吗要解决这个问题,可以使用
final_array = np.array([], dtype='int16')
,这样np.append
中的两个数组都是int16
数组,结果也是int16
数组。你知道吗相关问题 更多 >
编程相关推荐