Python - 将 Float 音频数据数组转换为 wav 文件

Python - Convert Array of Float audio data to wav file

我有像这样从麦克风录制的音频数据:(浮动的 ndarray)

> print(data)
[-0.00762939 -0.00817871 -0.00714111 ...  0.0265511   0.02484207   0.02377392]

这是我的代码:

while(recording):
   frames.append(data)

waveFile = wave.open(WAVE_OUTPUT_FILENAME + "_" + str(COUNT_FILE) + ".wav", 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.wr(b''.join(frames))
waveFile.close()

但是当我播放音频时,它变坏了,只有噪音...如何将其转换为 .wav 音频文件?

您需要先使用结构打包您的数据

替换你的waveFile.writeframeswith这个

data=struct.pack( 'h' * len(frames), *frames )
waveFile.writeframes(data)

也许还可以将您的数据转换为整数,因为我认为 wav 文件仅使用整数值

我会使用 scipy 库。它比 wave 模块更容易使用:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html

import scipy.io.wavfile as wf
RATE = 44100
... your code that puts an array of floats into data ...

wf.write('test.wav', RATE, data)

如果您发送 wavfile.write numpy float32 值,它会假定它们在 -1 到 1 的范围内。