音频处理学习,部分有代码

news2024/11/24 3:53:07

操作步骤整理

  1. pip install audiomentations
  2. 官方文档 audiomentations documentation (iver56.github.io)

官网:Core IO and DSP — librosa 0.10.2 documentation

语音信号处理:librosa-CSDN博客

    1. 安装依赖

pip install librosa

    1. 加载音频文件

ibrosa.load 函数返回的时间序列是一个一维数组,表示音频信号在时间轴上的采样值。在 librosa中,时间轴的方向是沿着数组的第一个轴,即 axis=0。

因此,数组的每个元素代表了时间轴上的一个采样点。 例如,如果采样率为22050Hz,那么每秒会有 22050 个采样点,我们可以将其理解为在时间轴上每隔1/22050秒就采集一次音频信号的值。

因此,如果音频的长度为T秒,那么librosa.load函数返回的时间序列就是一个长度为T×sr的一维数组,其中sr是采样率

读取mp3文件报错“raise NoBackendError()”原因:没有安装ffmpeg包。不能简单使用pip install ffmpeg,因为在anaconda的下的tensorflow环境根本就没用FFmpeg,这样导致无法找到ffdec.py下的指令来调出指令。

解决办法:只需cmd输入一行指令:conda install ffmpeg -c conda-forge

Windows环境需要手工下载ffmpeg 然后设置环境变量

  y, sr = librosa.load(librosa.util.example_audio_file())

  y.shape

  #如果y.shape样式为(2,n)则是立体声,如果是(n,)则是单声道

#如果y.shape样式为(2,n)则是立体声,如果是(n,)则是单声道

    1. 重采样

经过测试发现,采样率(target_sr)越高,时间越短,也就是常见的音频快放,音频播放的速度会变快,反之亦然

librosa.resample(y, orig_sr, target_sr, fix=True, scale=False)

orig_sr :y的原始采样率

target_sr :目标采样率

fix:bool,调整重采样信号的长度,使其大小恰好为len(y)/orig_sr*target_sr=t∗target_sr

scale:bool,缩放重新采样的信号,以使y和y_hat具有大约相等的总能量。

代码:

audio_data = '../data/ringing.wav'

data, sr = librosa.load(audio_data)

#慢放

target_sr=16000

y_hat = librosa.resample(data, orig_sr=22050,target_sr=target_sr)

print('原始数据长度:', data.shape)

print('重采样后数据长度:', y_hat.shape)

#保存下来

sf.write('../data/ringing慢放.wav', data,target_sr)

    1. 读取时长 

就是音频播放的时间长度

librosa.get_duration(y=None, sr=22050, S=None, n_fft=2048, hop_length=512, center=True, filename=None)

例如:duration1 = librosa.get_duration(y=data)

duration2 = librosa.get_duration(y=y_hat, sr=44100);如果采样率不是默认值,则需要填采样率

返回单位s

    1. 读取采样率 

采样率就是一秒采样多少个数据,一般默认是22050

librosa.get_samplerate(path)

例如:

audio_data = '../data/ringing.wav'

sr = librosa.get_samplerate(audio_data)

print(f'采样率{sr}')

    1. 写文件

就是把重新采样或者处理的音频保存为新文件,好像只能保存为wav格式

经过测试 保存的时候,sr必须与实际的sr一致,否则数据失真,比如默认采样率22050,你保存的时候用16000 就会失真

import soundfile as sf

sf.write('../data/output2.wav', data, sr)

  • file:保存输出wav文件的路径
  • data:音频数据
  • samplerate:采样率

代码:

audio_data = '../data/ringing.wav'

data, sr = librosa.load(audio_data)

#慢放

target_sr=16000

y_hat = librosa.resample(data, orig_sr=22050,target_sr=target_sr)

sf.write('../data/ringing慢放.wav', data,target_sr)

    1. 音频图

  1. 音频波形可视化:显示音频信号的时间-振幅图形,帮助理解音频信号的时域特性。
  2. 数据检查:在分析音频数据时,通过可视化可以直观地检查音频的质量和特征。
  3. 前处理分析:在应用音频特征提取或其他处理之前,可以查看原始音频信号的波形以便进行预处理。

