我正在开发一个系统来帮助音乐家进行转录.目的是在单个乐器单声道录音上执行自动音乐转录(它不一定是完美的,因为用户将在以后纠正错误/错误).这里有没有人有自动音乐转录的经验?或一般的数字信号处理?无论您的背景如何,都非常感谢任何人的帮助.
到目前为止,我已经研究了使用快速傅里叶变换进行音调检测,并且MATLAB和我自己的Java测试程序中的大量测试表明它足够快速和准确以满足我的需求.需要解决的任务的另一个要素是以乐谱形式显示制作的MIDI数据,但这是我现在不关心的事情.
简而言之,我正在寻找的是一种用于音符开始检测的好方法,即信号中新音符开始的位置.由于慢速开启可能很难正确检测,我最初将使用带有钢琴录音的系统.这也部分归因于我弹钢琴的事实,应该处于更好的位置以获得合适的录音进行测试.如上所述,该系统的早期版本将用于简单的单声道录音,根据未来几周取得的进展,可能会在稍后进行更复杂的输入.
我正在寻找从声音信号中提取音高.
IRC上的某个人刚刚向我解释了如何采用双FFT实现这一目标.特别:
我正在尝试使用vDSP
我无法理解我之前没有遇到过这种技术.我做了很多狩猎和提问; 几周值得.更重要的是,我无法理解为什么我没有想到它.
我试图用vDSP库实现这一目标.它看起来好像有处理所有这些任务的功能.
但是,我想知道最终结果的准确性.
我之前使用的技术是将单个FFT的频率区域扫描为局部最大值.当它遇到一个时,它使用一种狡猾的技术(自上次FFT以来的相位变化)来更准确地将实际峰值放置在箱内.
我担心这种精确度会因为我在这里介绍的技术而丢失.
我想这种技术可以在第二次FFT之后使用,以准确地得到基波.但有点看起来信息在第2步中丢失了.
由于这是一个潜在的棘手过程,有经验的人可以只看一下我正在做的事情并检查它的理智吗?
此外,我听说有一种替代技术涉及在相邻的箱子上安装二次方.这是否具有可比性?如果是这样,我会赞成它,因为它不涉及记住bin阶段.
所以,问题:
有人能指出我对这种技术的一些研究或文献吗?
主要问题:它足够准确吗?可以提高准确度吗?一位专家刚刚告诉我,准确性是不充分的.这是行的结束吗?
皮
PS当我想创建标签时,我很生气,但不能.:| 我已向维护人员建议SO跟踪尝试的标签,但我确信我被忽略了.我们需要vDSP标签,加速框架,倒谱分析
我正在寻找一个简单或评论的混响算法,即使在伪代码中也会有很多帮助.
我发现了一对,但代码往往相当深奥,很难遵循.
我正在开发依赖于音乐和弦检测的软件.我知道一些基于倒谱分析或自相关技术的音调检测算法,但它们主要关注单声道材料识别.但我需要使用一些复音识别,即同时进行多个音高,就像在和弦中一样; 有谁知道一些关于这个问题的好的研究或解决方案?
我目前正在开发一些基于FFT的算法,但如果有人对我可以使用的某些算法或技术有所了解,那将会有很大的帮助.
我想对下面显示的信号执行自相关.两个连续点之间的时间是2.5ms(或400Hz的重复率).

这是我想要使用的估计自相关的等式(取自http://en.wikipedia.org/wiki/Autocorrelation,部分估计):

在python中查找我的数据估计自相关的最简单方法是什么?有什么类似于numpy.correlate我可以使用的东西吗?
或者我应该只计算均值和方差?
编辑:
from numpy import *
import numpy as N
import pylab as P
fn = 'data.txt'
x = loadtxt(fn,unpack=True,usecols=[1])
time = loadtxt(fn,unpack=True,usecols=[0])
def estimated_autocorrelation(x):
n = len(x)
variance = x.var()
x = x-x.mean()
r = N.correlate(x, x, mode = 'full')[-n:]
#assert N.allclose(r, N.array([(x[:n-k]*x[-(n-k):]).sum() for k in range(n)]))
result = r/(variance*(N.arange(n, 0, -1)))
return result
P.plot(time,estimated_autocorrelation(x))
P.xlabel('time (s)')
P.ylabel('autocorrelation')
P.show()
Run Code Online (Sandbox Code Playgroud) 我想写一个简单的程序(最好是在C#中),我用麦克风唱一个音高,程序识别音高对应的音符.
非常感谢您的及时回复.我澄清一下:
我想要一个(最好是.NET)库来识别我唱的音符.我想要这样一个图书馆:
我打算用这样一个库一次唱一个音符.
图形和音频编辑和处理软件通常包含称为"高通滤波器"和"低通滤波器"的功能.究竟是做什么的,以及实现它们的算法是什么?
我正在尝试对用户唱歌进行实时音调检测,但我遇到了很多问题.我已经尝试了很多方法,包括FFT(FFT问题(返回随机结果))和自相关(自相关音调检测返回麦克风输入的随机结果),但我似乎无法获得任何方法来给出好的结果.任何人都可以建议一种实时音高跟踪方法或如何改进我已有的方法?我似乎无法找到任何好的C/C++方法进行实时音高检测.
谢谢,
尼尔.
编辑:请注意,我已经检查过麦克风输入数据是否正确,并且当使用正弦波时,结果或多或少是正确的音高.
编辑:对不起,这是迟到的,但此刻,我通过从结果数组和每个索引中取出值,并在X轴上绘制索引和在Y轴上绘制值来显示自动相关(两者都被除以100000或其他东西,我使用OpenGL),将数据插入VST主机并使用VST插件不是我的选择.目前,它看起来像一些随机点.我正确地做了,或者你能不能指点我做一些代码或者帮助我理解如何可视化原始音频数据和自相关数据.
所以我有一个25个样本的阵列,我希望能够记录它是否从这25个采样时间间隔减少n或增加的趋势(基本上25个样本数组是我的缓冲区,每个说1毫秒填充).
请注意,这是我正在寻找的一般趋势,而不是单个衍生物(正如我将使用有限差分或其他数值微分技术获得).
基本上我希望我的数据有噪音,所以即使在进行过滤等操作之后也可能出现起伏.但这是我正在寻找的增加或减少行为的一般趋势.
我希望在每个ms中集成增加/减少行为以触发某个事件,这更多的是用户界面事件(闪烁LED),因此只要我能检测到一般趋势,它就不必非常延迟处理.
提前致谢!
我正在尝试提出一种算法来确定x/y坐标轨迹中的转折点.下图说明了我的意思:绿色表示起点,红色表示轨迹的最终点(整个轨迹由~1500点组成):

在下图中,我手动添加了算法可能返回的可能(全局)转折点:

显然,真正的转折点总是有争议的,并且将取决于一个人指定必须位于点之间的角度.此外,转折点可以在全球范围内定义(我试图用黑色圆圈做的),但也可以在高分辨率的局部尺度上定义.我对全球(整体)方向变化感兴趣,但我很乐意看到人们用来梳理全局与本地解决方案的不同方法的讨论.
到目前为止我尝试过的:
不幸的是,这并没有给我任何强有力的结果.我可能也计算了多个点的曲率,但这只是一个想法.我真的很感激任何可能对我有帮助的算法/想法.代码可以是任何编程语言,matlab或python是首选.
编辑这里是原始数据(如果有人想要玩它):