语音识别之演奏小星星-理解音阶与频率

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

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

语音识别之演奏小星星-理解音阶与频率

  • 演奏小星星-理解音阶与频率
    • 一、任务需求
    • 二、任务目标
          • 1、掌握音名与频率
          • 2、掌握国际标准音和八度
          • 3、学习使用librosa计算不同音高对应的频率
    • 三、任务环境
          • 1、jupyter开发环境
          • 2、python3.6
          • 3、tensorflow2.4
    • 四、任务实施过程
      • 1、音名与频率
      • 2、八度
      • 3、生成音阶
      • 4、演奏小星星
    • 五、任务小结
  • 说明

演奏小星星-理解音阶与频率


一、任务需求

国际标准音是为了方便了音乐理论研究、乐器制作和文化交流而在国际上统一的音高标准。

音名标记C、D、E、F、G、A、B

乐音体系中的各音级,其高度都有一定的标准。音的标准高度,1939年在伦敦的国际会议上决定国际通用的标准(第一国际标准)是440Hz,波长78cm的a音,即以小字一组的a为“标准音”。

国际上有了统一的音高标准,它方便了音乐理论研究、乐器制作和文化交流。机械波约261.6Hz,波长1.3m的c音在乐音体系中叫中央c,它位于基本音级首位。

要求:利用librosa学习音节与频率相关概念及实现

二、任务目标

1、掌握音名与频率
2、掌握国际标准音和八度
3、学习使用librosa计算不同音高对应的频率

三、任务环境

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

四、任务实施过程

1、音名与频率

以国际标准音 A-la-440HZ为准:

字母体系唱各体系频率
Cdo261.6HZ
Dre293.6HZ
Emi329.6HZ
Ffa349.2HZ
Gsol392HZ
Ala440HZ
Bsi493.8HZ

八度音的频率关系: 每相邻的两个半音,高音频率是低音频率的“2的1/12次方倍”。 例如国际标准音A的频率是440HZ(因此也被成文A440),那么比它高半音的bB。频率就是: 440 × 2 1 / 12 = 466.13 H Z 440\times2^{1/12}=466.13HZ 440×21/12=466.13HZ。所以,以此类推,一个八度的12个音,连乘下来结果正好得2。通俗一点儿说,高音1的频率是比它低一个八度的那个1的频率的两倍。

为了验证上述表格的频率结论,我们做个实验如下:

# 指定基准频率
base_sound_hz = 440
# 生成音名
pitch_names = ['C','D','E','F','G','A','B']
# 生成音高顺序
pitch_loc = dict(zip(pitch_names,range(len(pitch_names))))
pitch_loc

{‘C’: 0, ‘D’: 1, ‘E’: 2, ‘F’: 3, ‘G’: 4, ‘A’: 5, ‘B’: 6}

2、八度

根据标准音理论,一个全音与全音之间相差 2 2 / 12 2^{2/12} 22/12,一个八度与八度之间正好相差 2 12 / 12 = 2 2^{12/12}=2 212/12=2倍,即一个八度的do,相比下一个八度的do,在频率上刚好相差两倍

因此音名A为标准音,频率440,下一个全音B的频率应当为:

B = 440*2**(2/12);B

493.8833012561241

根据这个理论,我们可以确定各个音名对应的频率,需要注意的是,音名E和F之间只相差半音,即 2 1 / 12 2^{1/12} 21/12倍,一个八度之内的其他音高之间则是相差一个全音,即 2 2 / 12 2^{2/12} 22/12。自定义函数如下:

def get_pitch_hz(pitch_name):
    pitch_name = pitch_name.upper()
    if pitch_loc.get(pitch_name) is not None:
        if pitch_loc.get(pitch_name)>2:
            coef_exp = (pitch_loc.get(pitch_name)*2-10)/12
        else:
            coef_exp = (pitch_loc.get(pitch_name)*2-9)/12
        return 440*2**coef_exp
    else:
        raise ValueError('没有查询到这个音名!')
        
get_pitch_hz('c')

261.6255653005986

3、生成音阶

有了这个函数,我们就可以尝试生成音乐了。首先生成一个简单的C调do

notation = '1'
pitch_name = pitch_names[int(notation[0])-1]
pitch_name

‘C’

# 使用自定义函数,将音名转换为频率
pitch_hz = get_pitch_hz(pitch_name)
pitch_hz

261.6255653005986

import librosa
# 生成纯音信号do
pitch_sound =  librosa.tone(pitch_hz, duration=0.5)
import IPython.display as ipd
ipd.Audio(pitch_sound,rate=22050)

