当前位置: 首页 > article >正文

音频响度归一化 - python 实现

        在处理音频样本时,往往我们的音频样本由于录制设备,环境,人发音的音量大小的不同影响,会造成音频响度不统一,分布在一个不同的响度值域上。为了让语音模型更好的学习音频特征,就有必要对音频的响度进行归一化处理,控制在一定的响度值域。

代码实现如下:

# -*- coding: utf-8 -*-
# date:2024
# Author: DataBall
# function: 音频响度归一化

import librosa
import soundfile as sf
import pyloudnorm as pyln
import numpy as np

def get_audio_loudness(voice,sr):
    # 计算音频的响度(以分贝为单位)
    meter = pyln.Meter(sr)
    loudness = meter.integrated_loudness(voice)
    return loudness
def change_audio_loudness(voice,sr,origin_loudness,target_loudness,path_out):
    # 归一化音频到目标响度
    normalized_wav = pyln.normalize.loudness(voice,origin_loudness,target_loudness)

    # 如果归一化后的音频振幅超过1,需要进一步归一化
    if np.abs(normalized_wav).max() > 1.0:
        normalized_wav = normalized_wav / np.abs(normalized_wav).max()

    # 保存归一化后的音频
    sf.write(path_out, normalized_wav, sr)
    print("保存归一化后的音频:{}".format(path_out))

if __name__ == "__main__":
    path_audio_origin = 'audio/m_16.wav'

    y, sr = librosa.load(path_audio_origin, sr=None) # 加载音频文件,返回音频数据和采样率
    print("音频采样率:{}".format(sr))

    origin_loudness = get_audio_loudness(y,sr)
    print("原音频响度 : {:.5f}".format(origin_loudness))
    target_loudness = -20 # 目标响度

    path_audio_out = "audio/normalized_audio.wav"
    change_audio_loudness(y,sr,origin_loudness,target_loudness,path_audio_out)

    #---------------------- 读取修改后的音频的响度信息
    y2, sr2 = librosa.load(path_audio_out, sr=None)
    loudness2 = get_audio_loudness(y2,sr2)
    print("调整后音频响度 loudness: {:.5f}".format(loudness2))

对于的运行log如下:

音频采样率:16000
原音频响度 : -35.06912
保存归一化后的音频:audio/normalized_audio.wav
调整后音频响度 loudness: -20.00000

​​

助力快速掌握数据集的信息和使用方式。

数据也可如此美好!


http://www.kler.cn/news/343099.html

相关文章:

  • 自动驾驶系统研发系列—如何选择适合自动驾驶的激光雷达?从基础到高端全解读
  • Linux YUM设置仓库优先级
  • 【RabbitMQ——消息应答机制——分布式事务解决方式】
  • Qt中的网络客户端
  • 变倍镜头参数详解
  • MySQL数据库的详细学习步骤
  • 万能显卡驱动卸载工具 (DDU) Display Driver Uninstaller
  • 二手手机回收小程序开发,小程序功能分析
  • 刘二大人《PyTorch深度学习实践》完结合集Overview学习笔记
  • 山西农业大学20241011
  • JAVA八股文1
  • 芯课堂 | Synwit_UI_Creator(μgui)平台之图像处理篇
  • 中间件有哪些分类?
  • java Optional类与新的日期时间API
  • Spring Integration + MQTT
  • 浅谈C++之多线程处理TCP请求
  • 考研代码题:10.10 汉诺塔 爬楼梯 取球 猴子吃桃
  • 重学Java设计模式读后感之组合设计模式应用
  • OpenCV:图像直方图计算
  • 干部管理系统:实现干部全生命周期管理