我想知道什么是推荐使用的音频库?

我试图做一个小程序,将在调整仪器帮助。 (钢琴,吉他等)。我读过有关ALSA&Marsyas音频库。

我想这个想法是从麦克风的样本数据,在5-10ms的块做分析(从我读过)。然后执行FFT找出哪些频率包含了最大峰值。

有帮助吗?

解决方案

Marsyas将是一个伟大的选择,这样做的,它的建成正是这种类型的任务。

有关调整的工具,你需要做的是有一个估计的基本算法 的声音的频率(F0)。有许多的算法来做到这一点,最新,最好的一个 是尹算法,它是由阿兰·Cheveigne发展。我最近添加的尹算法 到Marsyas,并使用它是死的简单。

下面是基本的代码,你会在Marsyas使用:

  MarSystemManager mng;

  // A series to contain everything
  MarSystem* net = mng.create("Series", "series");

  // Process the data from the SoundFileSource with AubioYin
  net->addMarSystem(mng.create("SoundFileSource", "src"));
  net->addMarSystem(mng.create("ShiftInput", "si"));
  net->addMarSystem(mng.create("AubioYin", "yin"));

  net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName);

  while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) {
    net->tick();
    realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>();
    cout << r(0,0) << endl;
  }

此代码首先创建一个系列对象,我们将组件添加到。在一个系列,每一个组件 接收串行先前MarSystem的输出。然后,我们添加一个SoundFileSource,您可以养活 在一个.wav或.MP3文件导入。然后,我们添加ShiftInput对象输出音频的重叠部分,其中 然后送入AubioYin对象,其估计音频的该块的基频。

我们再告诉SoundFileSource我们要读取文件inAudioFileName。

然后while语句循环,直到SoundFileSource运行的数据。在while 循环中,我们取网络已经处理并输出(0,0)元素的数据,这是 基本频率估计。

当您使用Python绑定Marsyas这个更加容易。

其他提示

指南应该帮助。不要使用ALSA您的应用程序。使用更高级别的API。如果你决定你想使用JACK, http://jackaudio.org/applications 有三种乐器调谐器你可以如实施例的代码中使用。

http://clam-project.org/ CLAM是在音频和音乐领域的研究和应用开发一个完整的软件框架。它提供了一个概念模型,以及用于音频信号的分析,合成和处理工具。

他们有一个伟大的API,很好的图形界面和一些成品的应用程序,你可以看到一切。

ALSA是排序用于Linux的默认标准的现在借助于内核驱动程序被包括在内核和OSS被折旧。不过也有替代ALSA用户空间,如插孔,这似乎是针对低延迟的专业型应用。它的API似乎有一个更好的API,虽然我没有使用它,我的短暂暴露于ALSA API会让我觉得几乎所有的东西会更好。

Audacity的包括频率情节特征和具有内置的FFT滤波器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top