语音识别---节拍器

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计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.hqwc.cn/news/671363.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react + xlsx 表格导出功能 全部实现

需求 : 在react中将表格多样化导出 , 既可以全部导出所有表格数据 , 也可以选择性导出 导出可以选择三种样式 选择了全部 , 不能选其他 全部导出 部分导出 1 导出按钮下拉弹出三种导出格式 <Dropdownmenu{{items: [{label: (<aonClick{() > {setFormat(xlsx)}}>…

淡茶和浓茶的标准

按照《品深淡茶冲泡标准》&#xff0c;淡茶茶汤中的咖啡碱不得高于31.67mg/100mL&#xff0c;可可碱不得高于2.67mg/mL&#xff0c;茶碱不得高于1.50mg/100mL&#xff0c;茶多酚不得高于143mg/mL&#xff0c;按照各类茶叶中各物质的含量情况&#xff0c;茶水比例不得高于1:150&…

Linux网络-部署YUM仓库及NFS共享服务

目录 一.YUM仓库服务 1.YUM概述 1.1.YUM&#xff08;Yellow dog Updater Modified&#xff09; 2.准备安装源 2.1.软件仓库的提供方式 2.2.RPM软件包的来源 2.3.构建CentOS 7 软件仓库 2.4.在软件仓库中加入非官方RPM包组 3.一键安装软件包的工具&#xff1a; 好处&a…

fs-extra替代 Node内置 fs 模块,更安全、更强大的文件操作库

fs-extra 是作为替代 Node.js 内置 fs 模块创建的&#xff0c;当你的项目中引入 fs-extra 后&#xff0c;就可以像下面这样做。将所有使用 require(fs) 的地方&#xff1a; const fs require(fs) // this is no longer necessary 改成 require(fs-extra)&#xff1a; con…

im即时通讯源码/仿微信app源码+php即时通讯源码带红包+客服+禁言等系统php+uniapp开发

即时通讯(IM)系统是现代互联网应用中不可或缺的一部分&#xff0c;它允许用户进行实时的文本、语音、视频交流。随着技术的发展&#xff0c;IM系统的功能越来越丰富&#xff0c;如红包、客服、禁言等。本文将探讨如何使用PHP语言开发一个功能完备的即时通讯系统&#xff0c;包括…

Java Set集合

1. Set接口 1.1 Set接口概述 Set接口继承自Collection接口&#xff0c;所以与Collection接口中的方法基本一致&#xff0c;并没有对Collection接口进行功能上的扩充&#xff0c;只是比Collection接口更加严格。 Set集合的特点是无序且不可重复&#xff1a; 无序&#xff1a;不…

网卡自动切换AP和AC模式

AC模式搜索不到WiFi AC模式是指client模式&#xff0c;也就是可以自动接入wifi的模式 参考将外置网卡设置为 AP模式之后&#xff0c;发现搜索不到wifi了 &#xff08;换了一台ubuntu测试发现可以&#xff0c;所以不是硬件问题&#xff09; 经过nmcli device status查看设备发…

OCC笔记:图形可视化的实现方式

注&#xff1a;文中参看的occ的源码版本为7.4.0 1、实现思路概览 整体架构 主要有3大块&#xff1a;AIS&#xff08;Application Interactive Services &#xff0c;直译为&#xff1a;应用程序交互服务&#xff09;、Graphics&#xff08;图形&#xff09;、Geometry & T…

2024.05.06作业

自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 #include "yuanshen.h"yuanshen::yuanshen(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(1600,910);this->setFixedSize(1600,910);//窗口标题this-…

【C语言】数据类型

有哪些数据类型&#xff1f; char - 字符数据类型&#xff0c;存储一个字符&#xff0c;大小是1字节。short - 短整型&#xff0c;存储一个整数&#xff0c;大小是2字节。int - 整型&#xff0c;存储一个整数&#xff0c;大小是4字节。long - 长整型&#xff0c;存储一个整数&…

华为 二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量。它可以帮助防止未经授权的访问&#xff0c;保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量&#xff0c;例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

AIGC时代重塑数字安全风控体系

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…