- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习如何使用 Steinberg VST 2.4 SDK(或者更确切地说,是 3.6.0 版本附带的 2.x 部分)。我创建了一个简单的合成器,旨在在其生命周期内以恒定频率播放正弦波。这是这个合成器的代码:
static const float TAU = 3.14159f * 2;
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {
return new VSTTest(audioMaster);
}
VSTTest::VSTTest(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, NUM_PARAMS), //NUM_PARAMS is 0
fDeltaTime(1.0f / getSampleRate()), //time per sample (1.0 / 44100, presumably)
fFrequency(100.0f), //frequency of the wave (100 Hz)
fAmplitude(0.5f), //amplitude of the wave
fPos(0.0f) { //position of the wave in the x direction
setNumInputs(0);
setNumOutputs(2);
canProcessReplacing();
isSynth();
}
VSTTest::~VSTTest(void) {
}
void VSTTest::processReplacing(float** input, float** output, VstInt32 numFrames) {
for (VstInt32 i = 0; i < numFrames; i++) {
output[0][i] = fAmplitude * sin(fPos);
output[1][i] = fAmplitude * sin(fPos);
fPos += fFrequency * TAU * fDeltaTime;
if (fPos >= TAU) {
fPos = fmod(fPos, TAU);
}
}
}
void VSTTest::setSampleRate(float fSampleRate) {
fDeltaTime = 1.0f / fSampleRate;
}
问题是,当 VST 在 FL Studio 中作为一个 channel 加载时,我可以听到(并看到)它在大约 20 秒内多次改变音高,直到它稳定在一个甚至不正确的最终音高上(偏离约 10 赫兹)。为什么会这样?
最佳答案
您正在向 fPos 添加一个巨大的数字,它应该只增加 1。您要查找的公式是:
sinf(2.0 * M_PI * fPos++ * fFrequency / fSampleRate);
关于c++ - 简单的 VST 合成器以随机间隔改变音高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425619/
我必须构建合成器,并且我正在使用 C 来对我的 ATmega128A 进行编程。我需要记录按下的键盘并在一段时间后播放它们。对于键盘按下,我在 main.c 中使用轮询。为了弹奏键盘,我使用 Time
我正在寻找可以与我的 .NET 应用程序集成的合成器。那里有可用的 .NET 合成器吗?有没有办法将 VST 插件集成到您的 .NET 应用程序中? 我想创建基于 MIDI 输入的声音,最好是比正弦波
我似乎无法改变乐器。我切换了仪器的值,但输出没有任何不同。无论我尝试什么值(value),我都只能得到一个钢琴乐器来演奏。这是下面的简单代码。有没有人有什么建议?还是我缺少仪器对象的基础知识? imp
我想网络上并没有“wayland 服务器编程初学者指南”,而 weston 的源代码看起来令人望而生畏。 是否有一个准系统 Wayland 服务器可以让我了解从哪里开始?我可以在 X 下运行我可以确认
我一直在研究人们的 Java 合成器,但不知道如何生成他们程序的简单版本。我的目标是用 java 创建一个简单的测试音,用户可以通过按某些键来更改它。例如,按“r”将提高幅度,或“f”将增加频率。我只
在我的 Java 应用程序中,我有一个 JTabbedPane 和一个合成器外观。 l&f 由 xml 文件定义。这对我来说非常有效。 现在的挑战是:我希望 JTabbedPane 选项卡中的文本垂直
我想开发一个非常简单的程序来将 PC 键盘映射到钢琴键盘:每次用户按下一个键时,都会生成一个 MIDI 事件,并且一个独立的采样器/合成器(例如 SFZ+ 或其他)接收这些事件并播放声音。 我能够生成
我在 codebuild 上运行 cdk synth 时遇到问题,它只是说:You are not authorized to perform this operation. 这是一个 CDK 应用程
我的 JTextField 无法获得白色背景,我做错了什么?(我知道图像没有画在中心以显示文本,但我将背景设置为白色;没有效果) -- XML --
我想用 Java 实现一个 Midi 合成器。(合成器 = 代表一个或多个乐器的新设备) 我实现的是javax.sound.midi.Receiver: package at.bachmann.se.
我正在检查今天的 Moog Synth Google 涂鸦,献给 Robert Moog, 当我遇到以下一段 html 代码时: (您可以查看源代码并为 执行 Ctrl+F,您将在第一
我已经在 Introjucer 中为简单的 vst 合成器生成了源文件和项目文件。代码编译时出现一个奇怪的错误:错误 C2259:“SimpleSynthAudioProcessor”:无法实例化抽象
在过去的几周里,我一直在从事一个对我来说非常新的项目,并且我正在边做边学。我正在使用 Raspberry Pi 2 构建一个合成器,并使用 Python3 对其进行编码,因为我对该语言有一些基本知识,
我有一个 Javascript 应用程序可以创建一些音频并播放它们。音调生成为 WAV 文件,然后像这样注入(inject).... document.getElementById("play
我是一名优秀的程序员,十分优秀!