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 的范围内。
我有像这样从麦克风录制的音频数据:(浮动的 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 的范围内。