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

python:audioFlux 使用教程

AudioFlux 是一个专为音频和音乐分析、特征提取设计的开源 Python 库。它支持广泛的音频处理功能,包括特征提取、音高检测、时频分析、谱图处理等。这些功能被广泛应用于机器学习、深度学习、信号处理等领域,特别是对于音乐信息检索(MIR)、音频分类、语音增强等任务极为有效。

python audioFlux 是一个用于音频信号处理和分析的 Python 库,它提供了丰富的功能,如频谱分析、特征提取等。以下是 audioFlux 的使用教程:

1. 安装

你可以使用 pip 来安装 audioFlux
pip install audioflux
  audioflux-0.1.9-py3-none-any.whl (70.8 MB)
pip install librosa
  librosa-0.11.0-py3-none-any.whl (260 kB)
  audioread-3.0.1-py3-none-any.whl (23 kB)

2. 读取音频文件

使用 audioFlux 读取音频文件通常借助 librosa 库(audioFlux 本身没有内置的音频读取功能),示例如下:在使用时,要将 'your_audio_file.wav' 替换为实际的音频文件路径。

import audioflux as af
import librosa

# 读取音频文件
audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(audio_path, sr=None)

编写 audio_librosa_load.py  如下

# -*- coding: utf-8 -*-
""" use librosa read audio_file """
import os
import sys
from tkinter import filedialog
import audioflux as af
import librosa

# main()
if len(sys.argv) ==1:
    filetypes = [('wav file','.wav')]
    f1 = filedialog.askopenfilename(initialdir='D:/Music', filetypes=filetypes)
elif len(sys.argv) ==2:
    f1 = sys.argv[1]
else:
    print('usage: python audio_librosa_load.py file1.wav')
    sys.exit(1)

if not os.path.exists(f1):
    print(f"{f1} is not exists.")
    sys.exit(2)

fn,ext = os.path.splitext(f1)
if ext.lower() != '.wav':
    print('ext is not .wav ')
    sys.exit(2)
 
# 读取音频文件
#audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(f1, sr=None)
print('sample_rate:', sample_rate)

 运行 \python\audio_librosa_load.py  your_audio.wav

3. 频谱分析

以计算短时傅里叶变换(STFT)为例:编写 audio_stft.py 如下

# -*- coding: utf-8 -*-
""" 频谱分析:以计算短时傅里叶变换(STFT)为例 """
import audioflux as af
import librosa
import numpy as np
import matplotlib.pyplot as plt

# 读取音频文件
audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(audio_path, sr=None)

# 计算 STFT
stft_obj = af.STFT(radix2_exp=12, window_type=af.type.WindowType.RECT, slide_length=1024)
spec_arr = stft_obj.stft(audio_data)

# 计算幅度谱
mag_arr = np.abs(spec_arr)

# 绘制幅度谱
plt.figure(figsize=(10, 6))
plt.imshow(librosa.amplitude_to_db(mag_arr, ref=np.max), origin='lower', aspect='auto')
plt.colorbar(format='%+2.0f dB')
plt.title('STFT Magnitude Spectrum')
plt.xlabel('Time Frames')
plt.ylabel('Frequency Bins')
plt.show()

4. 特征提取

提取 mel 梅尔频率倒谱系数(MFCC):编写 audio_mfcc.py  如下

# -*- coding: utf-8 -*-
""" 特征提取:提取 mel 梅尔频率倒谱系数(MFCC) """
import audioflux as af
import librosa
import matplotlib.pyplot as plt

# 读取音频文件
audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(audio_path, sr=None)

# 提取 MFCC
mfcc_obj = af.MFCC(samplate=sample_rate, num_mfcc=13)
mfcc_arr = mfcc_obj.mfcc(audio_data)

# 绘制 MFCC
plt.figure(figsize=(10, 6))
plt.imshow(mfcc_arr, origin='lower', aspect='auto')
plt.colorbar()
plt.title('MFCC')
plt.xlabel('Time Frames')
plt.ylabel('MFCC Coefficients')
plt.show()

