Spi*_*972 1 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])
Run Code Online (Sandbox Code Playgroud)
生成的数组如下所示:
[ 0. 140. 280. ... -210. -140. -70.]
Run Code Online (Sandbox Code Playgroud)
小智 5
您获得小数位的原因final_array = np.array([])是因为创建了一个浮点型数组。当您将整数数组附加waveform_integers到浮点类型数组时final_array,您得到的是浮点类型数组,因为final_array设置为使用浮点数。
要解决此问题,您可以使用final_array = np.array([], dtype='int16')which 使其中的两个数组np.append都是int16数组,结果也是一个int16数组。
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |