python - 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.]
解决方案
您获得小数位的原因是因为final_array = np.array([])
创建了一个浮点类型数组。当您将整数数组附加waveform_integers
到浮点类型数组时final_array
,您会得到一个浮点类型数组,因为final_array
它设置为使用浮点数。
要解决此问题,您可以使用final_array = np.array([], dtype='int16')
which 将使其中的两个数组np.append
都是int16
数组,并且结果也是一个int16
数组。
推荐阅读
- sqlite - SQLite Window 函数避免聚合重复
- php - 防止 Jqueryvalidation 在打开模式时验证远程
- javascript - 我如何将 html 输入数据传递给 javascript
- javascript - 在响应式布局中使用 CSS“宽度:适合内容”的一个很好的替代方案?
- react-native - 如果我需要从 npm 模块手动自定义代码,我应该怎么做
- oracle - 如何获取已删除重复项的数据?
- css - 如何将样式添加到 NetlifyCMS 编辑器预览
- android - Xamarin Forms App 在 android 8.1 及更低版本上崩溃 | JNI 检测到应用程序错误:mid == null
- php - 当用户输入是多个单词时,PHP 不执行 bash 脚本
- r - 如何修复在 r bookdown 中构建书籍的错误