Python进行音频处理

python 进行音频处理 【Mp3 —> Wav & Wav slice】

:pip 安装ffmpy 在运行时可能会遇到报错 ffmpy3.FFExecutableNotFoundError: Executable ‘ffmpeg‘ not found

解决方法见

https://blog.csdn.net/qq_44275213/article/details/110796818

如果找不到ffmpeg.exe 的安装地址,可直接点击这里 下载合适版本,然后放到任意地址即可

音频处理代码

from ffmpy import FFmpeg as mpy # 音频格式转换对象
import os
from pydub import AudioSegment
from pydub.utils import make_chunks

def read_folder(mp3_folder, wav_folder):
    '''
    文件夹读取函数
    :param mp3_folder:
    :param wav_folder:
    :return:
    '''
    # 遍历需要转换的MP3文件夹中的MP3文件
    for a in os.listdir(mp3_folder):
        # 创建MP3文件的绝对路径
        mp3_file = os.path.join(mp3_folder, a)
        # 调用格式转换函数
        trans_to_wav(mp3_file, wav_folder)


def trans_to_wav(mp3_file, wav_folder):
    '''
    格式转换格式
    :param mp3_file:
    :param wav_folder:
    :return:
    '''
    # 格式化文件
    file_fmt = os.path.basename(mp3_file).strip()
    # 获取文件格式
    file_fmt = file_fmt.split('.')[-1]
    # 校验文件格式
    if file_fmt.strip() != 'mp3':
        raise Exception('改文件不是MP3格式,请检查!')
    elif file_fmt.strip() == '':
        raise Exception('文件格式出现异常,请检查!')
    # 创建wav的文件以供转换完成后输出
    wav_file_path = os.path.join(wav_folder)
    wav_file_path = os.path.join(wav_file_path, '{}.{}'.format(
        os.path.basename(mp3_file).strip().split('.')[0], 'wav'
    ))
    # 创建转换时的命令行参数字符串
    cmder = '-f wav -ac 1 -ar 16000'
    # 创建转换器对象
    mpy_obj = mpy(
        executable='D:/Anaconda/envs/music_recommend/Lib/ffmpeg.exe',
        inputs={
            mp3_file: None
        },
        outputs={
            wav_file_path: cmder
        }
    )
    print('执行CMDER 命令:{}'.format(mpy_obj.cmd))
    # 执行转换
    mpy_obj.run()


if __name__ == '__main__':
    '''
    Mp3 -> Wav 
    '''
    # # 输入MP3文件夹
    type_list=['Classical','Country','HipHop','Jazz','Mental','Pop','Rnb','Rock']
    for type in type_list:
        slice_num=0
        mp3_folder="D:/Final_assay/GTZAN/separate/music/"+type+"/"#输入MP3文件夹路径
        wav_folder="D:/Final_assay/GTZAN/separate/music/"+type+"_wav/"# 输出wav文件夹路径
        wav_slice_folder="D:/Final_assay/GTZAN/separate/music/"+type+"_wav_slice/{}"# 输出wav_slice文件夹路径
    #     # 校验MP3文件夹是否存在
        if mp3_folder.strip() == '':
            raise Exception('输入空值,请检查!')
        elif mp3_folder.strip() != '':
            if os.path.exists(mp3_folder) is False:
                raise Exception('文件路径不存在')
        if wav_folder.strip() == '':
            raise Exception('输入空值,请检查!')
        elif wav_folder.strip() != '':
            if os.path.exists(wav_folder) is False:
                raise Exception('文件路径不存在')
        # 调用文件夹读取批量文件
        read_folder(mp3_folder, wav_folder)
        '''
            Wav slice per 30s
        '''
        for a in os.listdir(wav_folder):
            # 创建Wav文件的绝对路径
            Wav_file = os.path.join(wav_folder, a)
            print(a)
            if a:
                wav= AudioSegment.from_file(Wav_file)  # 打开wav文件
                size = 30000 # 切割的毫秒数 10s=10000
                chunks = make_chunks(wav, size)  # 将文件切割为30s一块
                for i, chunk in enumerate(chunks[1:-1]):
                    slice_num=slice_num+1
                    chunk_name = "{}-{}.wav".format(a.split(".")[0], i)
                    print(chunk_name)
                    chunk.export(wav_slice_folder.format(chunk_name), format="wav")
        print(type+"_total_slice_num",slice_num)

借鉴以下blog,感谢大佬们!

https://blog.csdn.net/weixin_44649780/article/details/132672659?ops_request_misc=&request_id=&biz_id=102&utm_term=python%20%20wav%E5%88%87%E7%89%87&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-132672659.142v99pc_search_result_base2&spm=1018.2226.3001.4187

https://blog.csdn.net/liming89/article/details/122394771?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171081099216800184155788%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171081099216800184155788&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-6-122394771-null-null.142v99pc_search_result_base2&utm_term=python%20MP3%E5%88%87%E7%89%87&spm=1018.2226.3001.4187

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,我们可以使用IPython.display.Audio库来实现实时音频处理。通过使用该库的IPython.display.Audio函数,我们可以在Jupyter Notebook中直接播放音频。例如,可以使用以下代码播放音频: ```python from IPython.display import Audio Audio(audio_data) ``` 要分析实时音频数据,我们可以使用librosa库。librosa库提供了一些功能,可以提取音频的特征,并进行实时音频处理。以下是一些常用的实时音频处理技术: 1. 波形图:我们可以使用librosa.display.waveplot函数绘制音频的波形图,这可以帮助我们了解给定时间内音频的响度。 ```python import librosa.display import matplotlib.pyplot as plt plt.figure(figsize=(20, 5)) librosa.display.waveplot(y, sr=sr) plt.show() ``` 2. 频谱图:我们可以使用librosa库的spectral_bandwidth函数计算音频的频谱带宽,并使用librosa.display.waveplot函数绘制音频的波形图,以及使用plt.plot函数绘制不同频谱带宽的曲线。 ```python spectral_bandwidth_2 = librosa.feature.spectral_bandwidth(x, hop_length=hop_length, sr=sr, p=2)[0] spectral_bandwidth_3 = librosa.feature.spectral_bandwidth(x, hop_length=hop_length, sr=sr, p=3)[0] spectral_bandwidth_4 = librosa.feature.spectral_bandwidth(x, hop_length=hop_length, sr=sr, p=4)[0] librosa.display.waveplot(x, sr=sr, alpha=0.4) plt.plot(t, normalize(spectral_bandwidth_2), color='r') plt.plot(t, normalize(spectral_bandwidth_3), color='g') plt.plot(t, normalize(spectral_bandwidth_4), color='y') plt.legend(('p=2', 'p=3', 'p=4')) plt.show() ``` 3. 过零率:可以使用librosa.feature.zero_crossing_rate函数计算音频的过零率,并使用plt.plot函数绘制过零率的曲线。 ```python zcrs = librosa.feature.zero_crossing_rate(x) print(zcrs.shape) plt.figure(figsize=(14, 5)) plt.plot(zcrs<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值