语音识别---节拍器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

商城数据库88张表结构完整示意图41~50(十二)

四十一&#xff1a; 四十二&#xff1a; 四十三&#xff1a; 四十四&#xff1a; 四十五&#xff1a; 四十六&#xff1a; 四十七&#xff1a; 四十八&#xff1a; 四十九&#xff1a; 五十&#xff1a;

说说你对盒子模型的理解?

一、是什么 当对一个文档进行布局&#xff08;layout&#xff09;的时候&#xff0c;浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型&#xff08;CSS basic box model&#xff09;&#xff0c;将所有元素表示为一个个矩形的盒子&#xff08;box&#xff09; 一个盒子由四…

开源推荐榜【MalusAdmin基于 Vue3/TypeScript/NaiveUI 和 NET7 Sqlsugar 开发的后台管理框架】

简介 Malus是海棠的意思&#xff0c;顾名思义&#xff0c;海棠后台管理系统&#xff0c;读音与【马卢斯】相近&#xff0c;也可称作为马卢斯后台管理系统。 基于NET Core | NET7/8 & Sqlsugar | Vue3 | vite4 | TypeScript | NaiveUI 开发的前后端分离式权限管理系统,采用…

2024SCVN南方时尚之夜:童模冰雪之境惊艳亮相

在广州黄埔君澜酒店&#xff0c;璀璨的灯光下&#xff0c;一场主题为“雪山”、“童模”与“时尚”的盛宴于2024年5月1日至5月3日华丽上演。这场名为“2024SCVN南方时尚之夜&绽放冰雪之境”的活动&#xff0c;如同一颗璀璨的明珠&#xff0c;镶嵌在初夏的广州&#xff0c;熠…

IPD-开发流程

2024-5-6记录于PR办公室 在上一家公司做硬件产品经理的时候&#xff0c;Richard Li曾花费“巨资”请了华为前战略专家给我们培训&#xff0c;讲授IPD这门课的模式都很IPD&#xff0c;当时完全没重视&#xff0c;光想着不可能靠这个能把产品做好&#xff0c;这样做产品必定是一批…

【电影】【指环王】【中土世界】影碟播放记录

一、写在前面 笔者于5月5日&#xff08;昨天&#xff09;在新加坡淘到了一套《指环王 The Lord of the Rings》DVD光碟&#xff0c;今天却听闻噩耗&#xff0c;Rohan国王Theoden的扮演者&#xff0c;英国演员Bernard Hill去世&#xff08;享年79岁&#xff09;&#xff0c;发文…

接口自动化测试之-requests模块详解

一、requests背景 Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 二、requests安装 利用p…

Windows环境下VSCode C无法跳转自动补全

前言&#xff1a; 本文记录了自己在配置 Windows环境下 VSCode C开发环境的遇到的问题和解决方法。 参考: vscode c语言没有代码提示_clangd提示不生效-CSDN博客 VSCODE无法跳转_vscode 不能跳转-CSDN博客 vscode c/c环境配置&#xff08;MinGW&#xff09;调用第三官方库…

鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案

官方概述 先看官方对事件的描述. 事件&#xff08;Event&#xff09;是一种任务间通信的机制&#xff0c;可用于任务间的同步。 多任务环境下&#xff0c;任务之间往往需要同步操作&#xff0c;一个等待即是一个同步。事件可以提供一对多、多对多的同步操作。 一对多同步模型…

冯喜运:5.6周一国际黄金实时盘面走势分,原油最新操作

【黄金消息面分析】&#xff1a;周一(5月6日)亚市盘中&#xff0c;黄金市场出现大行情。现货黄金短线加速飙升&#xff0c;金价一度触及2315美元/盎司&#xff0c;较日内低点大幅反弹逾20美元/盎司&#xff0c;目前交投于2310.61美元/盎司附近。COMEX最活跃黄金期货合约北京时间…

集合定义和使用方法

