python添加两段音乐,在Python中混合/叠加wav音频文件

我一直在寻找一个解决方案,覆盖/混合两个WAV音频文件在一起只使用wave库。在

其中一个答案提供了以下代码: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)]

代码是用python2编写的,ord()在python3中是折旧的,所以代码看起来像这样,去掉ord()并在samples_avg处加倍//以避免创建浮点

^{pr2}$

代码只是部分的。缺少的是将samples_avg还原为二进制字符串。这就是我遇到麻烦的地方。我用下面的代码尝试了bin(),chr()的以下代码samples_avg = [ chr(s) for s in samples_avg]

samples_avg = [ bin(s) + "'" for s in samples_avg]

我也尝试过上百万个其他的解决方案,但都失败了。在

有人能帮忙完成这段代码吗?我认为这是一个非常有用的代码,因为它只依赖于wave库,并且可以在虚拟环境中使用。在

我对Python比较陌生,对音频处理也完全陌生,所以对于任何愚蠢的问题和错误,我深表歉意。在

只是为了澄清我所说的混合/溢出是什么意思。如果我有两个音频文件,每个文件的长度为4秒,我想把它们混合到一个长度为4秒的单个音频文件中,两个音频文件同时播放。在

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值