python实现音频文件的批量拼接(soundfile+numpy)

import os
import soundfile as sf
import numpy as np

#定义转换采样率的函数,接收3个变量:原音频路径、重新采样后的音频存储路径、目标采样率
def wav_concatenate(path_1, path_2, new_dir_path):
    wavfile_1 = path_1.split('/')[-1]       #提取音频1的文件名,如“1.wav"
    wavfile_2 = path_2.split('/')[-1]       #提取音频2的文件名,如“2.wav"
    new_file_name = wavfile_1.split('.')[0] + '_' + wavfile_2.split('.')[0] + '.wav'      #此行代码用于对拼接后的文件进行重命名,此处是将需要拼接的两个文件名用'_'连接起来


    signal_1, sr1 = sf.read(path_1)      #调用soundfile载入音频
    signal_2, sr2 = sf.read(path_2)      #调用soundfile载入音频

    if sr1 == sr2:      #判断待拼接的两则音频采样率是否一致,若一致则拼接
        new_signal = np.concatenate((signal_1, signal_2), axis=0)
        new_path = os.path.join(new_dir_path, new_file_name)  
        print(new_path)

        sf.write(new_path, new_signal, sr1)

    else:
        print("所需拼接的音频采样率不一致,需检查一下哈~")

if __name__ == '__main__':
    path_1 = 'D:/拼接测试/今天的天气是.wav'      #指定通用的拼接音频文件
    dir_path = "D:/拼接测试/待拼接文件夹/"      #指定待拼接的音频文件夹路径
    wav_list = os.listdir(dir_path)

    #指定转换后的音频文件夹路径
    new_dir_path = "D:/拼接测试/已拼接文件夹/"      #指定拼接完成后,存储音频的文件夹路径
    os.makedirs(new_dir_path, exist_ok=True)

    #开始以对原音频文件夹内的音频进行“一对多”的批量拼接
    for i in wav_list:
        path_2 = os.path.join(dir_path, i)
        wav_concatenate(path_1, path_2, new_dir_path)

以上代码实现音频文件的批量拼接,具体拼接方式为:以一则通用音频为通用的拼接音频的前半部分,以指定文件夹背的所有音频为拼接音频的后半部分,比如通用音频的内容为“今天的天气是”,文件夹内的音频内容分别为“晴天”、“雨天”等,则拼接后的音频分别为“今天的天气是晴天”、“今天的天气是雨天”...可看做”一对多”的拼接形式~

代码中调用了numpy和soundfile两个模块,其中soundfile模块用于音频文件的读写,numpy模块用于音频信号的拼接~

拼接前的文件示意图:

        

 拼接后的音频文件示意图:

        

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值