问题标签 [pitch-tracking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
120 浏览

audio - XNA 麦克风音频缓冲格式?

我正在编写一个 XNA 脚本,我想在其中每隔几帧从麦克风读取数据并估计它的音高。我几乎完全根据这个页面(http://msdn.microsoft.com/en-us/library/ff827802.aspx)接受了输入。

现在我有一个缓冲区满字节。它代表什么?我重置所有内容,每 10 帧查看一次缓冲区,所以它看起来是一个巨大的数组,在不同的时间点有 9 个 1764 字节的实例(整个东西有 15876 字节大)。我假设它是声压的时域,因为我找不到有关麦克风输入格式的任何信息。有人知道这是如何工作的吗?我有一个朋友已经启动并运行了 FFT,但我们正在尝试尽可能多地了解我正在收集的数据,然后再尝试将其插入。

0 投票
1 回答
813 浏览

signal-processing - 如何执行倒谱以进行音高检测

好的,这里有很多问题,谷歌上有很多阅读材料,但我不知何故无法弄清楚。我想获得一段语音的基频。基本步骤应该是:

  • 取窗口信号的 FFT
  • 将 FFT 从直角坐标转换为极坐标(这样您就可以获得幅度)
  • 丢弃相位信息
  • 取平方,然后是大小的每个 bin 的自然对数
  • 再做一次 FFT(或者一些消息来源说取反 fft?)

以下是我在 AS3 中的实现方式:

现在,当我这样做并以 FFT 结束时,当我绘制它时,这些垃圾箱似乎是相反的顺序?我还看到二次谐波的峰值比基频的峰值更大。当我这样做并进行逆 FFT 时,我得到一个看起来反射在 N/2 附近的音频信号,并且峰值似乎再次反转。整个事情也相当嘈杂。我究竟做错了什么?

0 投票
2 回答
735 浏览

android - 如何检测录制的声音样本的音高

我想分析一段录制的声音样本并找到它的属性,如音高等。我试图分析缓冲区的记录字节但没有成功。怎么做?

0 投票
1 回答
215 浏览

android - App Inventor 2 中带有“pitch”的事件驱动标志

由于我是 App Inventor2 工具的新手,因此在尝试获取“间距”值以触发标签的可见性时遇到了一些问题。

当“AccelerometerSensor”达到 -30 或 30 度点时,我需要显示一个标签。为了实现这一点,我使用了“zAccel”值,应用程序以横向模式运行,主页按钮位于 Android 设备的右侧。

下图显示了我到目前为止使用的块,但没有取得多大成功,因为“警告”一直可见:

在此处输入图像描述

任何有关所用逻辑的块或线索的帮助,将不胜感激。提前感谢大家的时间和答案。

0 投票
1 回答
609 浏览

c - YIN-频率检测和泛音(吉他弦)

我正在开发一个用于频率检测的 IOS 应用程序,并且我正在使用非常精确的 YIN 算法:Witch Audacity,我生成了不同频率的矩形波 - 我的算法的精度约为 0.1 % - 对于例如生成 82.4 Hz(E 弦)的音调,我真的得到 82.4 Hz,仅此而已。

无论如何,当我弹奏吉他弦时,我经常会得到泛音,这些泛音有时会比基音 (F0) 更强(幅度更高)。因此,我的显示器开始“跳舞”并切换 - 有时,甚至会发生(当音调消失时)我的算法在泛音的频率处停止(例如 A 而不是 E) - 所以用户必须再次弹奏弦乐以便查看是否存在他想要的音调(频率)。

我知道这种现象与我的算法无关,因为它只是一个“硬件”问题(我的意思是吉他只会产生泛音)。

一旦检测到关键频率(例如 E 弦 +/- 容差的 82.4 Hz),我试图平滑(频率检测的)结果或“捕捉”到固定频率,但都徒劳无功。无论如何,我的算法也经常出现错误的频率。

我在问自己如何便宜的吉他调音器(吉他商店售价 10 美元)是如何工作的,因为它们的频率检测也可靠且稳定。

我不想更改算法,但我想到了两种可能的解决方案:

  1. 信号预处理(可能是汉宁窗、低通或带通滤波)和/或
  2. 信号的后处理(某种频率平滑)。

有人知道如何克服“不稳定”的结果吗?

0 投票
0 回答
777 浏览

android - 从麦克风获取音高电平

有许多应用程序可以分析声音文件或麦克风输入。例如用于 android 的调谐器应用程序。现在我问自己他们是如何实现的?我不知道我应该如何开始。也许你们中的某个人可以给我输入或教程的链接。我已经用谷歌搜索了,但我被大量的信息淹没了。我只是将其作为我的爱好,第一步我想开发一个小型调谐器应用程序。我希望你们中的某个人可以帮助我。

PS:我已经开发了几个安卓应用程序,但我大部分时间都在开发 ASP .Net Web 应用程序。所以我不是软件工程的新手,但我从未分析过麦克风输入等。

0 投票
1 回答
552 浏览

audio - 快速频率测量

我需要在音乐家演奏音乐时测量信号频率,而对于 FFT(快速傅里叶变换)来说,它恰好有点太快了。

音乐家以 90-140 bpm 的速度演奏音乐。这意味着每分钟有 90-140 个音符组,每组最多 8 个(更频繁地,最多 4 个)音符(60/140/8 = 0.0536 秒,60/90/4 = 0.167 秒),即也就是说,音符可能会以每秒 6-19 个音符的速度变化。

音乐使用对数刻度:例如,440Hz 和 880Hz 之间的范围分为 12 个音符,其中只有 7 个用于旋律。(基本上,他们只使用钢琴上的白键;当他们想改变起始频率时,他们使用一些黑键而不使用一些白键。)也就是说,每个下一个音符的频率相乘乘以 2^(1/12) = 1.05946。

更复杂的是,A (La) 频率可能在 438 到 446 Hz 之间变化。弦乐器理论上可以调音,而管乐器则取决于空气的温度和湿度,因此音乐家在检查声音时会重新协商频率。

有时音乐家和歌手会在频率上出错,他们称之为“走调”。他们想要一种能够通知他们此类“失调错误”的设备。他们有调音器,但调音器需要播放相同的声音大约 1 秒才能开始显示任何内容。这适用于调音,但在播放音乐时不起作用。

最有可能的是,调谐器正在执行 FFT,并且由于公式

等待 1 秒以获得 1Hz 分辨率。

对于 A=440Hz,两个音符之间的频率差为 440*0.05946 = 26.16 Hz,要获得该频率分辨率,必须使用 0.038 秒的采集时间,也就是说,在 tempo=196bpm 时,FFT 只能区分两个注意,在 98 bpm 时,只要它在音高变化的那一刻开始采集,它就能够分辨出 50% 的失调错误。如果我们在采集期间允许音高变化,我们会得到 49 bpm,这太慢了。此外,非常希望对频率更精确,例如检测 25% 的失调误差。

有没有比 FFT 更好地测量频率的方法,即在更短的采集时间内获得更好的分辨率?(至少好 2 倍,理想情况下,好 8 倍。)作为交换,我不需要区分不同八度的音符,例如 440 和 880 都可能被识别为 A。(可能,更多的权衡是可能的,只是现在我没有想到其他任何事情。)

UPD 这是一个非常好的绘图:

注意从维基百科链接的频率

UPD2

我在以下位置找到了一篇博士论文和开源软件(TARTINI——实时音乐分析工具):

http://miracle.otago.ac.nz/tartini/

(这些页面也可以通过网络存档服务获得:http: //web.archive.org = http://archive.org = http://waybackmachine.org

0 投票
1 回答
1783 浏览

python - 如何使用aubio获取python中一系列音调中每个音调的频率

我找到了一些使用 aubio 获取音高的示例代码,但我不确定要更改什么以使其以秒为增量显示音高:

另外,我是否可以直接从输出而不是 wav 文件执行此操作?

0 投票
1 回答
374 浏览

contour - 从 Praat 音高文件中提取文本到另一个文本文件

我想知道是否有人可以帮助我解决一个棘手的问题,即将 Praat Pitch 轮廓的时间和频率提取到 txt 文件中。

我从

我想去:

如果脚本可以读取“dx =”中的信息并计算 x 坐标的时间,那就太好了。

在此先感谢您的帮助。

0 投票
2 回答
1604 浏览

audio - 如何实现自己的HPS算法?

我正在 Python 上启动一个项目,我需要开发一个音高检测系统,基本上我要做的就是录制来自吉他弦的声音,然后识别哪个是那个声音的音调。

我已经阅读并搜索了网站(包括 stackoverflow),因此我可以理解重要事物的主要思想,例如:FFT、时域、频域、谐波、音高检测算法、八度误差等。

经过研究,我发现我可以使用 HPS(谐波乘积谱)算法,并且该算法属于频域方法,这意味着我必须(在一般步骤中):

  1. 录制吉他的声音(避免外部噪音)。
  2. 使用 FFT 函数,这样我就可以将该音频从时域转换为频域(这就是 FFT 所做的)。
  3. 在我得到那个数据(一个数组)之后,我必须使用 HPS,这样我才能找到最高音调,这将是音调字符串的声音。

我的问题从最后一步开始,我已经阅读了 HPS 的 ecuation 和一些关于它的讲座,但我仍然无法理解它并开发自己的功能。

我是否遗漏了一些我不理解的东西或某些东西,而我认为我知道了?我只是找不到编写自己的 HPS 算法的方法。