无法编辑我的 np.fromstring
Can't edit my np.fromstring
我是这样创建声音的:
import numpy as np
from scipy.io.wavfile import write
data=np.random.uniform(-1,-1,44100)
scaled=np.int8(data/np.max(np.abs(data))*127)
write('test8.wav',44100,scaled)
我想使用 np.fromstring 转换振幅:
def tableau_ampli(filename) :
Monson = wave.open(filename,'r')
n = Monson.getnframes()
if Monson.getsampwidth() == 1 :
freq = np.fromstring(Monson.readframes(n),dtype=np.uint8)
print(freq)
for k in range(n):
if freq[k] > int(127) :
freq[k]=freq[k]-249
print(freq)
else :
freq = np.fromstring(Monson.readframes(n),dtype=np.uint16)
for k in range(len(freq)):
if freq[k]>32767 : # 32767 = [(2**16)/2]-1
freq[k]-=65536 # 65536 = 2**16
return(freq)
但是当我执行tableau_ampli('test8.wav')时它不起作用。
我认为问题是因为
np.fromstring(Monson.readframes(n),dtype=np.uint8)
returns : [129 129 129 ..., 129 129 129]
而不是数组或字符串。
我能得到一些帮助吗?
这是因为 freq
中的元素属于 uint8
,这为我们提供了一个从(0 到 255)的无符号整数。参见 here。
因此,当您从中减去某些内容时,比方说 x
,它会通过执行 256 - x
强制它进入 0 到 255 的范围。由于 256 - 249 = 136,这就是你得到的。
可以把freq = np.fromstring(Monson.readframes(n),dtype=np.uint8)
改成freq = np.fromstring(Monson.readframes(n),dtype=np.uint8).astype(int)
,转成int数据类型,得到-120。
我是这样创建声音的:
import numpy as np
from scipy.io.wavfile import write
data=np.random.uniform(-1,-1,44100)
scaled=np.int8(data/np.max(np.abs(data))*127)
write('test8.wav',44100,scaled)
我想使用 np.fromstring 转换振幅:
def tableau_ampli(filename) :
Monson = wave.open(filename,'r')
n = Monson.getnframes()
if Monson.getsampwidth() == 1 :
freq = np.fromstring(Monson.readframes(n),dtype=np.uint8)
print(freq)
for k in range(n):
if freq[k] > int(127) :
freq[k]=freq[k]-249
print(freq)
else :
freq = np.fromstring(Monson.readframes(n),dtype=np.uint16)
for k in range(len(freq)):
if freq[k]>32767 : # 32767 = [(2**16)/2]-1
freq[k]-=65536 # 65536 = 2**16
return(freq)
但是当我执行tableau_ampli('test8.wav')时它不起作用。 我认为问题是因为
np.fromstring(Monson.readframes(n),dtype=np.uint8)
returns : [129 129 129 ..., 129 129 129]
而不是数组或字符串。
我能得到一些帮助吗?
这是因为 freq
中的元素属于 uint8
,这为我们提供了一个从(0 到 255)的无符号整数。参见 here。
因此,当您从中减去某些内容时,比方说 x
,它会通过执行 256 - x
强制它进入 0 到 255 的范围。由于 256 - 249 = 136,这就是你得到的。
可以把freq = np.fromstring(Monson.readframes(n),dtype=np.uint8)
改成freq = np.fromstring(Monson.readframes(n),dtype=np.uint8).astype(int)
,转成int数据类型,得到-120。