音频信号(Audio)是带有语音、音乐和音效的有规律的声波的频率、幅度变化的信息载体。根据声波的特征,可以把音频信息分类为规则音频和不规则声音。规则音频可视为一种连续变化的模拟信号,并使用一条连续的曲线(即声波)来表示。
当前人工智能日益成熟并在越来越多的领域获得应用,其中语音识别,音频鉴别等就是其中一个很重要的应用领域。这些核心算法的第一步都是需要将音频文件数据化,提取其中的音频特征。本文主要以其中的一个基本特征 波形为例来进行介绍。在此之前,我们首先来了解音频的一些基本概念,随后介绍如何画出波形图等特征。
一、音频基本概念
1) 通道数
又称声道数。是在采集(录制)声音时引入的概念,即用几个通道去录制声音。一般来说,单声道和双声道的音频文件较为常见。例如在声源的不同位置放置通道去录制,则可以获得多通道的音频数据。
2) 采样率
即每秒钟内采集的样本个数,每个通道分别采集。音频文件的采样率通常较高,例如44100Hz、32000Hz等。
3) 位深
又称之为 量化精度、位宽,表示一个杨本值采用多少bit来表示,用的bit越多则越接近样本的原值。例如若用3个bit表示,则只有2的3次方,也就是8个不同的值,而若用16bit、24bit或更多的bit去量化样本值,则表示的不同指就越多,从而音频听起来就更逼真。
4) 帧数
帧数也就是样本个数。对于“总帧数”要根据上下文来判断,可以是一个通道(声道)的总帧数,也可以是所有通道的总帧数。计算公式为:样本个数=文件的大小/位深精度/通道数。
5) 波形图
又称振幅图,是音频的振幅(或能量)这个维度的图形表达。波形图的横坐标一般为时间,纵坐标一般为dB(即分贝)来表示;有的时候只关心振幅的趋势,那就对振幅进行归一化为[-1,1]范围内。
二、音频波形图的绘制
音频文件大多是以mp3格式进行存储,但是mp3格式文件对于音频的压缩比例较重,因此可以考虑现将mp3文件转化为wav原始文件再提取音频特征。
首先需要安装Python的音频处理模块pydub:
pip install pydub
安装ffmpeg:
brew install ffmpeg
在Ubuntu/Debian Linux安装:
apt-get install ffmpeg
MP3转为wav的具体代码:
from os import path
from pydub import AudioSegment
src = "source.mp3"
dst = "target.wav"
sound = AudioSegment.from_mp3(src)
sound.export(dst, format="wav")
由wav文件画出波形图的源代码:
import librosa
import matplotlib.pyplot as plt
import librosa.display
audioFile='test.wav'
x,sr=librosa.load(audioFile)
plt.figure(figsize=(16,5))
librosa.display.waveplot(x,sr=sr)
plt.show()
显示的波形图如下:
好了,今天的内容先介绍到这里,接下来还会聊到频谱图等特征,敬请期待。
推荐一个公众号:健哥聊量化,会持续推出股票相关基础知识,以及python实现的一些基本的分析代码。欢迎大家关注,二维码如下:
相关文章列表如下: