Arrays Can';不要编辑我的np.fromstring

Arrays Can';不要编辑我的np.fromstring,arrays,python-3.x,numpy,wav,pyaudio,Arrays,Python 3.x,Numpy,Wav,Pyaudio,我这样创造了一个声音: 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 = w

我这样创造了一个声音:

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_Ampi('test8.wav')时,它不起作用。 我认为问题在于

 np.fromstring(Monson.readframes(n),dtype=np.uint8)

返回:
[129…,129]
而不是数组或字符串。
我能得到一些帮助吗?

发生这种情况是因为
freq
中的元素属于
uint8
,这给了我们一个从(0到255)的无符号整数。看见 因此,当你从中减去一些东西时,比如说
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。

[129…,129]
uint8的数组,正如你指定的。但是为什么我不能编辑它呢?当我在范围(n)中为k执行时:if freq[k]>int(127):freq[k]=freq[k]-249 print(freq),但是当我在:array([129129])上执行它时,它确实起作用:“
tableau\u ampli()
中第一行的
波是什么?”?当我试着运行这个代码段时,它在那里给了我一个错误。你能更具体地说明什么不起作用吗?你有错误吗?还是一个不想要的结果?您希望它返回什么呢?它返回:array([136136136,…,136136136],dtype=uint8),但是,它应该返回:array([-120,-120,-120,…-120,-120],dtype=uint8)