⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
语音识别--加载音频
- 加载音频
- 一、任务需求
- 二、任务目标
- 1、掌握librosa加载音频
- 2、学习采样率
- 3、学习读取指定时段音频
- 三、任务环境
- 1、jupyter开发环境
- 2、python3.6
- 3、tensorflow2.4
- 四、任务实施过程
- 1、设置jupyter多行输出
- 2、使用librosa加载音频
- 3、采样率
- 4、读取指定时段音频
- 五、任务小结
- 说明
加载音频
一、任务需求
声音处理,最重要的一步就是加载音频,音频不同于结构化数据,音频没有特定的格式。音频不同于图像,图像可见,音频不可见,因此音频的读取是不同于其他数据格式的(倒是和波等时序数据相似)。在本节实验中,我们将尝试读取音频数据,并了解一些相关知识。
要求:利用librosa等工具掌握音频加载方法
二、任务目标
1、掌握librosa加载音频
2、学习采样率
3、学习读取指定时段音频
三、任务环境
1、jupyter开发环境
2、python3.6
3、tensorflow2.4
四、任务实施过程
1、设置jupyter多行输出
为了方便在同一个代码框打印多个输出,我们先学一个关于jupyter的小技巧
# 设置jupyter为多行输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
2、使用librosa加载音频
Librosa是一个用于音频、音乐分析、处理的python工具包,一些常见的时频处理、特征提取、绘制声音图形等功能应有尽有,功能十分强大。读取音频的方式很多,在这里我们使用librosa读取。
import IPython.display as ipd
import librosa
我们使用函数librosa.load
读取音频数据,该函数返回值为audio time series
,也就是音频数据本身,和sampling rate
采样率。所谓采样率,其实就是单位时间内,对声音采集多少个样本点。
filename = '/home/jovyan/datas/sorohanro_-_solo-trumpet-06.ogg'
y, sr = librosa.load(filename)
y
len(y),sr
从结果可以看出,该音频由117601个采样点组成,采样率22050。因此音频的时间长度为:
print('%.2f s'%(117601/22050))
5.33 s
接下来我们将学习如何在jupyter中播放音频
import IPython.display as ipd
ipd.display(ipd.Audio(y, rate=sr,autoplay=False))
3、采样率
正如上文所说,采样率,其实就是单位时间内,对声音采集多少个样本点。
接下来我们将修改读取音频时的采样点,再次读取数据。
# 加载文件并重采样喂 11 KHz
filename = '/home/jovyan/datas/sorohanro_-_solo-trumpet-06.ogg'
y, sr = librosa.load(filename, sr=11025)
y
len(y),sr
array([-8.7455846e-04, -3.3625244e-04, 1.4627776e-04, …,
1.2944984e-05, -1.3008447e-05, 0.0000000e+00], dtype=float32)
(58801, 11025)
可以看到,采样率降低一半,音频采样点也会下降一半 117601 / 2 = 58801 117601/2=58801 117601/2=58801,这与我们的预期相同。同时声音的时长并不会发生变化,因为采样点和采样率都降低为原来的一半。为了验证这个结论,我们可以再次播放该声音,你也可以比较一下两次读取的声音是否有差别(可能需要设备和听觉足够灵敏)。
ipd.display(ipd.Audio(y, rate=sr,autoplay=False))
4、读取指定时段音频
给定一段音频,我们可能只需要其中一段。这种情况下,并不需要将完整音频加载进来,然后再使用切片器截取。实际上,librosa已经集成了这种功能,使用方法如下:
# 选取15-20秒的音频
filename = '/home/jovyan/datas/Hungarian_Dance_number_5_-_Allegro_in_F_sharp_minor_(string_orchestra).ogg'
y,sr = librosa.load(filename)
y_clip, sr_clip = librosa.load(filename, offset=15.0, duration=5.0)
len(y),len(y_clip)
sr,sr_clip
(1010880, 110250)
(22050, 22050)
在函数librosa.load
中,使用了两个新的参数,offset=15.0, duration=5.0
,顾名思义,offset是指时间偏移,duration是指读取时长,因此这句命令的意思是,从音频的15秒开始,读取连续5秒,即读取15-20秒,共五秒的音频。
为了验证是不是这回事,我们先播放全部音频。
ipd.display(ipd.Audio(y, rate=sr,autoplay=False))
然后再播放截取后的音频。
ipd.display(ipd.Audio(y_clip, rate=sr_clip,autoplay=False))
从播放结果看,音频被正确截取了时长。
五、任务小结
本节实验我们学习了使用librosa.load
加载音频,同时学习了采样率。
采样率,其实就是单位时间内,对声音采集多少个样本点。
最后我们还学习了如何使用librosa读取指定时段的音频。
–end–
说明
本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我