当前课程知识点:计算机音乐 >  第六章 高音跟踪 >  6.1 音高跟踪概述 >  音高跟踪

返回《计算机音乐》慕课在线视频课程列表

音高跟踪在线视频

下一节:时域音高跟踪

返回《计算机音乐》慕课在线视频列表

音高跟踪课程教案、知识点、字幕

同学们大家好

欢迎回到计算机音乐的课堂

今天我们会介绍

计算机音乐的一个应用方向

也是一个非常重要的课题

就是音高跟踪

音高跟踪在上个世纪的计算机音乐的

早期研究当中已经很受重视

最主要的一个原因是因为

音高在音频编码中具有很重要的地位

而音频编码又是上个世纪

无线通讯领域中的一个重要课题

让我们先来看一段声音的频谱图

频谱图基本上可以大致地体现人说话时

或者乐器演奏时候的音高变化

那么从这张频谱图里面我们可以看出

在每一个时刻

音高的

共振峰

它的分布基本上都是等距的

随着时间往前走

这些距离会发生变化

音高也就随之发生变化

那么人在说话的时候

可以通过控制自己的声带

来完成这些音高的变化

同时通过我们的听觉

也可以感知到这些变化

作为音频的一种基本的特征

我们依然会从时域和频域两个观点来看

时域的观点直接对应于

数字音频的存储

而频域的观点跟人的感知更加接近

这就是计算机音乐里面

信号处理的一个基本的思路

从时域的角度

所谓的音高跟踪

就是从周期信号里面去计算它的周期

或者频率

那么如果声音

在理论上是一个周期的信号

那么这个定义是非常的严谨的

但实际上

我们能够感受到音高并不是

要求这个声音必须是

严格的周期的

因此我们就需要对每个周期

出现的不同形状

进行对策

通常我们会使用分窗的形式进行统计

这样的一种做法

那么这时候窗口的大小的选择

就会非常的关键了

比如说正弦波

一个周期正好是过两次零

下面这一段音频是来自钢琴的

C4这个音

我们可以看到

它在一个周期里面会过四次零

这样我们只需要选择适合的窗口

统计窗口内的信号过零的次数

再根据窗口的长度

就可以计算出周期了

那我们仔细来看一下

根据过零率

计算周期以及频率的一个过程

那么我们假设过零率

用zcr来表示

那么一个窗口内

过零的总次数

我们用zc来表示

一个周期内过零的次数

用zc0来表示

t表示窗口的时长

大T表示周期

N表示窗口内包含周期的个数

那么根据这个

过零率的定义

zcr就等于zc除以t

而zc

是过零的总的次数

所以我们可以用N乘以zc0来表示

t是一个窗口的时长

因为这个窗口包含N个周期

所以窗口时长t就等于NT

这样的话呢

zcr就等于zc0除以T

这样话我们就可以通过

一个周期内过零的次数

跟周期来换算出

这个zcr

这样的话我们就可以直接把频率

f等于T分之1给计算出来

那么在数值计算的过程中

我们可以通过连续性的假设

来计算过零率

假设我们获取的信号是连续的

那么在数字化过程中

假设有两个相邻的点

它的符号是相反的

那么由于连续函数的介质定理

我们可以推断出这两点之间

一定会过一次零

比如说我们在这个信号里面

我们

可以检测两个相邻的采样点

如果他们符号是相反的

那么

比如连续性的假设他一定会穿过零一次

这样的话

我们就可以通过

两个相邻的采样点符号改变的次数

来计算过零率

那么这个计算通过python的程序

来完成的是会非常简单的

那么在python里面我们很容易可以用

numpy下面的一些模块

来计算

一个列表里面符号变化的次数

也就是能够计算出过零率

那么我们首先随便的定义一个列表

好这个列表我们看一下它一共有

一二三

三次的符号的变化

我们希望把它统计出来

所以首先我们使用

numpy下面sign符号函数来显示它的

正负号

得到这正负号之后我们还可以用

差异函数diff来显示正负号的

相邻的两个数之间的差

这样的话我们只要统计一下

这里面一共有

多少个不是零的数字

那么这样的话我们就能知道

符号变化次数

一共有多少个了

那么我们只需要用这个

np的where

那么我们去统计一下这一串数字里面

不是零的

数字是

它的下标是哪一些

这样的话我们就能统计出来说

0号2号3号

他们的下标都不是零

这样的话我们就可以

直接去看一下

这个列表

一共有多少个元素

这样的话就能知道

它的符号变化次数有多少次了

我们可以用这样的计算方式来

计算过零率

那么接下来我们就来录制一段乐器的声音

来检验过零率的

计算是否可靠

那么我们先来录制一段哨笛的A5的声音

好我们刚才录制是一段

哨笛的A5也就是880hz的声音

那我们可以

把这个声音导出

存成

whistle_A5

之后我们可以观察一下

这个波形

我们把它放大一点

那么我们可以观察出来了

每个周期它会过123456

6次零这样的一个过零次数

所以我们只需要

按照刚才的过零率以及

周期的换算公式

就可以计算出这个

声音的周期

我们到python程序里面来看一下

那么首先我们会调用

之前我们一直使用的这个分窗函数

做完分窗之后

对每一个窗口我们去

再去计算它的过零率

那么过零率的计算

首先我们要统计出它过零的次数

之后我们要看一下

这一段窗口它的长度

是多少时间

然后用ZC除以t获得过零率

最后我们读取这个音频文件

分窗

分窗完之后

我们再进行

过零率的计算

那么计算出来之后

我们可以看一下过零率的一个统计

我们可以看到

基本上

