语音识别---节拍器

server/2024/9/25 23:18:35/

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

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

语音识别---节拍器

  • 节拍器
    • 一、任务需求
    • 二、任务目标
          • 1、掌握clicks轨迹
          • 2、掌握动态编程节拍跟踪器函数
    • 三、任务环境
          • 1、jupyter开发环境
          • 2、python3.6
          • 3、tensorflow2.4
    • 四、任务实施过程
      • 1、加载工具和数据
      • 2、观察数据
      • 3、生成节奏
      • 4、绘制节拍器
      • 5、节拍器演示
    • 五、任务小结
  • 说明

节拍器


一、任务需求

在本实验中,我们将根据给出的音乐,生成与之对应的节拍器

生成节拍器最关键的函数是librosa.clicks和librosa.beat.beat_track。

要求:利用librosa.clicks和librosa.beat.beat_track实现节拍器功能。

二、任务目标

1、掌握clicks轨迹
2、掌握动态编程节拍跟踪器函数

三、任务环境

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

四、任务实施过程

在本实验中,我们将根据给出的音乐,生成与之对应的节拍器

生成节拍器最关键的函数是librosa.clickslibrosa.beat.beat_tracklibrosa.clicks函数专门用来生成clicks轨迹,其参数如下:

  • times: 每秒放置clicks次数
  • frames: 用于放置clicks的帧索引
  • sr: 采样率
  • length: 输出信号所需样本数
  • click_freq: 默认clicks信号的频率(以赫兹为单位)。默认为 1KHz
  • click_duration: 默认clicks信号的持续时间(以秒为单位)。默认值为 100 毫秒。

函数返回值为合成clicks信号

librosa.beat.beat_track则是动态编程节拍跟踪器函数

1、加载工具和数据

import librosa
import librosa.display
import numpy as np
import IPython.display as ipd
import matplotlib.pyplot as plt

读取并播放音频,这是一段Drum-bass(某种鼓)的音乐

# 检测beat事件
y, sr = librosa.load('/home/jovyan/datas/admiralbob77_-_Choice_-_Drum-bass.ogg', duration=10)
ipd.Audio(y,rate=sr)

2、观察数据

在生成节拍器之前,我们先来查看波形图

plt.figure(figsize=(12,3))
librosa.display.waveshow(y,sr)

<librosa.display.AdaptiveWaveplot at 0x7f7923993cf8>

在这里插入图片描述

从波形图上,可以看出这段音频应该存在一定的节奏,接下来我们就要用librosa.beat.beat_track来生成节奏,这是一个动态编程节拍跟踪器函数。生成节奏以后,使用librosa.clicks来合成节奏。

3、生成节奏

# 使用beat_track生成节奏
tempo, beats = librosa.beat.beat_track(y=y, sr=sr)
y_beats = librosa.clicks(frames=beats, sr=sr)

查看一下beats,显然,这是节奏所在的帧序号

beats
array([  3,  21,  40,  59,  78,  96, 116, 135, 154, 173, 192, 211, 230,249, 268, 287, 306, 325, 344, 363])

或者通过下面这种方法产生和y长度相同的信号

y_beats_len = librosa.clicks(frames=beats, sr=sr, length=len(y))

或者使用计时而不是帧索引生成节奏信号(将帧转换为计时)

times = librosa.frames_to_time(beats, sr=sr)
y_beat_times = librosa.clicks(times=times, sr=sr)

或使用880Hz的点击频率和500ms的采样生成节奏信号

y_beat_times880 = librosa.clicks(times=times, sr=sr,click_freq=880, click_duration=0.5)

4、绘制节拍器

我们可以将生成的节奏波形图绘制出来,方便你对不同节拍器进行区别。