5. 音频合成

通过逆短时傅里叶变换(ISTFT)进行音频合成:编写 audio_istft.py  如下

# -*- coding: utf-8 -*-
""" 音频合成:通过逆短时傅里叶变换(ISTFT)进行音频合成 
    由于在 librosa 版本 0.8.0 之后,librosa.output.write_wav 方法被弃用,并且在后续版本中被移除了。
    如今可以使用 soundfile 库来替代它完成音频文件的保存操作。
"""
import librosa
import audioflux as af
import soundfile as sf

# 读取音频文件
audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(audio_path, sr=None)

# 计算 STFT
stft_obj = af.STFT(radix2_exp=12, window_type=af.type.WindowType.RECT, slide_length=1024)
spec_arr = stft_obj.stft(audio_data)

# 进行 ISTFT
audio_reconstructed = stft_obj.istft(spec_arr)

# 使用 soundfile 保存合成后的音频文件
sf.write('reconstructed_audio.wav', audio_reconstructed, sample_rate)

总结

  • 读取音频:可借助 librosa 库读取音频文件。
  • 频谱分析:利用 STFT 类进行短时傅里叶变换,获取频谱信息。
  • 特征提取:使用 MFCC 类提取梅尔频率倒谱系数。
  • 音频合成:通过 ISTFT 方法进行逆短时傅里叶变换,实现音频合成。

  在频谱分析中,如何选择合适的窗函数?

在频谱分析里,窗函数的选择至关重要,它会直接影响到频谱分析的性能和结果。下面为你详细介绍选择合适窗函数的相关要点:

窗函数的基本作用

在进行离散傅里叶变换(DFT)时,实际信号往往是无限长的,需要进行截断处理。而直接截断会产生频谱泄漏等问题,窗函数就是用来对信号进行加权处理,以改善频谱特性。

常见窗函数及其特点

  • 矩形窗(Rectangular Window)
    • 特点:主瓣宽度最窄,频率分辨率最高,但旁瓣较高,会产生较大的频谱泄漏。
    • 适用场景:当需要高频率分辨率,且信号本身持续时间较短、频谱较集中时适用,比如在测量单频信号的频率时。
  • 汉宁窗(Hanning Window)
    • 特点:旁瓣相对较低,能有效抑制频谱泄漏,但主瓣宽度比矩形窗宽,频率分辨率有所降低。
    • 适用场景:适用于大多数情况,尤其是信号中包含多个频率成分,需要在抑制频谱泄漏和保持一定频率分辨率之间取得平衡时。
  • 汉明窗(Hamming Window)
    • 特点:与汉宁窗类似,旁瓣抑制能力稍弱于汉宁窗,但主瓣宽度基本相同。
    • 适用场景:常用于音频处理、语音信号处理等领域。
  • 布莱克曼窗(Blackman Window)
    • 特点:旁瓣非常低,对频谱泄漏的抑制效果很好,但主瓣宽度更宽,频率分辨率更低。
    • 适用场景:当需要强烈抑制频谱泄漏,对频率分辨率要求不是特别高时使用,例如在测量噪声频谱时。
  • 高斯窗(Gaussian Window)
    • 特点:窗函数形状呈高斯分布,主瓣和旁瓣的过渡比较平滑,没有明显的旁瓣振荡。
    • 适用场景:适用于对信号的时域和频域局部特性都有要求的场合,如时频分析。

