如何在python中保存修剪过的wave文件?

如何在python中保存修剪过的wave文件?,python,numpy,speech-recognition,microphone,wave,Python,Numpy,Speech Recognition,Microphone,Wave,我正在尝试录制麦克风输入,执行一些端点算法,该算法将端点语音,并仅使用语音保存新的wave文件 我设法保存了一个文件,但当我播放录音时,它会播放一半的语音序列 1) 数组应该采用什么格式才能成功保存 2) 如何将其转换为该格式 我正在使用以下麦克风录制算法,错误在我保存文件的方式中的某个地方: 如果我调用writeframes(frames),它可以很好地保存完整的3秒麦克风输入 FORMAT = pyaudio.paInt16 # We use 16bit for

我正在尝试录制麦克风输入,执行一些端点算法,该算法将端点语音,并仅使用语音保存新的wave文件

我设法保存了一个文件,但当我播放录音时,它会播放一半的语音序列

1) 数组应该采用什么格式才能成功保存

2) 如何将其转换为该格式

我正在使用以下麦克风录制算法,错误在我保存文件的方式中的某个地方:

如果我调用writeframes(frames),它可以很好地保存完整的3秒麦克风输入

FORMAT = pyaudio.paInt16                # We use 16bit format per sample
CHANNELS = 1
RATE = 44100
CHUNK = 1024                            # 1024bytes of data red from a buffer
RECORD_SECONDS = 3
WAVE_OUTPUT_FILENAME = "file.wav"

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE, input=True,
                    frames_per_buffer=CHUNK)

print "recording..."
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)
print "finished recording"
# stop Recordings
stream.stop_stream()
stream.close()
audio.terminate()

frames = ''.join(frames)

# important! convert from string to int
amplitudeSamples = np.fromstring(frames, np.int16)

# Perform endpointing algorithm where I compute start and end indexes 
# within amplitudeSamples array

voiceSample = amplitudeSamples[start:end]

# Here lies the problem
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(1)
waveFile.setsampwidth(2)
waveFile.setframerate(RATE)
waveFile.writeframes(voiceSample) 
#waveFile.writeframesraw(voiceSample) # doesn't work also
waveFile.close()

在写入numpy数组之前,将其转换为字符串:

wavFile.writeframes(voiceSample.tostring())

您确定检查开始和结束的算法工作正常吗?是的,我已经绘制了开始和结束索引的振幅示例和垂直边,它们非常适合。setnchannels和setsampwidth调用中的参数如何?它们是否正确?我用1个通道记录,设置采样宽度我猜是2,因为我用2字节的paInt16记录。也可以用声音文件记录。使用soundfilde Library写入('bla.wav',voiceSignal,44100)。请参见pypi上的“wavio”。