Python 如何保存同时播放两首曲目的wav文件?不同卷

Python 如何保存同时播放两首曲目的wav文件?不同卷,python,python-2.7,audio,wave,Python,Python 2.7,Audio,Wave,我正在用python编写代码并使用“wave”库。 我已经设法用这个库保存了新的wave文件,但没有两个声音文件重叠——它们在保存时会一个接一个地播放。 如果有人能帮助保存一个文件,使两个曲目同时播放不同音量的话,那就太好了。 谢谢。您可以使用库(我在std库中围绕python wave模块编写的一个轻巧的包装器)简单地完成这项工作: from pydub import AudioSegment sound1 = AudioSegment.from_file("/path/to/my_soun

我正在用python编写代码并使用“wave”库。 我已经设法用这个库保存了新的wave文件,但没有两个声音文件重叠——它们在保存时会一个接一个地播放。 如果有人能帮助保存一个文件,使两个曲目同时播放不同音量的话,那就太好了。 谢谢。

您可以使用库(我在std库中围绕python wave模块编写的一个轻巧的包装器)简单地完成这项工作:

from pydub import AudioSegment

sound1 = AudioSegment.from_file("/path/to/my_sound.wav")
sound2 = AudioSegment.from_file("/path/to/another_sound.wav")

combined = sound1.overlay(sound2)

combined.export("/path/to/combined.wav", format='wav')
但如果你真的想用wave来做:

这取决于它们的格式。下面是一个假设2字节宽、小端点采样的示例:

import wave

w1 = wave.open("/path/to/wav/1")
w2 = wave.open("/path/to/wav/2")

#get samples formatted as a string.
samples1 = w1.readframes(w1.getnframes())
samples2 = w2.readframes(w2.getnframes())

#takes every 2 bytes and groups them together as 1 sample. ("123456" -> ["12", "34", "56"])
samples1 = [samples1[i:i+2] for i in xrange(0, len(samples1), 2)]
samples2 = [samples2[i:i+2] for i in xrange(0, len(samples2), 2)]

#convert samples from strings to ints
def bin_to_int(bin):
    as_int = 0
    for char in bin[::-1]: #iterate over each char in reverse (because little-endian)
        #get the integer value of char and assign to the lowest byte of as_int, shifting the rest up
        as_int <<= 8
        as_int += ord(char) 
    return as_int

samples1 = [bin_to_int(s) for s in samples1] #['\x04\x08'] -> [0x0804]
samples2 = [bin_to_int(s) for s in samples2]

#average the samples:
samples_avg = [(s1+s2)/2 for (s1, s2) in zip(samples1, samples2)]
导入波
w1=波开(“/path/to/wav/1”)
w2=波打开(“/path/to/wav/2”)
#获取格式化为字符串的示例。
samples1=w1.readframes(w1.getnframes())
samples2=w2.readframes(w2.getnframes())
#每2个字节取一次,并将它们分组为1个样本。("123456" -> ["12", "34", "56"])
samples1=[samples1[i:i+2]表示x范围内的i(0,len(samples1),2)]
samples2=[samples2[i:i+2]表示x范围内的i(0,len(samples2),2)]
#将样本从字符串转换为整数
def bin_至_int(bin):
as_int=0
对于bin[::-1]:#反向迭代每个字符(因为小尾端)
#获取char的整数值,并将其赋值给as_int的最低字节,将其余字节上移

尽可能重复感谢所有的帮助-pydub是我需要的。但是,当我尝试用python导入AudioSegment时,它无法识别它。(i pip安装了pydub,并尝试对AudioSegment执行相同的操作)。我怎样才能解决这个问题?我想补充一点,我试着在网上搜索,但什么也没找到