librosa.display.waveshow(y,*,sr=22050,max_points=11025,x_axis="time",offset=0.0,marker="",where="post",label=None,ax=None,**kwargs,)

y :音频时间序列

sr :y的采样率

x_axis :str {‘time’,‘off’,‘none’}或None,如果为“时间”,则在x轴上给定时间刻度线。

offset:水平偏移(以秒为单位)开始波形图

例如:

import librosa

import librosa.display

import matplotlib.pyplot as plt

audio, sr = librosa.load('../data/ringing.wav', duration=20)

# # 绘制音频波形图

plt.figure(figsize=(10, 6))

librosa.display.waveshow(audio, sr=sr)

plt.title('Waveform')

plt.xlabel('Time (s)')

plt.ylabel('Amplitude')

plt.show()

plt.savefig('波形图.png')

    1. 过零率

描述声音的明亮程度,声音越明亮,过零率越高。因为声音信号是波形,所以过零率越高,表示频率越高。

音频过零率(Zero-Crossing Rate, ZCR)是音频信号处理中一个重要的特征,用于表示信号的频率内容和瞬时变化。它计算了音频信号在给定时间段内穿过零点的次数。具体来说,过零率的作用包括:

1. 语音与非语音区分

  • 语音信号通常有较低的过零率,因为语音信号通常是周期性的和连续的。
  • 非语音信号(如音乐或噪声)可能有更高的过零率,特别是在信号包含高频成分时。

2. 噪声检测

  • 过零率可以用来检测噪声或背景噪声的存在。噪声通常会导致信号在短时间内频繁穿越零点,因此具有较高的过零率。

3. 音频特征提取

  • 在音频特征提取中,过零率是一个简单但有用的特征,尤其是在需要捕捉信号的短期变化和粗略频率信息的应用中(如音频分类和音频识别)。

4. 音频分割

  • 在音频处理和编辑中,过零率可以帮助分割音频信号,例如在语音活动检测(VAD)中,用于区分静音和语音部分。

5. 音频分析

  • 过零率也可以用于音频信号的统计特征分析,例如分析音频信号的频率特性和动态范围。

librosa.zero_crossings(y)

    1. 音频截取

就是裁剪音频,指定开始时间和结束时间

import librosa

import numpy as np

import soundfile as sf

query_audio, query_sr = librosa.load('../data/叶丽仪 - 仙鹤情缘.mp3')

##截取音频 截取0-5s

start = 0

duration = 5 #音频时长为5s

stop = start +duration

audio_dst = query_audio[start*query_sr:stop*query_sr]

sf.write('../data/截取.wav', audio_dst, query_sr)  

    1. 去除噪音

# # # 去除噪音

audio_denoised = librosa.effects.preemphasis(query_audio)

sf.write('../data/audio_denoised.wav', audio_denoised, query_sr)

    1. 改变音调

pitch_shifted = librosa.effects.pitch_shift(query_audio, sr=query_sr, n_steps=4)

sf.write('../data/pitch_shifted.wav', pitch_shifted, query_sr)

    1. 声谱图
  1. 显示频谱图:帮助你看到音频信号在不同频率上的强度分布。
  2. 分析频谱特征:通过查看频谱图,你可以分析音频信号的频率特征,比如音高、谐波和噪声。
  3. 时频分析:可用于展示时域和频域的信息,便于分析音频的变化趋势和模式。

# 绘制音频频谱图

plt.figure(figsize=(10, 6))

librosa.display.specshow(librosa.amplitude_to_db(librosa.stft(audio), ref=np.max), y_axis='log', x_axis='time')

plt.colorbar(format='%+2.0f dB')

plt.title('Spectrogram')

# plt.show()

plt.savefig('频谱图.png')

    1. 可视化MFCC特征

