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

操作步骤整理

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

官网:Core IO and DSP — librosa 0.10.2 documentation

语音信号处理:librosa-优快云博客

    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}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值