在前面一段后面一段会有些不稳定

因为它是音的开头跟结尾

之后基本上它就处于

大致是这样一个高度的数值

那么我们可以

稍微计算一下

这个zcrate

那么我们刚才说了一个周期有

六次过零

所以我们可以除以六

这样的话计算出来

大致上它的数值在882附近去震荡

那么基本上就是

哨笛A5也就是882赫兹的这个

音高

那么它基本上是在882赫兹的

上下幅度上进行震荡的

对于某些乐器从肉眼上看

每个周期的形状还是比较稳定的

但是从信号的角度

过零的次数就不那么稳定了

比如我们接下来录制的尤克里里的

A4的声音呢

就不那么稳定了

好了录下这段声音之后

我们给它放大一下来观察它的波形

那么比较稳定的音高的部分

应该是后面的这一部分

但是我们看到现在有一个这样的问题

从肉眼上看她的每个周期都是一样的

但是在零附近如果我们再进一步

放大的话

或者说看一下前面一些

音高比较大的部分

那么我们会看到这些

比较接近零的地方

有些时候他是过一次零

有些时候它是

一次零也不过

那么有些时候

它会过两次零

所以这些地方我们在估算他的

一个周期内过零的次数的时候

就会非常的

不精确

那么如果我们到python程序里面去看

它将会产生

并不是非常理想的效果

例如我们用刚才的程序

去打开尤克里里的这个

标准A的声音

那如果运行下

那么我们会看到它的过零率

非常的不稳定

前面一直在变化

那么到这个地方会稍微的

稳定一点

到这个地方会稍微稳定一点

但是有一大段都是非常的不稳定

当然这些地方我们也可以用

刚才得到的公式去计算它的

音高应该是440赫兹应该是准的

但是前面会有非常不稳定的部分

本质上人耳对于过零率

并不是特别的敏感的

主要是因为人耳

基本上是在频域的信息之下工作的

那么在频域当中人耳特别对

整数倍分布的峰值非常的敏感

在整数倍峰值的分布的前提之下

其实我们也可以

在频率的角度

把音高定义成第一个峰值所在的

频率的大小

那么这个频率我们通常也叫做基频

也就是F0

但是其实

这里面依然会有一些问题

一个在肉眼看起来非常明显的峰值

那么我们通常都会用自己的经验来判断

但是如果要让计算机去

判断哪一个点是峰值

就需要经过一些严格的规则了

除此之外

如果一个声音是和旋

那么这个峰值就不是整数倍的关系了

这时候怎么去定义根音又是一个问题

接下来我们会分别介绍在时域和频域当中

比较经典的音高跟踪算法

最后我们会以K歌评分中的音高跟踪算法

作为一个具体的应用来展示

音高跟踪在当今的计算机音乐里面的应用

非常广泛

那么包括哼唱搜索普通话

语调识别

英语的音调评分

语音合成中的韵律分析

变调与变速等等的应用

都需要以音高跟踪作为基础

那让我们来期待一下今天的内容

计算机音乐课程列表:

欢迎辞

-欢迎辞

第一章 基本概念

-1.1 计算机音乐导言

--计算机音乐导言

-1.2 计算机音乐课程主要内容

--计算机课程主要内容

-1.3计算机音乐课程资源

--计算机音乐课程资源

-1.4 音乐的基本表达

--音乐的基本表达

-第一章作业

第二章 时域音频处理

-2.1时域音频处理概述

--时域音频处理概述

-2.2 分窗处理1:OLA叠放

--分窗处理1: OLA叠放

-2.3 分窗处理2:音量计算

--分窗处理2 音量计算

-2.4 端点检测

--端点检测

-2.5 振幅包络

--振幅包络

-2.6 音频信号相乘

--音频信号相乘

-2.7 环形调制

--环形调制

-2.8 频率调制

--频率调制

-2.9 频率调制在音乐上的应用

--频率调制在音乐上的应用

-第二章作业

第三章 频域音频处理

-3.1 频谱概述

--频谱概述

-3.2 傅里叶变换

--傅里叶变换

-3.3 短时傅里叶变换

--短时傅里叶变换

-3.4 加法合成

--加法合成

-3.5 线性滤波器

--线性滤波器

-3.6 京剧锣鼓经分析

--京剧锣鼓经分析

-第三章作业

第四章 音色合成

-4.1 音色合成概述

--音色合成概述

-4.2 质点弹簧阻尼模型

--质点弹簧阻尼模型

-4.3 双线性滤波器

--双线性滤波器

-4.4 Modal合成

--Modal合成

-第四章测试

第五章 一维振动模型

-5.1 一维振动模型概述

--一维振动模型概述

-5.2 弦振动模型

--弦振动模型

-5.3 达朗贝尔的行波解

--达朗贝尔的行波解

-5.4 梳状滤波器

--梳状滤波器

-5.5 Karplus Strong算法

--Karplus Strong算法

-5.6 管状气鸣乐器模型

--管状气鸣乐器模型

-第五章作业

第六章 高音跟踪

-6.1 音高跟踪概述

--音高跟踪

-6.2 时域音高跟踪

--时域音高跟踪

-6.3 频域音高跟踪

--频域音高跟踪

-6.4 K歌评分

--K歌评分

-第六章作业

第七章 音频同步

-7.1 音频同步概述

--音频同步概述

-7.2 音乐特征提取 CQT

--音乐特征提取CQT

-7.3 音乐特征提取 Chroma

--音乐特征提取Chroma

-7.4 动态时间规划概述

--动态时间规划概述

-7.5 动态时间规划实现

--动态时间规划实现

-第七章作业

音高跟踪笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。