问题标签 [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 投票
2 回答
15971 浏览

java - 从 .mp3 或 .wav 文件计算频率?

我正在尝试对mp3wav文件进行一些笔记识别。

问题是:如何对文件使用 FFT?

我更喜欢 Java 解决方案,但我愿意接受建议。

0 投票
4 回答
6317 浏览

iphone - FFT on iPhone to ignore background noise and find lower pitches

I have implemented Demetri's Pitch Detector project for the iPhone and hitting up against two problems. 1) any sort of background noise sends the frequency reading bananas and 2) lower frequency sounds aren't being pitched correctly. I tried to tune my guitar and while the higher strings worked - the tuner could not correctly discern the low E.

The Pitch Detection code is located in RIOInterface.mm and goes something like this ...

Demetri then goes on to determine the 'dominant' frequency as follows:

To start with, I believe I need to apply a LOW PASS FILTER ... but I'm not an FFT expert and not sure exactly where or how to do that against the data returned from the vDSP functions. I'm also not sure how to improve the accuracy of the code in the lower frequencies. There seem to be other algorithms to determine the dominant frequency - but again, looking for a kick in the right direction when using the data returned by Apple's Accelerate framework.

UPDATE:

The accelerate framework actually has some windowing functions. I setup a basic window like this

which I then apply by inserting

before the vDSP_ctoz function. I then change the rest of the code to use 'transferBuffer' instead of outputBuffer ... but so far, haven't noticed any dramatic changes in the final pitch guess.

0 投票
0 回答
107 浏览

filter - 安卓椭圆过滤器

我需要为我正在尝试开发的音高检测算法实现一个低通椭圆滤波器。那里有任何可以在这里使用的库吗

0 投票
0 回答
156 浏览

audio - 浏览器中的音高识别游戏

我真的很想开发一些在浏览器中运行的游戏和练习,并使用音高检测通过麦克风收听并奖励正确答案的分数。

这是在幻想的领域吗?如果不是,起点是什么?

0 投票
4 回答
4555 浏览

python - 如何将音高轨道从旋律提取算法转换为类似嗡嗡声的音频信号

作为一个有趣的家庭研究项目的一部分,我试图找到一种方法来减少/将歌曲转换为类似嗡嗡声的音频信号(我们人类在听歌曲时感知到的基本旋律)。在我进一步描述我对这个问题的尝试之前,我想提一下,尽管我在分析图像和视频方面有很多经验,但我对音频分析是完全陌生的。

谷歌搜索了一下,我发现了一堆旋律提取算法。给定一首歌曲的复音音频信号(例如:.wav 文件),它们会输出一个音高音轨 --- 在每个时间点,他们估计主要音高(来自歌手的声音或某些旋律生成乐器)并跟踪主要音高随着时间的推移。

我读了几篇论文,他们似乎计算了歌曲的短时间傅立叶变换,然后对频谱图进行了一些分析,以获取和跟踪主导音高。旋律提取只是我正在尝试开发的系统中的一个组件,所以我不介意使用任何可用的算法,只要它在我的音频文件上做得不错并且代码可用。由于我是新手,我很高兴听到任何关于哪些算法已知运行良好以及在哪里可以找到它的代码的建议。

我发现了两种算法:

  1. Yaapt 音高跟踪
  2. 旋律

我选择了 Melodia,因为不同音乐流派的结果看起来相当令人印象深刻。请检查此以查看其结果。你听到的每首音乐的嗡嗡声本质上是我感兴趣的。

“这是任何任意歌曲的嗡嗡声的产生,我希望你在这个问题上提供帮助”。

该算法(可作为 vamp 插件使用)输出音高轨道 --- [time_stamp, pitch/frequency] --- Nx2 矩阵,其中第一列是时间戳(以秒为单位),第二列是主要音高在相应的时间戳上检测到。下面显示的是从算法中获得的音高轨道的可视化效果,该算法以紫色覆盖了歌曲的时域信号(上图)及其频谱图/短时傅立叶。音高/频率的负值表示算法对非浊音/非旋律片段的主要音高估计。所以所有音高估计> = 0对应于旋律,其余的对我来说并不重要。

带有歌曲波形和频谱图的音轨叠加

现在我想将这个音高音轨转换回像嗡嗡声一样的音频信号——就像作者在他们的网站上一样。

下面是我为此编写的一个 MATLAB 函数:

该代码背后的基本逻辑如下:在每个时间戳处,我合成一个短寿命波(例如正弦波),其频率等于在该时间戳处检测到的主要音高/频率,持续时间等于它与输入旋律矩阵中的下一个时间戳的差距。我只是想知道我这样做是否正确。

然后我把从这个函数中得到的音频信号和原曲一起播放(左声道的旋律和右声道的原曲)。尽管生成的音频信号似乎很好地分割了旋律生成源(语音/主奏乐器)——它在语音所在的地方是活跃的,而在其他地方为零——信号本身远不是嗡嗡声(我得到类似的东西哔哔哔哔哔哔哔哔哔哔哔哔哔哔哔)作者在他们的网站上展示的。具体来说,下图是底部输入歌曲的时域信号和使用我的函数生成的旋律的时域信号的可视化。

在此处输入图像描述

一个主要问题是——尽管我得到了每个时间戳生成的波频率以及持续时间,但我不知道如何设置波的幅度。现在,我将幅度设置为平坦/恒定值,我怀疑这就是问题所在。

有人对此有什么建议吗?我欢迎使用任何程序语言(最好是 MATLAB、python、C++)提出建议,但我想我的问题更笼统——如何在每个时间戳处生成波形?

我脑海中的一些想法/修复:

  1. 通过从原始歌曲的时域信号中获取幅度的平均/最大估计值来设置幅度。
  2. 完全改变我的方法——计算歌曲音频信号的频谱图/短时傅立叶变换。除了我的音高轨道(或靠近我的音高轨道)中的频率之外,几乎/零输出或柔和地切断所有其他频率。然后计算逆短时傅里叶变换得到时域信号。
0 投票
1 回答
434 浏览

fft - 将音乐 wav 文件转换为文本符号

我想提供一个音频 wav 文件(乐器 - 小提琴等)作为输入,我想检测所有频率音调并在文本序列中更新,以便它们被播放。我认为我应该定期使用 fft 频谱来获取它们的频率值。帮助我了解如何进行。

0 投票
2 回答
5029 浏览

android - 从android中的音频录制文件中获取频率和音高

我正在尝试做一个应用程序,用户会说些什么,然后单击一个按钮,该按钮将为他们提供他们所说的频率值。我一直在搜索,我得出的结论是,我需要先使用音频记录类,记录语音,然后使用 FFT 将其转换为频率。我的主要问题是 FFT 给出了频率图,我不需要它,我需要频率和音高值。我怎样才能做到这一点?

请帮我 :)

