问题标签 [pitch-detection]

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 回答
80 浏览

fft - 如何对值进行非规范化以进行谐波乘积频谱

我正在尝试执行 HPS 算法,结果不正确。(48000Hz,16 位)我已经将记录频率应用于缓冲区,然后是几个分割,然后是汉宁窗,最后是 FFT。

我在每个 FFT 中都获得了一个峰值,它与我使用的频率或它的一个倍频程相对应。但是当我做 HPS 时,基频的结果是 0,因为我求和(乘)的数组的数量太小了,超过了我在原始 FFT 中的峰值。这是 HPS 的代码:

原始 HPS 代码在这里

我不知道为什么总和的值很小,什么时候应该大于前一个,以及总和的峰值。我已经应用了RealFordward FFT,也许 -1 到 1 的范围存在问题,这使得当我乘以它时我的总和会减少。

知道如何解决它,做 HPS 吗?我怎么能做逆归一化?

0 投票
1 回答
241 浏览

reactjs - React Native 与 Expo 监控来自麦克风的用户语音音高

你好,我想通过 react-native expo 制作一个简单的平台游戏,有点像小鸟,但使用用户语音作为输入。

我试过使用@react-native-community/voice,但我得到了这个错误

我可以在世博会上使用任何不同的库来监控用户的音调吗?

0 投票
0 回答
274 浏览

python - 实现基频检测的互相关函数

对于我的声音处理项目(特别是音高检测),我需要实现一个互相关函数,但结果有问题,我有 400 帧,所有帧都有 512 个样本,帧有 50% 重叠这是公式互相关 我已经尝试了很多方法来正确但我不能在这里是我的最后一个代码:

问题是最大值总是在最后一个参数中,ccf但它应该在不同的帧中有所不同。请注意,人类的音高频率在 50-400 之间变化,矢量索引稍后会映射到这些频率,对于没有音高的帧,-1将附加到列表中

实现工作正常 它应该用于帧矩阵输入希望你喜欢它

0 投票
0 回答
260 浏览

ios - ios如何结合AVAudioEngine语音识别和AudioKit麦克风音高检测?

我想将AVAudioFoundation麦克风输入用于语音检测,如本 ios 示例所示,并同时使用 AudioKit 通过相同的麦克风输入检测用户语音的音高。后一个 API 可能是第一个 API 的封装,但有自己的类和初始化。有没有办法像语音示例中那样为 AudioKit 提供现有的麦克风配置,或者同时使用语音 API 和 AudioKit 的麦克风音高检测 API 的替代方法?我怎样才能做到这一点?

编辑:这个问题有点复杂

我需要能够同步三件事:触摸事件、音频套件检测时间和语音检测时间。这些中的每一个都在不同的时基上运行。语音给了我关于录音开始的片段时间戳。事件的时间戳UITouch会有所不同。我不确定 AudioKit 的时间戳是什么。这里提到了一些主机时间和 AV 时间戳但我不确定这会让我到任何地方。语音和音频同步有点不清楚。我可以指导一下这可能如何工作吗?

0 投票
2 回答
664 浏览

python - 使用python从头开始实时音高转换

我需要一个由两部分组成的项目的帮助:

  1. python中的实时音高移位器(从头开始)。
  2. 切换来自 2 个不同扬声器的 2 个声音的音高。

我有两个问题:

  1. 我找不到音高转换背后的正确数学来从头开始实现它,因此我们将不胜感激。
  2. 我需要从 2 个声音中提取音高来切换它们还是有更简单的解决方案?如果不是关于如何从声音中正确提取音高并进行切换的解释,我们将不胜感激。

提前致谢。

0 投票
1 回答
463 浏览

python - 使用 FFT 和多项式插值改变人类语音的旋律

我正在尝试执行以下操作:

  1. 提取我提出问题的旋律(单词“嘿? ”录制成 wav),这样我就可以得到一个旋律模式,我可以将其应用于任何其他录制/合成的语音(基本上 F0 如何随时间变化)。
  2. 使用多项式插值(拉格朗日?)所以我得到一个描述旋律的函数(当然是大约)。
  3. 将该函数应用于另一个录制的语音样本。(例如,单词“嘿。 ”因此它被转换为一个问题“嘿? ”,或者将句子的结尾转换为听起来像一个问题[例如。“可以吗 ”=>“可以吗? ”]) . 瞧,就是这样。

我做了什么?我在哪里? 首先,我深入研究了 fft 和信号处理(基础)背后的数学。我想以编程方式进行,所以我决定使用 python。

我对整个“嘿? ”语音样本进行了 fft,并获得了频域数据(请不要介意 y 轴单位,我没有对其进行归一化) ffted 样品一

到现在为止还挺好。然后我决定把我的信号分成块,这样我就能得到更清晰的频率信息——峰值等等——这是一个盲目的尝试,我试图掌握操纵频率和分析音频数据的想法。然而,它让我无处可去,至少没有朝着我想要的方向发展。

ffted 样品二

现在,如果我获取这些峰值,从它们那里得到一个插值函数,并将该函数应用于另一个语音样本(语音样本的一部分,当然也是 ffted)并执行反 fft 我不会得到我想要的, 对?我只会改变幅度,这样它就不会影响旋律本身(我认为是这样)。

