Python3+叠加两个音频文件,实现混音
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python3+叠加两个音频文件,实现混音,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2211字,纯文字阅读大概需要4分钟。
内容图文
将两个单声道的音频文件叠加成一个新的音频文件。
实现:a + b = c(新)
同理,如果用 c - b 可以得到文件a
同理,也可以将多个单声道音频文件叠加到一起。
注意:
- 两个文件要是相同声道的文件,这里的代码只适用1声道的。
- 两个音频文件的rate也要是相同的。
- 当两个音频文件的长度不同,需要将较短的音频文件补上静音数据,这里都是将静音添加到了音频文件后。
import os
import wave
import numpy as np
import pyaudio
file1 = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音频文件/demo1.wav')
file2 = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))), '音频文件/demo2.wav')
f1 = wave.open(file1, 'rb')
f2 = wave.open(file2, 'rb')
# 音频1的数据
params1 = f1.getparams()
nchannels1, sampwidth1, framerate1, nframes1, comptype1, compname1 = params1[:6]
print(nchannels1, sampwidth1, framerate1, nframes1, comptype1, compname1)
f1_str_data = f1.readframes(nframes1)
f1.close()
f1_wave_data = np.fromstring(f1_str_data, dtype=np.int16)
# 音频2的数据
params2 = f2.getparams()
nchannels2, sampwidth2, framerate2, nframes2, comptype2, compname2 = params2[:6]
print(nchannels2, sampwidth2, framerate2, nframes2, comptype2, compname2)
f2_str_data = f2.readframes(nframes2)
f2.close()
f2_wave_data = np.fromstring(f2_str_data, dtype=np.int16)
# 对不同长度的音频用数据零对齐补位
if nframes1 < nframes2:
length = abs(nframes2 - nframes1)
temp_array = np.zeros(length, dtype=np.int16)
rf1_wave_data = np.concatenate((f1_wave_data, temp_array))
rf2_wave_data = f2_wave_data
elif nframes1 > nframes2:
length = abs(nframes2 - nframes1)
temp_array = np.zeros(length, dtype=np.int16)
rf2_wave_data = np.concatenate((f2_wave_data, temp_array))
rf1_wave_data = f1_wave_data
else:
rf1_wave_data = f1_wave_data
rf2_wave_data = f2_wave_data
# ================================
# 合并1和2的数据
new_wave_data = rf1_wave_data + rf2_wave_data
new_wave = new_wave_data.tostring()
p = pyaudio.PyAudio()
CHANNELS = 1
FORMAT = pyaudio.paInt16
RATE = 44100
# 实现录音
def record(re_frames, WAVE_OUTPUT_FILENAME):
print("开始录音")
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(re_frames)
wf.close()
print("关闭录音")
record(new_wave, 'demo1+2.wav')
内容总结
以上是互联网集市为您收集整理的Python3+叠加两个音频文件,实现混音全部内容,希望文章能够帮你解决Python3+叠加两个音频文件,实现混音所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。