使用Python AudioTools编辑Wave文件示例
我正在尝试创建一个Python脚本,该脚本能够打开一个音频文件,读取PCM数据,并使用该PCM数据输出另一个音频文件。(最终我希望能够对数据应用流程) 我目前正在使用python audiotools,因为它似乎能够用相当多的格式来实现这一点 我已经成功地读取了数据并将其转换为浮点值的FramesList,这非常适合编辑,尽管我无法完成将处理后的FramesList写回.wav文件的过程。to_bytes()将数据转换为原始pcm字符串,但我不确定如何将此原始数据返回到wav文件中使用Python AudioTools编辑Wave文件示例,python,python-2.7,audio,Python,Python 2.7,Audio,我正在尝试创建一个Python脚本,该脚本能够打开一个音频文件,读取PCM数据,并使用该PCM数据输出另一个音频文件。(最终我希望能够对数据应用流程) 我目前正在使用python audiotools,因为它似乎能够用相当多的格式来实现这一点 我已经成功地读取了数据并将其转换为浮点值的FramesList,这非常适合编辑,尽管我无法完成将处理后的FramesList写回.wav文件的过程。to_bytes()将数据转换为原始pcm字符串,但我不确定如何将此原始数据返回到wav文件中 from a
from audiotools import *
from argparse import ArgumentParser
def get_info(audio_file, main_args):
"""
create a dictionary of information for the audiofile object.
"""
info = {}
info["channels"] = audio_file.channels()
info["channel_mask"] = audio_file.channel_mask()
info["bits"] = audio_file.bits_per_sample()
info["sample_rate"] = audio_file.sample_rate()
info["frames"] = audio_file.total_frames()
info["length"] = audio_file.seconds_length()
info["seekable"] = audio_file.seekable()
info["verified"] = audio_file.verify()
info["chunks"] = audio_file.has_foreign_wave_chunks()
info["available"] = audio_file.available(BIN)
info["header"], info["footer"] = audio_file.wave_header_footer()
if main_args.verbose:
print "No. of Channels:\t\t", info["channels"]
print "Channel mask:\t\t\t", info["channel_mask"]
print "Bits per sample:\t\t", info["bits"], "BIT"
print "Sample Rate:\t\t\t", (info["sample_rate"]/1000.0), "k"
print "Number of Frames:\t\t", info["frames"]
print "Audio Length:\t\t\t", info["length"], "seconds"
print "Audio File Seekable?:\t\t", info["seekable"]
print "File has foreign chunks?:\t", info["chunks"]
print "Correct Binaries present?:\t", info["available"]
return info
def main():
parser = ArgumentParser()
parser.add_argument(
"-v",
"--verbose",
help = "Run program verbosely",
default = False,
action = "store_true",
)
main_args = parser.parse_args()
#open audio file as an AudioFile object
audio_file = open("/Users/samperry/piano2.wav")
file_info = get_info(audio_file, main_args)
#Creates a WaveReader object from the AudioFile Object
pcm_data = audio_file.to_pcm()
#Creates a FrameList object from WaveReader object. Currently reads all
#frames in file
frame_list = pcm_data.read(file_info["frames"])
#Convert samples to floats (-1.0 - +1.0)
float_frame_list = frame_list.to_float()
#eventually do some signal processing here...
#Convert back to integer FrameList
output_framelist = float_frame_list.to_int(file_info["bits"])
#now back to raw bytes
output_data = output_framelist.to_bytes(False, True)
if __name__ == "__main__":
main()
你试过了吗?它允许您使用简单易用的高级界面操作音频。如果您只是使用wav文件,则可以使用python模块。它比音频工具简单得多 如果您需要处理其他文件格式,并且不介意使用外部程序,您可以将原始数据输出到文件中,然后将其转换为您想要使用的任何格式。
您可以查看有关读取数据的信息以获得一些想法。我看过PyDub,但遗憾的是,它没有提供我的项目所需的逐样本编辑级别。