我一直在尝试将 Synthesis 工具包用于音频项目。我在下面编写了一个快速程序,它会生成一个持续时间为 1 秒且带有 MIDI 音符 49 的 WAV 文件。实际上,该程序会生成两个这样的文件,一个使用“Bowed”乐器,另一个使用“PercFlut”乐器。奇怪的是,当我播放生成的两个 WAV 文件时,频率并不相同。对于 Bowed 乐器,相同 MIDI 音符的主频率似乎是 440 HZ。对于 PrecFlut 仪器,主频率似乎在 210 HZ 左右。
我究竟做错了什么?任何帮助将不胜感激。
谢谢,这是我的代码:
#include <iostream>
#include <Voicer.h>
#include <Instrmnt.h>
#include <FileWvOut.h>
#include <Bowed.h>
#include <PercFlut.h>
using namespace stk;
// WAV file generated Note = 49. Duration = 1 second
void createFile(Voicer &voicer, StkFrames &frames, Instrmnt *instrmnt, const char *filename)
{
voicer.addInstrument(instrmnt, 1);
FileWvOut output;
output.openFile(filename, 1, FileWrite::FILE_WAV, Stk::STK_SINT16);
long tag1 = voicer.noteOn(49, 25, 1);
voicer.tick(frames, 1);
voicer.noteOff(tag1, 0);
output.tick(frames);
output.closeFile();
}
int main(int argc, char *argv[])
{
Voicer voicer;
StkFrames frames(44100 * 1, 1);
Instrmnt *bowed = new Bowed();
createFile(voicer, frames, bowed, "bowed.wav");
Instrmnt *percflut = new PercFlut();
createFile(voicer, frames, percflut, "percflut.wav");
delete bowed;
delete percflut;
}