Linux中的实时音频分析

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

我正在尝试制作一个有助于调谐乐器的小程序. (钢琴,吉他等).我看过关于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绑定时,这更容易.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format=&#39;{{.LogPath}}&#39; &lt;container_name&gt; 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户