一.集合的长度 集合的长度,可以添加和删除,长度也会跟着去发生改变,数组一旦创建完成他的长度就不会发生改变。 二.集合的定义方式 ArrayList<String> list new ArrayList(); 三.集合能存储的数据类型 集合能够存储引用数据类型,存储基本数据类型需要使用包装类: 四…

年轻人刮疯了,刮刮乐断货了

年轻人刮疯了 刮刮乐缺货了。 00后彩票店老板陆诗等得有点着急。她的福彩店开在深圳&#xff0c;今年4月才开门营业&#xff0c;但从开业到今天&#xff0c;刮刮乐总共就来了一回货——开业时发的20本。 那之后&#xff0c;刮刮乐就彻底断供了。原本&#xff0c;陆诗想把刮刮…

文件加密软件排行榜前四名(2024年4大好用的加密软件推荐)

说到文件加密&#xff0c;想必大家都很熟悉&#xff0c;文件加密已经普遍应用&#xff0c;文件加密是一种重要的安全措施&#xff0c;可以确保数据的机密性、完整性和可用性&#xff0c;降低因数据泄露或丢失带来的风险 。 下面小编给大家分享几款常用的加密软件&#xff0c;…

深入C语言:文件操作实现局外影响程序

一、什么是文件 文件其实是指一组相关数据的有序集合。这个数据集有一个名称&#xff0c;叫做文件名。文件通常是驻留在外部介质(如磁盘等)上的&#xff0c;在使用时才调入内存中来。 文件一般讲两种&#xff1a;程序文件和数据文件&#xff1a; 程序文件&#xff1a;包括源程…

Android Studio实现简单的自定义钟表

项目目录 一、项目概述二、开发环境三、详细设计3.1、尺寸设置3.2、绘制表盘和指针3.3、动态效果 四、运行演示五、总结展望六、源码获取 一、项目概述 在安卓开发中&#xff0c;当系统自带的View已经无法满足项目需求时&#xff0c;就要自定义View。在Android中是没有与钟表有…

Linux PXE高效批量网络装机

系统初始化 systemctl disable --now firewalld.service setenforce 0 vim /etc/selinux/config 安装软件 yum install -y tftp-server xinetd dhcp vsftpd syslinux 复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录 [rootlocalhost ~]# cd /mnt/…

OWASP 发布开源软件OSS的十大风险,已知漏洞排名第一,首次汇齐了10大类型的攻击案例

尽管软件供应链严重依赖开源软件&#xff0c;但业界缺乏一致的方法来理解和衡量开源软件的风险。 OSS&#xff08;Open Source Sofware&#xff0c;开源软件&#xff09;的风险管理从许可证管理开始&#xff0c;然后发展到CVE&#xff0c;但我们仍然缺乏涵盖安全、法律和运营方…

Java请求第三方接口的一些步骤

一、前言 Java请求第三方接口的一些步骤。 在Java中请求第三方接口通常涉及以下步骤。这些步骤涵盖了从准备请求到处理响应的整个过程。 1. 确定接口详情 接口URL&#xff1a;你要请求的URL。请求方法&#xff1a;如GET、POST、PUT、DELETE等。请求参数&#xff1a;包括URL…

git tag 相关操作

文章目录 前言一、git里面的Tag二、Tag 类型1. 轻量级标签&#xff08;Lightweight Tag&#xff09;2. 注释标签&#xff08;Annotated Tag&#xff09; 其他常用操作git taggit show <tagname>git push origin <tagname>删除tag使用 gitk 查看效果 总结 前言 一般…

SparkSQL编程入口和模型与SparkSQL基本编程

SparkSQL编程入口和模型 SparkSQL编程模型 主要通过两种方式操作SparkSQL&#xff0c;一种就是SQL&#xff0c;另一种为DataFrame和Dataset。 1)SQL&#xff1a;SQL不用多说&#xff0c;就和Hive操作一样&#xff0c;但是需要清楚一点的是&#xff0c;SQL操作的是表&#xf…
最新文章