# 绘制不同的节拍器
fig, ax = plt.subplots(nrows=4, sharex=True,figsize=(12,6))
librosa.display.waveshow(y_beats, sr=sr, label='y_beats', ax=ax[0],x_axis=None)
librosa.display.waveshow(y_beats_len, sr=sr, label='y_beats_len', ax=ax[1],x_axis=None)
librosa.display.waveshow(y_beat_times, sr=sr, label='y_beat_times', ax=ax[2],x_axis=None)
librosa.display.waveshow(y_beat_times880, sr=sr, label='y_beat_times880', ax=ax[3])[ax[i].legend() for i in range(4)];

在这里插入图片描述
当然,我们还可以将原始音频的频谱图和节拍器波形图放在一起比较

import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=2, sharex=True)
S = librosa.feature.melspectrogram(y=y, sr=sr)
# 绘制频谱图
librosa.display.specshow(librosa.power_to_db(S, ref=np.max),x_axis='time', y_axis='mel', ax=ax[0])
# 绘制波形图
librosa.display.waveshow(y_beats_len, sr=sr, label='Beat clicks',ax=ax[1])
ax[1].legend()
ax[0].label_outer()
ax[0].set_title(None);

在这里插入图片描述

5、节拍器演示

我们也可以听一听生成的节拍器

ipd.Audio(y_beats_len,rate=sr)

也可以把音频和节拍器组合在一起,需要注意这是一个双声道音频

two_channel = np.vstack((y,y_beats_len))
ipd.Audio(two_channel,rate=sr)

将双声道音频转换为单声道音频,也许能帮助你更好的理解节拍器

ipd.Audio(librosa.to_mono(two_channel),rate=sr)

五、任务小结

本实验中,我们 通过librosa节拍器函数生成节拍,并找到节拍对应的位置。

然后使用可视化工具将节拍绘制出来,并将节拍器通过音频播放出来。

–end–

说明

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


http://www.ppmy.cn/server/35011.html

相关文章

CWDM、DWDM、MWDM、LWDM:快速了解光波复用技术

在现代光纤通信领域&#xff0c;波分复用&#xff08;WDM&#xff09;技术作为一项先进的创新脱颖而出。它通过将多个不同波长和速率的光信号汇聚到一根光纤中来有效地传输数据。本文将深入探讨几种关键的 WDM 技术&#xff08;CWDM、DWDM、MWDM 和 LWDM&#xff09;&#xff0…

HCIP ospf综合实验

要求&#xff1a; 1、R4为ISP&#xff0c;其上只能配置IP地址 R4与其他所有直连设备均使用公有IP 2、R3 5 6 7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境基于 172.16.0.0 16 划分 4、所有设备均可以访问R4的环回 5、减少LSA更新量&#xff0c;加快收敛&#xff0c…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下&#xff08;我是将其放在了D盘的一个software的文件中管理&#xff09; 2.…

SVM单类异常值检测

SVM是一种广泛使用的分类器&#xff0c;通常用于二分类或多分类问题。然而&#xff0c;在异常点检测的场景中&#xff0c;我们通常会将数据视为一个类别&#xff08;即正常数据点&#xff09;&#xff0c;并尝试找到那些与正常数据点显著不同的点&#xff08;即异常点&#xff…

炒股自动化:散户如何通过API查询资产和持仓,Python接口

券商官方的接口&#xff0c;个人账户可申请&#xff0c;入金门槛低&#xff0c;接入文档完善&#xff0c;技术支持好的&#xff0c;经过我们筛选后&#xff0c;只有一家符合&#xff0c;会编程&#xff0c;有基础&#xff0c;只是需要API接口的朋友不用看这些内容&#xff0c;不…

小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具

文章目录 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具概述笔记效果编译AStyle的DLL初次使用接口的小疑惑测试程序 - 头文件测试程序 - 实现文件测试程序 - RC备注END 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具 概述 上一个实验(vs2019 - ast…

golang垃圾回收

4.29 Golang中GC回收机制三色标记与混合写屏障 第14讲-总结哔哩哔哩bilibili 三个阶段 gc垃圾回收 早期是 GO1.3 标记清除  之前的标记清除&#xff1a;开始标记找到可达对象&#xff0c;并标记&#xff0c;标记完后清楚未标记的 较长时间的STW&#xff0c;使程序暂停…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…