音频响度归一化 - python 实现

news2024/11/24 9:57:06

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

代码实现如下:

# -*- 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.coloradmin.cn/o/2203279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android中byte[] buf没有结束符,new String(buf)会不会出错?

答案是:不会 看例子: 这和c是不一样的,不需要特别的在字符串后面添加一个\0结束.

誉天教育十月新班启航:开启技能升级之旅,抢占未来先机!

安全HCIP 晚班 2024/10/8 存储HCIE 晚班 2024/10/10 Linux云计算架构师 晚班周末班 2024/10/14 云服务HCIP 周末班 2024/10/26 云计算HCIP 周末班 2024/10/26 RHCE 周末班 2024/11/2 数通HCIE直通车 晚班 2024/11/4 AI大模型HCIE 晚班 2024/11/11 数通HCIE直通车…

C# String 类型:那些你可能不知道的秘密

前言 嗨,大家好! 今天咱们来聊一聊一个看似简单却充满玄机的话题 —— String 类型。 字符串应该是所有编程语言中使用最频繁的一种基础数据类型。 在 C# 中,String 可谓是特别的存在:它是引用类型,存储在托管堆中…

插件生成XML

目录 1.数据库配置 2.在pom.xml中添加插件 3.generator文件配置 1.数据库配置 # 数据库配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8&useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc…

双主轴车床的优势

双主轴车床作为现代制造业中的一项重要技术,其优势显而易见。下面我将从几个方面详细阐述双主轴车床的优势: ‌一、提高生产效率‌ ‌并行加工‌:双主轴车床最大的特点在于其能够同时在两个主轴上进行加工,这种并行加工方式使得在…

LCD -

LCD 目录 LCD 回顾 应用 - 1、首先将该LCD屏官方写好的三个文件添加进工程中的api文件夹中 - 2、找到LCD的初始化函数 - 3、在LCD屏幕上显示字符串 - 4、在LCD屏幕上显示图片 - 5、在LCD屏幕上显示汉字 例:在LCD屏幕上显示温湿度,时间代码 LC…

Unsupervised Deep Embedding for Clustering Analysis

0. 论文信息 标题:Unsupervised Deep Embedding for Clustering Analysis期刊:International Conference on Machine Learning作者:Junyuan Xie,Ross Girshick,Ali Farhadi机构:University of Washington&…

每日一题|3162. 优质数对的总数 I、II|因子分解、计数方法

第一题非常简单的暴力解法。 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:nums2_ [i * k for i in nums2]count 0for i in nums1:for j in nums2_:count 0 if i % j else 1return count 第二题的难度提升在数量级在10万…

[java毕业设计]免费分享一套SpringBoot+Vue电影推荐(电影网)系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue电影推荐(电影网)系统,分享下哈。 项目视频演示 【免费】SpringBootVue电影推荐(电影网)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 如今社会上各行各业,都喜欢用…

大数据新视界 --大数据大厂之大数据如何重塑金融风险管理:精准预测与防控

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

第十七篇——无穷小(三):用动态和极限的眼光看世界

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 这个世界从互联网盛行信息爆炸的时候,就已经进入了无限思维时…

前端环境搭建一览记录

文章目录 写在前面Nodejs下载Nodejs介绍Nodejs下载方式nvm安装:安装Homebrew(安装器)(打开终端,输入下面的脚本)安装nvm验证安装是否成功配置环境内容查看环境内容刷新配置 nvm 使用如何使用nvm ls 查看当前安装的版本nvm use versionId 切换…

鸿蒙开发之ArkUI 界面篇 二十八 ForEach

ForEach语法格式如下: ForEach(数组名字,(Item,index) >{item要做的事情}) 实现下图效果: 代码如下: Entry Component struct IndexTest {State titles:string[] [学鸿蒙,赢取白富美,走向人生巅峰,影音娱乐,海外旅游]build…

并发编程-ReentrentLock概念及使用

1.ReentrantLock概念 ReentrantLock 是 Java 中的一种可重入锁,属于 java.util.concurrent.locks 包。它提供了比 synchronized 关键字更灵活的锁机制,允许更复杂的线程同步控制。以下是 ReentrantLock 的一些关键概念和特点: 可重入性&…

Linux的Redis安装部署

Redis是一个nosql数据库,速度快,key-value型数据库 1.root用户执行 yum install -y epel-release 配置epel仓库 2.安装Redis 命令: yum install -y redis 3.启动服务: systemctl start redis 4.注意关闭firewalld防火墙, 5.进入Redis服务端redis-cli

tensorflow入门案例手写数字识别人工智能界的helloworld项目落地1

参考 https://tensorflow.google.cn/?hlzh-cn https://tensorflow.google.cn/tutorials/keras/classification?hlzh-cn 项目资源 https://download.csdn.net/download/AnalogElectronic/89872174 文章目录 一、案例学习1、导入测试和训练数据集,定义模型&#xff…

el-tree 修改每个层级的背景色

目录 一、思路 二、代码 1. HTML部分 2. js部分 3. css部分 案例图 一、思路 使用 render-content 插槽来自定义节点内容。根据节点的层级动态添加 CSS 类。写一个方法,用于:递归地获取节点的层级。如果节点没有父节点,则返回当前层级…

嵌入式工业显示器在食品生产行业的应用

嵌入式工业显示器在食品生产行业的应用主要体现在以下几个方面: 一、自动化控制与精准监测 嵌入式工业显示器通常与各类传感器和执行器集成,能够实时显示生产线的运行状态,实现自动化控制和精准监测。在食品生产过程中,从原材料…

Vscode+Pycharm+Vue.js+WEUI+django火锅(三)理解Vue

新创建的Vue项目里面很多文件,对于新手,老老实实做一下了解。 1.框架逻辑 框架的逻辑都是相通的,花点时间理一下就清晰了。 2.文件目录及文件 创建好的vue项目下,主要的文件和文件夹要先认识一下,并与框架逻辑对应起…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤:(数据默认保存在/var/lib/elasticsearch下,自行更改) 一、装 Java 环境 Elasticsearch 是用 Java 编写的,所以需要先安装 Java 运行环境。 检查系统中是…