4、演奏小星星

接下来把生成声音的步骤,封装在一个自定义函数

def get_notation_sound(notation):
    pitch_name = pitch_names[int(notation[0])-1]
    pitch_hz = get_pitch_hz(pitch_name)
    pitch_sound =  librosa.tone(pitch_hz, duration=0.5)
    return pitch_sound
ipd.Audio(get_notation_sound('2'),rate=22050)

有了这个函数,我们就可以尝试根据乐谱生成音乐了。例如,我们可以根据下面的小星星乐谱生成音乐。

# 定义小行星简谱
notations = '115566554433221155443322554433221155665544332211'

这里需要注意的是,简谱中的增时线,我们简单的使用增时线前一个音符做为替换。

import numpy as np
# 根据简谱生成音乐
def get_music(notations,rate=22050):
    tmp_sound = np.array([])
    for notation in notations:
        notation_sound = get_notation_sound(notation)
        notation_sound = np.pad(notation_sound,1000)
        tmp_sound = np.append(tmp_sound,notation_sound)
    return tmp_sound
ipd.Audio(get_music(notations),rate=22050)

再尝试一下2倍速播放(本质就是对采样率的调整,单位时间内采样率翻倍,就相当于加速1倍)

ipd.Audio(get_music(notations),rate=44100)

五、任务小结

本实验我们学习了音名、频率、国际标准音和八度等相关概念。

学习使用librosa生成音高对应频率的音频。

根据本实验能发现这样一个现象:人类对频率的认知,并不是线性的,而是指数变化的。这就是为什么很多情况下,我们需要对声音频率做对数变换,其中一个目的,就是为了符合人类的听觉认知。

–end–

说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/598050.html

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

相关文章

测试人员在面试时的注意事项

一、技术方面面试 在某种程度上来说,技术面试重要到能够决定你是否被聘用。在技术岗位方面,在个人品德没有问题的前提下,招聘公司对技术是最关心的。 我现在并不能给你分析具体的面试题,因为与笔试题相比,面试题千变万…

封装js方法实现无缝循环滚动效果

如下图,又遇到了无缝循环滚动这个需求 突然想到我之前有分享过一篇关于这个的文章https://blog.csdn.net/chuenst/article/details/137125377,果断打开csdn准备cv 经过我一顿操作,很快实现了需求,但是这风扇直接嗡嗡转&#xff0c…

Dropout作为贝叶斯近似: 表示深度学习中的模型不确定性

摘要 深度学习工具在应用机器学习领域受到了极大的关注。然而,这些用于回归和分类的工具并没有捕捉到模型的不确定性。相比之下,贝叶斯模型提供了一个基于数学的框架来推理模型的不确定性,但通常会带来令人望而却步的计算成本。本文提出了一…

Vue3工程化配置

Vue3工程化配置 目录 Vue3工程化配置创建项目vue-clivite(推荐) 快速体验2和3的差别vue3vue2 ref和reactive 创建项目 vue-cli 具体环境配置请点这里 记得新建配置时这里选vue3 vite(推荐) 注:Vite 需要 Node.js 版本 18,20 1.选定路径后再cmd输入创建…

ScienceDirect文献如何下载

ScienceDirect是爱思唯尔公司的全文数据库平台,是全球最大的科学、技术与医学全文电子资源数据库,是我们在查找外文文献常用的数据库。但是,ScienceDirect数据库的文献是需要使用权限才可获取的。如果你没有该数据库资源要如何查询下载文献呢…

likeshop多商户单商户商城_likeshop跑腿源码_likeshop物品租赁系统开源版怎么配置小程序对接?

本人是商业用户所以能持续得到最新商业版,今天我说下likeshop里面怎么打包小程序,大家得到程序时候会发现它有admin目录 app目录 server目录 这三个目录分别是做什么呢? 1.admin目录 下面都是架构文件使用得是Node.js打包得,至于…

教你快速记录每日待办事项,并提醒自己按时完成不忘记

在忙碌的日常生活中,我们经常会面临待办事项繁杂、时间紧迫的困扰。为了更高效地管理时间和任务,我们需要一个能够快速记录并准时提醒我们完成待办事项的工具。此时,敬业签这类的待办软件就成为了很多人的首选工具。 敬业签是一款功能强大的…

信息系统项目管理师0091:项目经理的能力(6项目管理概论—6.3项目经理的角色—6.3.3项目经理的能力)

