【发布时间】:2015-11-19 18:24:55
【问题描述】:
我开始使用 VST SDK 和 Juce 制作自己的 VST。
我是一名程序员,所以我对 C++ 和计算机科学原理(例如整数和浮点数如何以二进制形式存储)有一定的了解。
我能够直接进入代码并基本了解发生了什么,但我终其一生都无法弄清楚样本到底是什么。
在代码中,单个样本是一个浮点值,在不同场景下似乎代表音高或振幅。
我对 DSP 了解不多,所以我希望有人指出我正在寻找的正确信息的正确方向。
在阅读 DSP 时,我只能找到关于浮点值和二进制的内容,以及更多的数学内容,但没有关于数字值如何表示模拟值 ETC,以及如何操纵数字值来模拟现实生活中的事情,比如非常简单的延迟。
谢谢!
编辑:
好的,我想我现在明白了,声音保存只有幅度和频率。
一个样本仅代表幅度,然后频率将是幅度随时间变化的方式,因为样本是周期性且均匀地处理的。
【问题讨论】:
-
通常(时域)是幅度,而在频域中是特定频率(=音高)的幅度。 en.wikipedia.org/wiki/Fourier_transform ,通常使用 en.wikipedia.org/wiki/Fast_Fourier_transform 实现
-
谢谢@KarolyHorvath!时域和频域有什么区别?通过阅读代码,似乎只有“处理”函数,其中输入缓冲区被赋予处理方法,并且可以修改输出缓冲区。如果我想在 C++ 中创建自己的 VST 效果,你会建议学习有关 FFT 的所有知识吗?或者是否有更适用于 DSP / VST 的信息的划分?我不怕数学,只是懒惰并尝试从小处着手:)
-
它们是同一事物的不同表示。有些效果需要处理特定域中的信号。 learn.juce.com/doc/classFFT.php
-
@KarolyHorvath 你帮了大忙。我的大脑很难接受最终唯一被修改的参数是幅度,因为我没有将幅度随时间的变化是频率的逻辑联系起来。而且大多数教程只是假设大多数人都明白这一点。
标签: c++ signal-processing vst juce