MFCC(Mel频率倒谱系数)是音频信号处理中的一种常用特征提取方法,主要用于将音频信号转换为可以用于分析和建模的特征。其作用包括:

  1. 语音识别:MFCC广泛应用于语音识别系统中,通过捕捉音频信号的声音特征来识别语音内容。
  2. 说话人识别:它用于区分不同的说话人,因为每个人的声音特征都具有独特的MFCC表示。
  3. 音频分类:在音乐、噪音检测等任务中,MFCC帮助分类和识别不同类型的音频。
  4. 特征降维:它通过对音频信号进行变换和压缩,减少了数据的维度,同时保留了关键的声音特征。

# 提取MFCC特征

mfccs = librosa.feature.mfcc(y=audio, sr=sr)

# 可视化MFCC特征

plt.figure(figsize=(10, 6))

librosa.display.specshow(mfccs, x_axis='time')

plt.colorbar()

plt.title('MFCC')

plt.xlabel('Time (s)')

plt.ylabel('MFCC Coefficients')

plt.savefig('mfccs.png')

音频相似度

场景描述: 正在构建一个音乐信息检索系统,用户可以通过输入歌曲的音频文件或音频特征来搜索相似的音乐。Librosa可用于提取音频特征并计算相似度。

import librosa

import numpy as np

# 加载查询音频和数据库中的音频

query_audio, query_sr = librosa.load('../data/ringing.wav')

database_audio, database_sr = librosa.load('../data/output1.wav')

# 提取MFCC特征

query_mfcc = librosa.feature.mfcc(y=query_audio, sr=query_sr)

database_mfcc = librosa.feature.mfcc(y=database_audio, sr=database_sr)

mfccs1=np.mean(query_mfcc, axis=1)

mfccs2=np.mean(database_mfcc, axis=1)

from scipy.spatial.distance import euclidean

distance = euclidean(mfccs1, mfccs2)

print(f'Euclidean Distance between audio files: {distance}')

# 计算余弦相似度

from scipy.spatial.distance import cosine

similarity = 1 - cosine(mfccs1, mfccs2)

print(f'Cosine Similarity between audio files: {similarity}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120920.html

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

相关文章

走进低代码报表开发(二):高效报表设计新利器

在前面的文章中,我们已经详细介绍了勤研低代码开发平台的报表数据源可视化设计,接下来,让我们一起来继续了解勤研低代码平台的报表设计,在当今数字化快速发展的时代,高效便捷的开发工具对于企业和开发者来说至关重要。…

股票Alpha模型的案例实现

一:股票Alpha模型的介绍 股票Alpha模型是一种量化投资策略,它旨在通过各种数学和统计方法来预测股票或其他金融资产的未来表现,并以此获取超越市场平均水平的超额收益。Alpha模型的核心思想是识别市场中的Alpha,即与市场波动无关…

centos7搭建harbor私有镜像仓库

centos7搭建harbor私有镜像仓库 1.准备工作 1.1更换软件源 #更换阿里yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum makecache#更换阿里docker源 yum install -y yum-utils yum-config-manager --add-repo http://mi…

如何鉴定各类组件未授权情况

kubelet https://10.211.55.7:10250/healthz 存在授权情况 未授权 dockersock 2375开出来就是未授权 etcd apiserver 6443 8080

php+mysql日志审计管理系统

phpmysql日志审计管理系统 一、系统介绍二、系统展示1.用户登陆2.监控日志3.监控规则4.用户管理 四、其他1.其它系统 一、系统介绍 本系统实现了:用户登陆、日志审计、监控规则、用户管理。 二、系统展示 1.用户登陆 2.监控日志 3.监控规则 4.用户管理 四、其他 …

java实现文本相似度计算

需求 **文本推荐:**有多个文本字符串,如何设计一个简单的统计方法(从词频的角度设计),来计算出多个文本字符串两两之间的相似度,并输出大于指定相似度阈值的文本 分析理解 使用Java实现文本相似度计算的…

9月产品更新 | 超10项功能升级,快来看看你的需求上线了吗?

Smartbi用户可以在官网(PC端下载),更新后便可以使用相关功能,也可以在官网体验中心体验相关功能。 接下来,我们一起来看看都有哪些亮点功能更新吧。 ▎插件商城 Smartbi麦粉社区的应用市场新增了“插件”模块&#xf…

Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)