点击查看专栏目录 文章目录 6.3.3项目经理的能力1.概述2.项目管理技能3.战略和商务管理技能4.领导力技能5.领导力与管理记忆要点总结6.3.3项目经理的能力 1.概述 项目经理需要重点关注三个方面的关键技能包括项目管理、战略和商务、领导力

合肥先进光源束测步进电机控制机箱接线方式

合肥先进光源束测步进电机控制方案介绍 对上篇文里的接线方式做个修订: EtherCat电机控制机箱接线规范 驱动器 控制器 接线方式 使用鸣志 STF05-ECX-H驱动器,每个机箱配8个驱动器使用汇川的H5U-1614MTD etherCat控制器每个驱动器的电源从2分8的分配端子…

AJ-Report开源数据大屏远程命令执行漏洞

文章目录 描述漏洞原理影响版本漏洞复现修复方案 描述 AJ-Report是全开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。     多数据源支持,内置mysql、elasticsearch、kudu驱动,支持…

Linux基本指令(下下)

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 本篇博客续我之前的Linux指令(下&a…

美国站群服务器在站群管理中的防护和数据安全保障?

美国站群服务器在站群管理中的防护和数据安全保障? 美国站群服务器的防护和数据安全保障是站群管理中的关键问题。站群服务器位于美国,通常由专业的服务器提供商管理和维护,其安全性受到多方面因素的影响。 美国站群服务器在站群管理中的防护和数据安全…

流畅的python-学习笔记_一等函数

函数对象 函数也是对象,操作可像对象一般操作 高阶函数 高阶函数指接受参数为函数,或返回函数的函数 不少高阶函数在py3已经有了替代品。map, filter可通过生成式实现,reduce(在functools里)可通过sum实…

【强训笔记】day11

NO.1 思路&#xff1a;枚举&#xff0c;设一号大礼包的数量为x&#xff0c;二号大礼包的数量为y&#xff0c;用循环枚举一号大礼包的个数得到二号大礼包的数量&#xff0c;使得某一时刻axby的值最大。 代码实现&#xff1a; #include<iostream>using namespace std;lo…

存储故障后oracle报—ORA-01122/ORA-01207故障处理---惜分飞

客户存储异常,通过硬件恢复解决存储故障之后,oracle数据库无法正常启动(存储cache丢失),尝试recover数据库报ORA-00283 ORA-01122 ORA-01110 ORA-01207错误 以前处理过比较类似的存储故障case:又一起存储故障导致ORA-00333 ORA-00312恢复存储故障,强制拉库报ORA-600 kcbzib_kcr…

代码随想录打卡第14天第18天

二叉树 1 二叉树部分的一些新知 &#xff08;1&#xff09;二叉树的定义&#xff0c;C方法一定要知道&#xff0c;相对于链表而言&#xff0c;二叉树就是多了两个指针&#xff0c;即左右子节点 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : …

SSL证书中DV、OV和EV有什么区别,又该如何选择

SSL&#xff08;安全套接层&#xff09;证书作为一种加密工具&#xff0c;确保了网站与其用户之间传输的信息的安全性。而在选择SSL证书时&#xff0c;我们通常会看到三种类型&#xff1a;域名验证&#xff08;DV&#xff09;、组织验证&#xff08;OV&#xff09;和扩展验证&a…

西门子数控网络IP设定配置

总结&#xff1a;menuselect-诊断-屏幕下方右翻页找到tcp/ip&#xff0c;进去选择tcp/ip诊断&#xff0c;进去选择x130网口&#xff0c;点击更改&#xff0c; 如果没有更改&#xff0c;menuselect-调试-口令&#xff0c;输入口令 sunrise 然后重新配置tcp/ip&#xff0c;配置完…

保姆级教学 基于Hexo搭建个人网站(Github)

文章目录 搭建Hexo静态博客介绍一、注册Github账号二、 安装前置软件包三、 绑定github仓库创建SSH私钥添加私钥连接Github仓库 四、安装hexo1. 更改npm镜像源2. 创建一个文件夹 在里面打开终端3. 初始化hexo 五、切换主题1. 安装主题2. 修改默认主题查看修改主题后的网站 六、…

杭州恒生面试,社招,3年经验

你好&#xff0c;我是田哥 一位朋友节前去恒生面试&#xff0c;其实面试问题大部分都是八股文&#xff0c;但由于自己平时工作比较忙&#xff0c;完全没有时间没有精力去看八股文&#xff0c;导致面试结果不太理想&#xff0c;HR说节后通知面试结果&#xff08;估计是凉了&…
最新文章