选择窗函数的考虑因素

  • 频率分辨率
    • 若需要精确测量信号的频率成分,希望主瓣宽度尽可能窄,此时应选择矩形窗等主瓣较窄的窗函数。例如,在雷达信号处理中,需要精确测量目标的速度(与频率相关),就需要较高的频率分辨率。
  • 频谱泄漏抑制
    • 当信号中包含多个频率成分,且各频率成分之间的间隔较小时,为了避免频谱泄漏导致的频率成分相互干扰,应选择旁瓣较低的窗函数,如汉宁窗、布莱克曼窗等。比如在分析音乐信号的频谱时,由于音乐中包含多个不同频率的音符,需要抑制频谱泄漏以准确分析每个音符的频率。
  • 信号特性
    • 如果信号是周期信号,且周期与窗函数的长度匹配,矩形窗可能是一个不错的选择。而对于非周期信号或随机信号,汉宁窗、汉明窗等更合适。
  • 计算复杂度
    • 不同窗函数的计算复杂度有所不同。矩形窗的计算最简单,只需要对信号进行简单的截断;而一些复杂的窗函数,如布莱克曼窗,计算相对复杂。在对计算资源有限的情况下,需要考虑选择计算复杂度较低的窗函数。

在 audioFlux 中使用窗函数

在 audioFlux 中进行频谱分析时,可以通过设置 STFT 类的 window_type 参数来选择窗函数。以下是一个示例代码:编写 audio_stft_win_type.py  如下

# -*- coding: utf-8 -*-
""" 在 audioFlux 中进行频谱分析时,可以通过设置 STFT 类的 window_type 参数来选择窗函数"""
import librosa
import audioflux as af
import numpy as np
import matplotlib.pyplot as plt

# 读取音频文件
audio_path = 'your_audio_file.wav'
audio_data, sample_rate = librosa.load(audio_path, sr=None)

# 选择窗函数类型,这里以汉宁窗为例
window_type = 'hann'

# 计算 STFT
stft_obj = af.STFT(radix2_exp=12, slide_length=1024,
    window_type=af.type.WindowType.HANN)
spec_arr = stft_obj.stft(audio_data)

# 计算幅度谱
mag_arr = np.abs(spec_arr)

# 绘制幅度谱
plt.figure(figsize=(10, 6))
plt.imshow(librosa.amplitude_to_db(mag_arr, ref=np.max), origin='lower', aspect='auto')
plt.colorbar(format='%+2.0f dB')
plt.title('STFT Magnitude Spectrum with Hanning Window')
plt.xlabel('Time Frames')
plt.ylabel('Frequency Bins')
plt.show()

在上述代码中,window_type 参数设置为 'hann' 表示使用汉宁窗。你可以根据需要将其修改为其他窗函数类型,如 'rect'(矩形窗)、'hamm'(汉明窗)等。

总之,选择合适的窗函数需要综合考虑频率分辨率、频谱泄漏抑制、信号特性和计算复杂度等因素,根据具体的应用场景做出合理的选择。


除了 MFCC(梅尔频率倒谱系数),在音频处理领域还有许多其他常用的特征提取方法,下面为你详细介绍:

时域特征

  • 零交叉率(Zero Crossing Rate, ZCR)
    • 原理:零交叉率指的是在一个音频帧中,信号波形穿过零电平的次数。它反映了音频信号的频率特性,高频信号的零交叉率通常较高,低频信号则较低。
    • 应用场景:常用于语音端点检测、语音 / 音乐分类等任务。例如在语音识别系统中,可以利用零交叉率来区分语音和静音部分。
  • 均方根能量(Root Mean Square Energy, RMSE)
    • 原理:计算音频信号在每个帧内的能量,通过对信号平方后求平均值再开方得到。它反映了音频信号的强度或响度。
    • 应用场景:在音频降噪、语音活动检测等方面有广泛应用。比如在音频降噪中,可以根据均方根能量判断音频是否为噪声。

