R语言声音音乐分析MusicAnalysis02-初次上手怎么用tuneR和seewave音频分析之二

Math, physics and music.

紧接上一篇《R语言声音音乐分析01-初次上手怎么用tuneR和seewave音频分析之一》。上一篇里我们安装了这两个包,导入了WAV文件,剪切了音频,绘制波形图oscillo,对响度波封进行了时间测量。我们对手上这个WAV文件有了初步的了解。

这一篇我尝试了一下频谱分析spectral analysis,包括优势频率提取、峰频率提取等等。更多是自己的理解,如果有任何建议或意见尽管提出来!

优势频率 Dominant Frequency

理解优势频率

光看名字第一反应是什么?最占主导地位的频率?优势频率(dominant frequency)在是指“在谱密度曲线上与最大值对应的频率”。听音乐的时候有没有过这种感觉,有一些声音有一种在脑海里萦绕的感觉,有一些haunting sound特别具有感染力,直击心灵的力量,十分难忘。除了由它周围的context在和声上或者材质上产生的效果,这些音的情绪或者表现跟它们的响度也是有关的。对音乐和乐器有一些了解的小伙伴们可能有这样的体会,即便弹奏同一个和弦,如果弹的时候分了轻重,即和弦内每一个音如果它们的响度不同,听起来还是有一些差异的。一些独具情感感染力的和弦音比如b6或者b9,如果被特别突出,人们能立马感受到那种情绪,但如果反而被刻意淡化了,它在表现上似乎就增加了另一种意味,very arty。

dfreq直接获取优势频率

dfreq(c1,44100,ovlp=87.5)

dfreq方法
dfreq得到的dominant frequency

用频谱图spectrum可视化

按照默认的方法:

spectro(c1, 44100)

spectro方法默认参数的结果
这里的谱图用由1024个样本组成的FFT window,连续窗口的overlap重叠率是87.5%,由这两个参数作为条件得到的图。

spectro(c1, 44100, ovlp=87.5,wl=1024)

spectro调整了重叠率和窗口大小
这里我们调整了window length还有overlap,所以在每隔一定样本数之后,我们的滑动窗口都会找窗口内的优势频率,最后叠加得到的结果可以在一定程度上代表音频局部的优势频率,这张图就是一个整体的情况。可以发现,这里出现优势频率的时间段和波形图oscillo以及响度波封时间测量的是一致的。

用平均频谱可视化

计算平均频率频谱,也就是频率分布的平均相对响度,可以看出来相对于其他的频率,那些频率的响度更大/更小:

meanspec(c1,44100,col="red")

meanspec平均频谱判断优势频率
最突出的那个区间就是我们要找的优势频率。
为了更准确得到是哪一个频率,我们还可以用soundscapespec,用条形图画出不同频率的响度:

soundscapespec(c1, f=44100,plot=TRUE, col="gray")

soundscapespec方法返回的条形图


窗口大小

