语音识别--声音位置与起始位置检测

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟

🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿

个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

语音识别--声音位置与起始位置检测

声音位置与起始位置检测


一、任务需求

在本实验中,我们将学习如何通过检测声音强度,来确定声音的位置,及起始位置。

声音(起始)位置检测非常重要,例如对声音样本进行剪辑等。

要求:利用librosa识别声音峰值位置和起始位置

二、任务目标

1、掌握声音峰值检测方法
2、掌握声音起始位置检测方法

三、任务环境

1、jupyter开发环境
2、python3.6
3、tensorflow2.4

四、任务实施过程

1、声音位置检测

首先要学习的是函数librosa.onset.onset_detect,它通过在起始强度包络中挑选峰值来定位音符起始事件。

函数参数说明如下:

  • y:音频时间序列
  • sr:采样率
  • onset_envelope:预先计算的起始强度包络(可选参数)
  • units:编码检测到的起始事件的单位。默认情况下,使用"帧"。
  • backtrack:是否将检测到的起始事件回溯到最近的先前能量最小值

加载工具和数据

python 复制代码
import librosa
import numpy as np
python 复制代码
import librosa.display
import matplotlib.pyplot as plt
python 复制代码
import IPython.display as ipd
python 复制代码
y, sr = librosa.load('/home/jovyan/datas/classic_rock_beat.wav')
python 复制代码
ipd.Audio(y,rate=sr)

计算声音位置对应的帧

python 复制代码
# 估计开始的帧数
onset_frames = librosa.onset.onset_detect(y, sr=sr)
print(onset_frames)
[ 20  29  38  57  66  75  84  93 103 112 121 131 140 149 158 167 176 185
 196 204 213 232 241 250 260 269 278 288]

将帧转换为帧所对应的时间

python 复制代码
onset_times = librosa.frames_to_time(onset_frames)
print(onset_times)
python 复制代码
[0.46439909 0.67337868 0.88235828 1.32353741 1.53251701 1.7414966
 1.95047619 2.15945578 2.39165533 2.60063492 2.80961451 3.04181406
 3.25079365 3.45977324 3.66875283 3.87773243 4.08671202 4.29569161
 4.55111111 4.73687075 4.94585034 5.38702948 5.59600907 5.80498866
 6.03718821 6.2461678  6.45514739 6.68734694]

将声音转换为频谱图,并叠加声音位置

python 复制代码
S = librosa.stft(y)
logS = librosa.amplitude_to_db(abs(S))
python 复制代码
fig,ax = plt.subplots(nrows=2,sharex=True,figsize=(12,6))
librosa.display.specshow(logS,x_axis='time', y_axis='log',cmap='coolwarm',ax=ax[0])
ax[0].vlines(onset_times, 0, 10000, color='r')
ax[0].set_title('Spectrogram Show')

librosa.display.waveplot(y,ax=ax[1])
ax[1].vlines(onset_times, y.min(), y.max(), color='r')
ax[1].set_title('Wave Show')

Text(0.5, 1.0, 'Wave Show')

红色竖线对应了声音位置,无论频谱图还是波形图,声音检测位置都十分准确。

2、声音起始位置检测

接下来我们将使用librosa.onset.onset_backtrack检测声音的起始位置,也称为回溯检测,本质是检测声音位置到最近的能量函数的前一个局部最小值。

该函数接收以下参数:

  • events: 事件帧(声音位置帧)的索引列表,由onset_detect计算得到
  • energy: 能量函数

接下来我们通过实验来学习如何寻找声音起始位置。

首先需要使用librosa.onset.onset_strength获取声音的能量函数

然后使用librosa.onset.onset_backtrack获取声音起始位置帧

python 复制代码
oenv = librosa.onset.onset_strength(y=y, sr=sr)
onset_bt = librosa.onset.onset_backtrack(onset_frames, oenv)
python 复制代码
plt.plot(oenv)

[<matplotlib.lines.Line2D at 0x7ff7cbe44d68>]

该图显示了声音在不同帧数的能量函数。

对频谱图强度做RMS均方根计算,得到频谱图的强度。

python 复制代码
rms = librosa.feature.rms(S=S)
onset_bt_rms = librosa.onset.onset_backtrack(onset_frames, rms[0])
python 复制代码
plt.plot(rms.T)

[<matplotlib.lines.Line2D at 0x7ff7cbdc4dd8>]

通过onset_backtrack函数,我们计算得到音频强度对应的起始位置。

将帧转换为时间位置,方便绘图

python 复制代码
onset_bt_rms_time = librosa.frames_to_time(onset_bt_rms)

将检测到的声音起始位置叠加在之前的librosa.onset.onset_detect图上,方便比较二者的区别。

python 复制代码
fig,ax = plt.subplots(nrows=2,sharex=True,figsize=(12,6))
librosa.display.specshow(logS,x_axis='time', y_axis='log',cmap='coolwarm',ax=ax[0])
ax[0].vlines(onset_times, 0, 10000, color='r',linestyle='--',linewidth=1,label='onset events')
ax[0].vlines(onset_bt_rms_time, 0, 10000, color='k',label='Backtrack detecte')
ax[0].set_title('Spectrogram Show')
ax[0].legend(bbox_to_anchor=(1.05, 1.0),loc='upper left')

librosa.display.waveplot(y,ax=ax[1])
ax[1].vlines(onset_times, y.min(), y.max(), color='r',linestyle='--',linewidth=1)
ax[1].vlines(onset_bt_rms_time, y.min(), y.max(), color='k')
ax[1].set_title('Wave Show')

Text(0.5, 1.0, 'Wave Show')

从图中可以看出,红色虚线是检测到的声音事件的峰值位置,黑色是声音事件的起始位置,这在频谱图上可以看的更清晰。如果要做声音样本剪切,可以选择黑色位置做为起始点,可以一定程度上避免人工剪切带来的缺点。

五、任务小结

本实验使用的函数包括librosa.onset.onset_detectlibrosa.onset.onset_backtrack通过检测声音强度,来确定声音的位置,及起始位置。。通过本实验我们学习到了音频及其起始位置检测的相关知识,需要掌握以下知识点:

  • librosa.onset.onset_detect检测声音峰值位置
  • librosa.onset.onset_backtrack检测声音起始位置

--end--

说明

本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我

相关推荐
艾思科蓝-何老师【H8053】9 分钟前
【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
人工智能·信号处理·论文发表·香港中文大学
weixin_4526006937 分钟前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪
学术搬运工37 分钟前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
右恩1 小时前
AI大模型重塑软件开发:流程革新与未来展望
人工智能
学编程的小程1 小时前
【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing
安全·开源·音视频
图片转成excel表格1 小时前
WPS Office Excel 转 PDF 后图片丢失的解决方法
人工智能·科技·深度学习
芯视音赖工1 小时前
传统型视频展台方案分享
音视频
ApiHug2 小时前
ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
人工智能·spring boot·spring·ai编程·apihug
melonbo2 小时前
音频采样数据格式
音视频
weixin_452600692 小时前
【青牛科技】14W 高保真音频放大电路——D2030
科技·单片机·嵌入式硬件·音视频·电动工具·智能电表