Linux中的实时音频分析

Linux中的实时音频分析,第1张

概述我想知道使用的推荐音频库是什么? 我正在尝试制作一个有助于调谐乐器的小程序. (钢琴,吉他等).我看过关于ALSA& Marsyas音频库. 我认为这个想法是从麦克风采样数据,对5-10ms的分组进行分析(从我读过的).然后执行FFT以确定哪个频率包含最大峰值. 这是一个很好的选择,这是为了完成这样的任务而建立的. 为了调整仪器,您需要做的是使用一种估算基准的算法 频率(F0)的声音.有很多算法可 我想知道使用的推荐音频库是什么?

我正在尝试制作一个有助于调谐乐器的小程序. (钢琴,吉他等).我看过关于ALSA& Marsyas音频库.

我认为这个想法是从麦克风采样数据,对5-10ms的分组进行分析(从我读过的).然后执行FFT以确定哪个频率包含最大峰值.

解决方法 这是一个很好的选择,这是为了完成这样的任务而建立的.

为了调整仪器,您需要做的是使用一种估算基准的算法
频率(F0)的声音.有很多算法可以做到这一点,是最新和最好的算法之一
是由Alain de Cheveigne开发的YIN算法.我最近添加了YIN算法
到玛尔斯,使用它是死的简单.

以下是您将在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;  }

此代码首先创建一个我们将添加组件的SerIEs对象.在一个系列中,每个组件
以串行方式接收先前MarSystem的输出.然后我们添加一个SoundfileSource,您可以进行输入
在.wav或.mp3文件中.然后我们添加输出重叠的音频块的Shiftinput对象
然后被馈送到AubioYin对象,该对象估计该音频块的基本频率.

然后我们告诉SoundfileSource我们要在Audiofilename中读取该文件.

然后while语句循环,直到SoundfileSource耗尽数据.在里面
循环,我们获取网络处理的数据并输出(0,0)元素,即
基频估计.

当您使用Marsyas的Python绑定时,这更容易.

总结

以上是内存溢出为你收集整理的Linux中的实时音频分析全部内容,希望文章能够帮你解决Linux中的实时音频分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存