假设我有字符串:
my_data = '\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
Run Code Online (Sandbox Code Playgroud)
我得到它是无关紧要的,但为了具体的东西,假设我从二进制文件中读取它.
我知道我的字符串是4(4字节)浮点数的二进制表示.我想把这些花车作为一个numpy阵列.我能做到:
import struct
import numpy as np
tple = struct.unpack( '4f', my_data )
my_array = np.array( tple, dtype=np.float32 )
Run Code Online (Sandbox Code Playgroud)
但是创建一个中间元组似乎很愚蠢.有没有办法在不创建中间元组的情况下执行此操作?
编辑
我还希望能够以这样的方式构造数组,以便我可以指定字符串的字节顺序.
所以我最近成功构建了一个系统,它将完全用python录制,绘制和播放音频wav文件.现在,我正试图在录制时和开始绘制并将文件输出到扬声器之间进行一些滤波和音频混合.但是,我不知道从哪里开始.现在我要读取初始wav文件,应用低通滤波器,然后将新过滤的数据重新打包到新的wav文件中.这是我用来绘制初始数据的代码.
import matplotlib.pyplot as plt
import numpy as np
import wave
import sys
spf = wave.open('wavfile.wav','r')
#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
plt.figure(1)
plt.title('Signal Wave...')
plt.plot(signal)
Run Code Online (Sandbox Code Playgroud)
以下是我用来生成单音测试音频文件的一些代码:
import numpy as np
import wave
import struct
freq = 440.0
data_size = 40000
fname = "High_A.wav"
frate = 11025.0
amp = 64000.0
sine_list_x = []
for x in range(data_size):
sine_list_x.append(np.sin(2*np.pi*freq*(x/frate)))
wav_file = wave.open(fname, "w")
nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = …Run Code Online (Sandbox Code Playgroud) 所以我问标题中的所有内容:
我有一个波形文件(由输入音频的PyAudio编写),我想将其转换为与声级(振幅)相对应的浮点数据,以进行一些傅立叶变换等...
任何人都有想法将WAVE数据转换为浮点数?