在 python 中使用 wave 连接 wav 文件
Concatenate wav files using wave in python
我正在尝试将一系列 wav 文件连接成一个连续的 wav 文件。我使用了以下代码片段,但输出不正确,听起来几乎就像文件在彼此之上。 audio_files
是一个包含按预期播放的 .wav 文件名的列表。
这是我当前的代码:
outfile = "sounds.wav"
data= []
for wav_file in audio_files:
w = wave.open(wav_file, 'rb')
data.append( [w.getparams(), w.readframes(w.getnframes())] )
w.close()
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
output.writeframes(data[0][1])
output.writeframes(data[1][1])
output.close()
我假设您使用 this question 作为参考。但是,您采用的代码仅考虑了 2 个 wav 文件,因为这是原始问题所要求的。
虽然我不确定这是否会解决声音重叠的问题,但您应该遍历 data
列表中的每个项目。
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
for params,frames in data:
output.writeframes(frames)
output.close()
以确保您从每个文件中放入框架。
要记住的一件事是,您的新 wav 文件的参数可能特定于每个文件,您可能需要检查 getparams()
是否为每个文件返回相似的结果。
我正在尝试将一系列 wav 文件连接成一个连续的 wav 文件。我使用了以下代码片段,但输出不正确,听起来几乎就像文件在彼此之上。 audio_files
是一个包含按预期播放的 .wav 文件名的列表。
这是我当前的代码:
outfile = "sounds.wav"
data= []
for wav_file in audio_files:
w = wave.open(wav_file, 'rb')
data.append( [w.getparams(), w.readframes(w.getnframes())] )
w.close()
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
output.writeframes(data[0][1])
output.writeframes(data[1][1])
output.close()
我假设您使用 this question 作为参考。但是,您采用的代码仅考虑了 2 个 wav 文件,因为这是原始问题所要求的。
虽然我不确定这是否会解决声音重叠的问题,但您应该遍历 data
列表中的每个项目。
output = wave.open(outfile, 'wb')
output.setparams(data[0][0])
for params,frames in data:
output.writeframes(frames)
output.close()
以确保您从每个文件中放入框架。
要记住的一件事是,您的新 wav 文件的参数可能特定于每个文件,您可能需要检查 getparams()
是否为每个文件返回相似的结果。