首页 > 解决方案 > Numpy 在我无法剥离的数组的每个元素之后添加一个点

问题描述

我正在尝试编写代码,该代码根据我给它的一系列频率生成声音文件,但已经达到一个点,将整数值的数组编译在一起,在每个小数点后放置一个小数点,这会破坏我正在生成的声音文件。

我尝试将其转换为列表,然后将所有元素转换为整数值,然后将其转换回来。这会删除点,但仍然会损坏文件

这是我的代码:

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.]

标签: pythonnumpyscipy

解决方案


您获得小数位的原因是因为final_array = np.array([])创建了一个浮点类型数组。当您将整数数组附加waveform_integers到浮点类型数组时final_array,您会得到一个浮点类型数组,因为final_array它设置为使用浮点数。

要解决此问题,您可以使用final_array = np.array([], dtype='int16')which 将使其中的两个数组np.append都是int16数组,并且结果也是一个int16数组。


推荐阅读