python - NumPy 在数组的每个元素后面添加一个点,我无法删除该点

标签 python numpy scipy

我正在尝试编写根据我提供的一系列频率生成声音文件的代码,但我已经达到了这样的程度:将整数值数组编译在一起会在每个值后面放置一个小数点,这会损坏声音文件我正在生成。

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

这是我的代码:

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/

相关文章:

python - 如何使用 CodeHS 8.4.13 : Owls, 第 2 部分的枚举函数?

python - Python 中未知大小的二维数组

python - 在具有不同重数但相同维度的数组上同时使用 numpy repeat

performance - Pandas 或 scipy : looking for performance 中的 groupby.sum() 稀疏矩阵

python - 计算python中点的导数

python - 交换 Python scipy 树状图/链接的叶子

python - Tensorflow:保留张量最大条目的 10%

python - python 总是同步调用 __del__ 吗?

python - panda3d python 中的立方体贴图渲染

python - 使用一维数组的 Numpy 高级索引