我正在尝试编写根据我提供的一系列频率生成声音文件的代码,但我已经达到了这样的程度:将整数值数组编译在一起会在每个值后面放置一个小数点,这会损坏声音文件我正在生成。
我尝试将其转换为列表,将所有元素转换为整数值,然后将其转换回来。这会删除这些点,但仍然会损坏文件。
这是我的代码:
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.]
最佳答案
您获得小数位的原因是 final_array = np.array([])
正在创建一个浮点类型数组。当您追加整数数组 waveform_integers
时与 float 类型数组 final_array
,你会得到一个 float 类型数组,因为 final_array
设置为使用 float 。
要解决此问题,您可以使用 final_array = np.array([], dtype='int16')
这将使 np.append
中的两个数组是int16
数组,结果也是 int16
数组。
关于python - NumPy 在数组的每个元素后面添加一个点,我无法删除该点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59328037/