然后我使用librosa中的specpyin方法来提取真正的 F0-in-time - 问问题“嘿? ”的旋律。正如我们所料,我们可以清楚地看到频率值的增加: ffted 频谱图和 f0 在时间上的过程

一个非问题陈述看起来像这样 - 假设它是不变的。 频谱图非问题

这同样适用于较长的语音样本: 单调的语音样本

现在,我假设我有块来构建我的算法/流程,但我仍然不知道如何组装它们,因为我对引擎盖下发生的事情的理解存在一些空白。

我认为我需要找到一种方法将 F0 时间曲线从频谱图映射到“纯”FFT 数据,从中获取插值函数,然后将该函数应用于另一个语音样本。

是否有任何优雅(不优雅也可以)的方式来做到这一点?我需要指出正确的方向,因为我能感觉到我已经接近但我基本上被卡住了。

上面图表后面的代码仅取自 librosa 文档和其他 stackoverflow 问题,它只是草稿/POC,所以请不要评论样式,如果可以的话:)

fft 大块:

频谱图:

非常感谢提示、问题和评论。

0 投票
1 回答
175 浏览

android - 使用 TarsosDSP 修复 Kotlin 中的“摇晃”音高检测

我正在编写一个乐器调音器应用程序(现在从吉他开始)。对于音高检测,我使用的是 TarsosDSP。它确实可以正确检测音高,但是它很不稳定——例如,我会在我的吉他上敲击(正确调音的)D 弦,它会正确地将其识别为 D,但片刻之后它会循环播放一堆随机笔记很快。我不确定如何最好地解决这个问题。这是我负责检测音高的代码:

然后我编写了一个函数,该函数应该检测与当前音高最近的音符。此外,我还尝试通过编写一个函数来获得“不那么不稳定”的结果,该函数应该以 hz 为单位找到最接近的音高,然后将该结果用于最接近的音符函数,认为这样我可能会得到更少不同的结果(即使它应该是一样的,我也没有注意到任何区别)。下面是两个函数:

有什么想法可以让我获得更一致的结果吗?谢谢!

0 投票
0 回答
33 浏览

javascript - 使用 WebAudioAPI 访问手机麦克风不会检测到声音(或失真的声音)

我正在研究吉他调音器 PWA,并且已经实现了 2 种音高检测算法,以便查看哪个是最好的。该应用程序应该通过连接到设备的麦克风获取音频数据来工作。

为了获取音频数据,我使用 WebAudioAPI 中的以下函数来访问设备麦克风:

在桌面上,一切正常,麦克风音频被拾取,两种算法都按预期工作。

在移动设备上,在 Oneplus 6 上进行测试时,一切都像在台式机上一样工作。但是在尝试在三星 Galaxy Note 10 上进行测试后,算法没有检测到任何频率。

对于我第一次尝试弄清楚发生了什么,我尝试通过扬声器将麦克风捕获的声音输出回来,以便我检查麦克风是否检测到任何声音。在台式机和一加 6 上,我可以正常听到我的声音。

在三星手机上,音频听起来像旧电视的静态声音,或者像这里的手机干扰声音演示。我的直觉告诉我,这可能是因为三星手机有更多的麦克风(2 个或三个),这可能会干扰应用程序,因为我没有以任何方式指定使用哪个麦克风。不过,这只是一种预感。

那么,有没有人知道我可以如何着手解决这个问题?或者如何使用 WebAudioAPI 明确控制我想使用哪些麦克风?

0 投票
1 回答
177 浏览

tensorflow - 在使用 crepe 模型的 ml5 音高检测中,如何检测 ±2kHz 以上的音高

我成功使用了 ml5 的音高检测功能:

问题:

没有检测到高于 ±2000Hz 的音高。我尝试了多种设备并检查了声音在声波图中是否可见,因此这似乎不是麦克风问题。

我认为这可能是库进行采样率限制/重新采样的结果,因为奈奎斯特频率(最大“可记录”频率)是采样率的一半。

我在本地托管 ml5 源并尝试修改PitchDetection 类

在那里,我看到出于性能原因,采样率似乎被重新采样到 1024Hz。这听起来不对,好像我没记错一样,这只允许检测高达 512hz 的频率。我肯定错过了一些东西(或很多)。

我尝试摆弄费率,但将其增加到 2048 会导致错误: Error when checking : expected crepe_input to have shape [null,1024] but got array with shape [1,2048].

我的问题是:

ml5 PitchDetection 类中是否有一些东西我可以修改、配置(可能是不同的模型)以使用 crepe 模型检测高于 2000Hz 的频率?

0 投票
0 回答
22 浏览

java - 在 android studio 中检测高频(18k-20k)的问题。请帮帮我

我正在制作 android 应用程序来检测 18k~20k。但是 Pitch 值没有得到它。音高值不能超过 11000Hz。我尝试更改采样率的值 sampleSizeInBits,但它无法正常工作。请帮我解决这个问题。这可能是关于 TarasosDSP 库的问题吗..?

'''

tarsosDSPAudioFormat=new TarsosDSPAudioFormat(TarsosDSPAudioFormat.Encoding.PCM_SIGNED, 22050, 16, 1, 2 * 1, 22050, ByteOrder.BIG_ENDIAN.equals(ByteOrder.nativeOrder()));

'''