🎯要点 语义分割图像三层分割椭圆图像脑肿瘤图像分割动物图像分割皮肤病变分割多模态医学图像多尺度特征生物医学肖像多类和医学分割通用图像分割模板腹部胰腺图像分割分类注意力网络病灶边界分割气胸图像分割 Python生物医学图像卷积网络 该网络由收缩路径和扩…

《黑神话悟空》四大弟子三十六难解锁方法

在《黑神话悟空》的神秘世界中,探索和战斗是永恒的主题。对于许多玩家而言,解锁游戏中的成就不仅是对技巧的挑战,也是对游戏深度理解的证明。今天,就让我们一起深入探索如何解锁“四大弟子三十六难”这一成就,让你的旅…

基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及…

SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章

SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章 在数字化浪潮席卷全球的今天,日本市场以其独特的消费文化和强大的购买力,成为了众多品牌竞相角逐的舞台。而SmartNews,作为一款集新闻聚合、个性化推荐与深度内容分析于一体的智能新…

[Linux]:文件(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. C语言文件操作 C语言文件操作接口如下,详情可参照——C语言文…

零基础国产GD32单片机编程入门(十九)红外避障传感器模块实战含源码

文章目录 一.概要二.红外避障模块主要参数1.模块引脚定义2.模块特点3.模块原理图 三.GD32单片机红外避障模块检测实验四.工程源代码下载五.小结 一.概要 红外避障模块具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测遇到障碍物时&…

HTML5( HTML5 、CSS3) 第一天

HTML5 第一天 HTML5 第一天一、什么是 HTML5二、HTML5 新增标签三、多媒体音频标签四、多媒体视频标签五、新增 input 标签六、新增表单属性七、CSS3 新特性八、CSS3 属性选择器九、结构伪类选择器十、nth-child 参数详解十一、nth-child 和 nt-of-type 的区别十二、伪元素选…

写作翻译两不误!Deepl翻译,我的创意加速器

嘿,朋友们!有没有觉得有时候写论文的摘要、给外国朋友发邮件,或者追剧的时候没有字幕,这些都挺让人头疼的?就像是在猜谜语一样难搞?别担心,我有个好消息要告诉大家,2024年翻译界出了…

azkaban安装

azkaban安装 Azkaban介绍azkaban三大组件 Azkaban安装1、下载地址2、安装前准备3、安装1、分别解压web-server、executor-server2、初始化脚本 4、配置ssl认证5、配置 execServer6、配置web-server7、配置user8、启动、激活 验证 Azkaban介绍 Azkaban是由Linkedin开源的一个批…

【西电电装实习】3. SMT

前言 西电电装实习 定义 SMT,全称为Surface Mount Technology,即表面贴装技术。 是一种将电子元器件直接贴装在印刷电路板(PCB)表面的工艺。 与传统的插针式组装方法相比,SMT技术具有更高的组装密度、更小的电子产品…

excel提示宏病毒处理

excel提示宏病毒如何解决? 文章目录 操作步骤1、打开文件2、找到选项3、点击信用中心4、点击信任中心设置5. 依次点击:点击宏设置→通过通知禁用 VBA 宏(A)→(去掉√)信任对VBA工程对象模型的访问→确定6、…

MySQL总结(上)

目录 一、SQL语句1.1、DDL(数据库定义语言)1.1.1、定义数据库1.1.2、定义数据表 1.2、DML(数据库操作语言)1.2.1、增加 insert into1.2.2、删除 delete1.2.3、修改 update 1.3、DQL(数据库查询语言)1.3.1、…

info_scan!自动化漏洞扫描系统,附下载链接

在我们团队的日常工作中,定期进行安全演练和漏洞扫描几乎是必不可少的。每次安全互动我们都需要对关键资产进行全面的安全评估,及时发现可能存在的安全隐患。 就在上周,我们针对几个主要服务进行了例行的漏洞扫描。在这个过程中,…