1 个不稳定版本
0.1.0 | 2019年7月24日 |
---|
#6 in #频谱图
22KB
329 行
tizol
lib.rs
:
一个小型库,用于可靠、快速地生成和可视化频谱图
Tizol 提供了一个 Spectrogram
对象,允许用户从原始音频数据或音频文件中创建频谱图,并可视化这些频谱图。计算出的频谱图和可视化的图像应尽可能接近由 librosa 计算的结果,并且可以作为其替代品。
计算频谱图
Tizol 的计算基于 librosa - 它使用简单的短时傅里叶变换 (STFT) 生成原始频谱图,然后将其从幅度表示转换为功率表示,最后进行归一化,使频谱图的元素落在 [0,1] 范围内。
在 librosa 术语中(省略最终归一化),from_file
的实现大致如下
samplerate = 44100
(y, sr) = librosa.load(filename, sr=samplerate, res_type='kaiser_best')
S = librosa.stft(y)
M = librosa.core.magphase(S)[0] # This is implicitly done by the STFT
spectrogram = librosa.amplitude_to_db(M, ref=np.max)[0:1024, :]
可视化频谱图
Tizol 提供了 Spect::as_image()
方法来可视化已计算的频谱图。不幸的是,这个方法相当慢,因为它为了与 librosa 的输出保持一致,使用了 scarlet crate 中的 Magma
色彩映射来计算像素颜色。由于某种原因,这个计算非常慢,即使进行并行化,也比实际计算频谱图慢大约 10 倍。
Protobuf 支持
频谱图通过 prost crate 支持 Protobuf,这意味着频谱图实现了 Message
特性。
命名
Tizol 是“埃林顿”项目的一部分——一套旨在使摇摆舞DJ更容易自动计算摇摆音乐的节拍的工具。项目的每个组件都是以杜克·埃林顿乐队成员或编曲家的名字命名的。Tizol 以 Juan Tizol 的名字命名,他是长号乐队的坚实支柱,也是最著名的爵士标准之一“卡瓦南”的作曲家。
依赖关系
~35MB
~447K SLoC