前面的spectro方法里,我们用到了一个概念,叫做window length,那它是什么意思呢?我们先来了解一些基本知识:
(Reference参考文献:Signal Analysis Introduction

周期period、频率frequency和采样率sampling rate

我们对声音做傅里叶变换FFT的对象是周期性的声音。这里是指声波本身的周期性(periodity)。我们平时说的音高,也就是声音的频率(frequency),指的就是在一秒以内周期出现的次数。周期period是所重复的那个单位的延续时间长度(duration)。
F=1/T
T=1/F
频率越低的音,音调越低;频率越高的音,音调越高。

窗口大小(window size)常被用来描述样本sample。它是一个变量,不过我们有一个Fixed value固定值叫做采样率(sampling rate),一般是44100或者48000个样本每秒。

窗口大小相关参数

窗口延续时间duration of the window:

sampling rate是针对一秒以内的。前面说到,周期长度period T就是频率F的倒数
T = WindowSize / SamplingRate
周期时间 = 窗口大小 / 采样率

对1024个样本进行分析,44100的采样率的窗口,窗口延续时间一定是信号周期的五倍
T(Window) = 5 * T(Signal)
那么比如说,对于440Hz的信号,窗口大小是5 * (1/440)=0.025,每一条分析都代表25ms内的频谱图。

最低可探测频率 Lowest Detectable Frequency:

对于窗口大小的选择可以根据信号的频率而定。最低可探测频率F0决定于size of the window也就是duration of the window,窗口大小或窗口延续时间。比如我们有1024样本分析窗口,F0=5*(44100/1024/)~=215 Hz。窗口大小应该是:
WindowSize = 5 * SamplingRate / F(Signal)
对于440Hz的信号,窗口大小是501,对于100Hz的信号,窗口大小是2205。信号频率越低,音高越低,窗口大小越大

分析的窗口大小和时间分辨率 Window Size and Temporal Resolution of the Analysis

计算Time Resolution分析窗口的延续时间,也称为time resolution,和frequency resolution成反比。采样率是和1秒的时间延续相对应的,分析窗口的延续时间是:
TimeResolution = WindowSize / SamplingRate
窗口越长,描述信息变化的切片越少。

比如说,用44100的采样率,1024点的FFT,我们能得到:T = 1024/44100 = 0.023频谱图被等分成切片,每个切片持续23ms。如果我们选用4096 FFT,得到:FrequencyResolution = 4096/44100 = 0.093频谱图被等分成切片,每个切片持续0.93ms。频率分辨率的准确性更低了。

分析的窗口大小和频率分辨率 Window Size and Frequency Resolution of the Analysis频率分辨率取决于分析的bins的个数,bins的数量实际上就是FFT的规模。更多的可以去针对性学习数字信号处理。

这个同样有帮助:《采样率 窗口点数》,非常数字信号学。

基础频率 Fundamental Frequency

维基上这么讲的:

The fundamental frequency, often referred to simply as the fundamental, is defined as the lowest frequency of a periodic waveform. In music, the fundamental is the musical pitch of a note that is perceived as the lowest partial present.
稍微翻译一下:
基础频率,通常简单地指一个周期性波形中的最低频率。在音乐里,基本音是音乐里出现的最低声部的音。

这里可以看一看 写给理工科人看的乐理(二)十二平均律与五线谱以及整个系列。当讨论音乐和频率时,基本上进入音律学的领域了。有兴趣可以了解了解,是另一个理解声音和音乐的视角。

要得到这个基础频率也很简单:

fund(c1,44100)

fund方法
由于wl必须得在at不为null时才能用,而一旦用了at,就只能测其中一个时间点的优势频率,还不能画图了,我没有设置窗口大小。这张图表达的内容还是比较含糊。

峰频率 Frequency Peak

计算平均频率频谱中的的主频率波峰: main frequency peaks of the mean frequency spectrum。输入只能是频谱分析spectral analysis得出的结果,也就是spec或者meanspec的结果。所有这些分析结果都可以通过print得到矩阵表示形式。

mspec1<-meanspec(c1,44100,col="red")
fpeaks(mspec1)

fpeaks默认参数输出
还是太密集了,而且10-20Hz那里的局部峰值过于放大了细微数据差异的影响。就像我们第一篇处理timer时一样,需要加一些判断条件或者对这里的波形本身做预处理。

mspec1<-meanspec(c1,44100,col="red")
fpeaks(mspec1,amp=c(0.01,0.01))

这里的amp属于限制条件之一,要求这个波封的左右两边的变化率/斜率达到一定值,我们才认为它是peak,而不是单一地以它相对于周围的平均值相比更高作为标准。
在这里插入图片描述


这一系列很快就会有更新,后面除了继续介绍R语言的音频处理方法,还会介绍声学相关、基本乐理、音乐制作等有助于音乐分析的干货。如果对数据分析、声音硬件、live-coding等等有兴趣也可以关注一下,后续也会有相关文章发布~

发布了2 篇原创文章 · 获赞 9 · 访问量 210

猜你喜欢

转载自blog.csdn.net/dsager/article/details/104941502