0 投票
1 回答
425 浏览

web-audio-api - 在处理 Web Audio API 中的语音输入时,如何利用完整的频谱图分辨率?

我正在开发一种在线视觉中文音调助手之类的东西。这涉及使用HPS 算法进行音高检测。但是该算法的性能受到传入频谱图的分辨率的限制。到目前为止,我一直在使用 Analyzer 节点,但由于我无法设置音频上下文的采样率,因此我得到了不必要的高频率(采样率/2 = 大约 24 kHz,而人类语音仅上升到大约 3.4 kHz)频谱图。因此,如果我的频谱图分辨率为 1024(因为网络音频 api 允许的最大 fft 大小为 2048),我在分析我的语音输入时只使用动态范围的一小部分。

为了解决这个问题,我也一直在尝试使用 scriptProcessorNode 来收集我用DSP.js中的 FFT 分析的缓冲区以获得更多控制,但这似乎是一种与使用分析器相比性能更差的方法-节点。有人对如何解决这个问题有任何建议吗?更多关于我的设置可以在开发博客中看到。

0 投票
1 回答
4905 浏览

android - Android 麦克风频率响应音高检测低于 100Hz

我正在使用手机三星 Galaxy mini 和平板电脑 Nexus 7 处理音频

我一直在使用音频记录类,到目前为止,我已经能够正确分析频率为 200 到 ~20000 Hz 的音频。

我通过自相关检测音高,我基于以下代码:http ://tarsos.0110.be/artikels/lees/YIN_Pitch_Tracker_in_JAVA

我使用的是 44100Hz 的采样频率,我也使用了 8000Hz。

我无法从较低频率检测音​​高,通过将麦克风指向扬声器几乎无法检测到 100Hz。

是否有人知道设备的输入频率响应,或者是否受到物理或代码限制?

我希望至少能够从 50Hz 正确检测,因为我正在尝试做一个语音检测器,并且我正在努力处理这个低频以检测男性声音。

感谢你所做的一切。

-杰西卡

0 投票
1 回答
618 浏览

javascript - 浮点数数组的音高检测

我正在用 javascript 进行录音,并将录音存储为签名浮点数组。我需要什么来确定(并最终调整)阵列上的音高?我见过各种 C++ 算法,但它们在我的情况下似乎没有多大帮助。我什至下载并尝试了这个,看看我是否可以将它的一部分转换为 javascript:

http://voicerecorder.codeplex.com/SourceControl/latest

但实际上所做的只是让录音更响亮,不管我选择什么设置。