【发布时间】:2021-05-09 02:34:04
【问题描述】:
学习如何使用 Python3 修改不同类型的音频文件,.wav、.mp3等使用wave 模块。具体.wav文件格式,在这方面针对这个问题。目前,我知道音频格式有 ISO 标准,对于 .wav 文件格式的音频标准以及附注中的任何关于此主题的参考都非常感谢.
但就我的问题而言,只需使用 Python3 wave 忽略 .wav 文件中的 RIFF、FMT 标头模块导入。
有没有更有效的方法可以跳过 RIFF 标头、其他容器,直接进入 data 容器修改其内容?
这个粗略的例子只是将双声道音频 .wav 文件转换为单声道音频 .wav 文件,同时将所有值修改为 (0, 0).
import wave
import struct
# Open Files
inf = wave.open(r"piano2.wav", 'rb')
outf = wave.open(r"output.wav", 'wb')
# Input Parameters
ip = list(inf.getparams())
print('Input Parameters:', ip)
# Example Output: Input Parameters: [2, 2, 48000, 302712, 'NONE', 'not compressed']
# Output Parameters
op = ip[:]
op[0] = 1
outf.setparams(op)
number_of_channels, sample_width, frame_rate, number_of_frames, comp_type, comp_name = ip
format = '<{}h'.format(number_of_channels)
print('# Channels:', format)
# Read >> Second
for index in range(number_of_frames):
frame = inf.readframes(1)
data = struct.unpack(format, frame)
# Here, I change data to (0, 0), testing purposes
print('Before Audio Data:', data)
print('After Modifying Audio Data', (0, 0))
# Change Audio Data
data = (0, 0)
value = data[0]
value = (value * 2) // 3
outf.writeframes(struct.pack('<h', value))
# Close In File
inf.close()
# Close Out File
outf.close()
如果只是修改.wav文件的数据段,有没有更好的做法或参考资料?
- 假设您想在特定时间戳添加声音,这将是更适合我的问题的结果。
【问题讨论】:
标签: python python-3.x audio