声学参数-基频-Librosa标准: 基频的文字定义和用librosa提取wav文件基频

0. 说明

提取wav的基频, 保持同样的超参, 所以用librosa

参考: https://www.jianshu.com/p/ac1444495f75

https://www.cnblogs.com/LXP-Never/p/11561355.html

谢谢作者~

1. 音高和基频

2. 基频定义

3. 谐波

泛音(overtones) == 谐波 (Harmonics)

根据这个, 可以解耦音色和内容

  • 第一共振峰, 第二共振峰...等的位置, 特别是相对位置, 决定了发音内容TODO需要讨论|不同元音对不同倍数泛音共振加强不同, 体现的也有一部分是能量的大小相对差异
  • 基频的高度, 共振峰的绝对高度, 也一定程度和发音内容相关, 但是需要减掉说话人的平均基频值, 再去看
  • 人的基频, 共振峰等的绝对高度, 和音色相关, 比如性别的不同, F0范围的不同
  • 共振峰的相对位置, 最大的信息时发音内容, 但是相同发音内容, 又会有每个人的发音习惯和口腔结构, 所以次要信息也有音色信息. 这点和speaker identity更像, ASV特征
  • 真正的"厚实, 亮, 尖, 好听"也算作音色, 但是是同一个人也可以模拟的, 比如单人多角色小说 唱歌等. 不同共振峰频率分配的能量, 会导致听感. 人和人之间区别很大, 也可以导致ASV
  • 因此, 1-如果对mel谱每个人, 进行每个频率独立的能量的norm(0, 1), 则一定程度能去掉个人的声音特性, 并且保留发音信息(这个好好想, 涉及到位置和位置的能量)| 这个过程相当于去掉人的口腔特征对特定发音的"人加重"
  • 接着上面的, 2-如果能抽离出每一时刻的f0和各个共振峰, 将这些位置也随着f0的位置做归一化, 也能一定程度去掉音色, 并且保留发音信息 | | 这个过程相当于去掉人的声带特征对特定发音的"人加重"

提一个问题, 合唱的时候大家都哼"哼", 同一个调, 用此来分析

(

  • 音色:音色的区别是由于各种振动,其总能量在泛音各音级上能量分配不同而造成的。

)

回答:

只让人哼同一个字, 相当于把人"退化", 或者"类比"为小提琴, 每个人都是小提琴, 但是男的和女的, 男高音和男低音, 是天性不同的小提琴, 对泛音的能量分配就算哼同一个字, 天生分配也不同. 不过差距并不大(相比于哼不同字)罢了

再提一个问题, 男生说的ba和女生说的ba的频率和共振峰位置一样么?是不是需要norm之后, 就一样的, 每个人声带的结构和胸腔肌肉力量不同

图上的水平线含义:水平线表示一个歌手在某个音高上持续了一段时间。越亮的线表示振幅越大,听感上当然就音量大了

直线就是一个长直音,考察长直音主要看稳定度,整个线越直则这个长音越稳定。如果大抖就是破音,如果小抖就是不稳。如果歪了,那就是音准没把握好 TODO, 需要讨论

波浪线就是颤音。波浪越大则颤音越大。看颤音也是看稳定度,如果颤的不稳就是气息出现问题,控制不好

3.1. 如何观察和评价泛音/谐波

  • 看泛音主要看三点:丰富与否;分布情况;泛音的音量。对比泛音主要是看与基频的对比。因为音频文件的音量是可以调整的,单纯的看泛音大小没多大意义,以基频为参照才比较有实际意义。(低频的共鸣情况取决于元音的类型,每一个元音都有自己的特定的共鸣特性。一般来说,基频被共鸣强化的情况比较少)
  • 此例中第一泛音巨大(看多了就知道,一般都是第一泛音最大),在3000左右的三个泛音也很强

另一种观察方法就是和伴奏比,人声线越明显则人声越强,越能穿透伴奏. 之后作者有举例, 我就略了.....偷个懒

4. librosa概述

5. librosa提取F0

https://librosa.org/doc/main/generated/librosa.pyin.html

y, sr = librosa.load(librosa.ex('trumpet'))
f0, voiced_flag, voiced_probs = librosa.pyin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'))
times = librosa.times_like(f0)


import matplotlib.pyplot as plt
D = librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)
fig, ax = plt.subplots()
img = librosa.display.specshow(D, x_axis='time', y_axis='log', ax=ax)
ax.set(title='pYIN fundamental frequency estimation')
fig.colorbar(img, ax=ax, format="%+2.f dB")
ax.plot(times, f0, label='f0', color='cyan', linewidth=3)
ax.legend(loc='upper right')

猜你喜欢

转载自blog.csdn.net/u013625492/article/details/112564667