频域特征

  • 频谱质心(Spectral Centroid)
    • 原理:频谱质心表示音频频谱的重心位置,它反映了音频信号的音调高低。频谱质心越高,音频的音调越高。
    • 应用场景:常用于音乐分类、情绪分析等。例如在音乐分类中,可以根据频谱质心区分高音调的音乐(如小提琴曲)和低音调的音乐(如贝斯演奏)。
  • 频谱带宽(Spectral Bandwidth)
    • 原理:频谱带宽描述了音频频谱的分布宽度,它反映了音频信号的频率丰富程度。带宽越宽,说明音频包含的频率成分越丰富。
    • 应用场景:在音频质量评估、乐器识别等方面有应用。比如在乐器识别中,不同乐器的频谱带宽可能不同,可以作为区分的特征之一。

时频域特征

  • 线性预测倒谱系数(Linear Predictive Cepstral Coefficients, LPCC)
    • 原理:基于线性预测分析,通过对音频信号进行线性预测建模,然后将预测系数转换为倒谱系数。LPCC 能够反映音频信号的声道特性。
    • 应用场景:常用于语音识别、说话人识别等任务。在说话人识别中,LPCC 可以捕捉到不同说话人的声道特征差异。
  • 伽马通频率倒谱系数(Gammatone Frequency Cepstral Coefficients, GFCC)
    • 原理:模拟人类听觉系统的伽马通滤波器组对音频信号进行滤波,然后提取倒谱系数。GFCC 更符合人类听觉特性。
    • 应用场景:在语音识别、环境声音分类等领域有较好的效果。例如在复杂环境下的语音识别中,GFCC 能够更好地抵抗噪声干扰。

其他特征

  • 韵律特征
    • 原理:韵律特征主要包括音长、音高、音强等方面的变化规律。音长指的是音频信号的持续时间,音高反映了音频的音调高低,音强表示音频的响度。
    • 应用场景:在语音情感识别、语音合成等方面有重要应用。比如在语音情感识别中,愤怒的语音通常音高较高、音强较大,而悲伤的语音音高较低、音长较长。
  • 谱平坦度(Spectral Flatness)
    • 原理:谱平坦度用于衡量音频频谱的平坦程度,它是频谱的几何平均值与算术平均值的比值。谱平坦度越接近 1,说明频谱越平坦,信号越接近白噪声。
    • 应用场景:在音频质量评估、噪声检测等方面有应用。例如在音频质量评估中,谱平坦度可以反映音频的纯净程度。

这些特征提取方法各有优缺点,在实际应用中,通常会结合多种特征来提高音频处理任务的性能。

相关文章:

  • 【maxENT】最大熵模型(Maximum Entropy Model)R语言实现
  • 双系统win11 + ubuntu,如何完全卸载ubuntu系统?
  • Flutter中如何判断一个计算任务是否耗时?
  • 封装Tcp Socket
  • Pinocchio中data、model接口介绍
  • Echarts跨平台设备适配详解
  • ssh 三级跳
  • C语言中数组与指针:差异、应用及深度剖析
  • 【unity游戏开发入门到精通——UGUI】CanvasScaler画布缩放器组件
  • 探索 Go 与 Python:性能、适用场景与开发效率对比
  • MySQL中的UNION和UNION ALL【简单易懂】
  • 深入解析@Validated注解:Spring 验证机制的核心工具
  • 层归一化(Layer Normalization) vs 批量归一化(Batch Normalization)
  • mysql 有哪些存储引擎、区别是什么
  • 行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)
  • Maven工具学习使用(十一)——部署项目到仓库
  • 3.4 函数单调性与曲线的凹凸性
  • 欢乐力扣:删除链表的倒数第n个节点
  • vue @import引入CSS scoped无效 造成全局样式污染
  • 【LeetCode 热题100】二叉树遍历入门:从中序遍历到层序与右视图(力扣94 / 102/199)(Go语言版)
  • 周口网站建设zkweb/网络安全有名的培训学校
  • 中国著名b2b电子商务网站/百度词条
  • 即墨网站建设公司/武汉网络推广平台
  • web技术网站开发/武汉seo公司
  • 关键词排名优化易下拉稳定/太原seo计费管理
  • 贵港网站制作/2345网址导航设置