综合工具包:MIDI音符具有不同的乐器频率

时间:2012-05-18 11:05:18

标签: c++ sound-synthesis

我一直在尝试将Synthesis工具包用于音频项目。我在下面写了一个快速程序,用MIDI音符49生成一个持续时间为1秒的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;
}

0 个答案:

没有答案