问题标签 [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.
wav - wav到midi转换
我是这个领域的新手——但我需要在 java 中执行 WAV 到 MIDI 的转换。有没有办法知道 WAV 到 MIDI 转换的具体步骤是什么?我有一个非常粗略的想法,就像您需要的那样;对 wav 文件进行采样、过滤、使用 FFT 进行频谱分析、特征提取,然后将提取的特征写入 MIDI。但我找不到可靠的资料或论文,如如何做到这一切?有人可以给我一些线索,比如如何以及从哪里开始?是否有任何开源 API 可用于此 WAV 到 MIDI 转换过程?
提前谢谢
machine-learning - 使用神经网络进行音高检测
我正在尝试使用 ANN 来检测音符的音高。该网络是一个简单的两层 MLP,其输入基本上是 DFT(平均和对数分布),12 个输出对应于特定八度音阶的 12 个音符。
该网络使用某些乐器演奏的这 12 个音符的几个样本(一次一个音符)和几个“沉默”样本进行训练。
结果实际上是好的。该网络能够准确地检测出不同乐器演奏的那些音符,它对噪音的影响比较小,甚至在播放歌曲时也不会完全失去理智。
然而,目标是能够检测和弦声音。这样当两个或多个音符一起演奏时,两个相应的神经元就会被激发。令人惊讶的是,该网络实际上已经在某种程度上做到了这一点(仅在单音样本上进行训练),但与单音音符相比,一致性和准确性更低。我的问题是如何增强它识别复音的能力?
问题是我并不真正理解为什么它实际上已经起作用了。不同的音符(或它们的 DFT)基本上是空间中训练网络的不同点。所以我明白为什么它确实识别出相似的声音(附近的点),但不明白它如何“总结”音符组合的输出(与每个训练示例形成一个遥远的点)。与在 (0,0) (0,1) (1,0) = (0) 上训练的 AND 网络相同,预计不会“得出” (1,1) = (1) 的结论。
对此的蛮力方法是用尽可能多的复音样本来训练网络。然而,由于网络似乎以某种方式模糊地从单声道样本中掌握了这个想法,所以这里可能有更基本的东西。
任何指针?(对不起长度,顺便说一句:)。
signal-processing - 使用 FFT 检测小号的音高
如何使用 FFT 获得频率?正确的程序和代码是什么?
iphone - 高性能代码中的峰值检测
我正在寻找使用 HPS 方法在 iphone 中实现语音音高检测。但是检测到的音调不是很准确。Performous在音高检测方面做得不错。
我查看了代码,但没有完全理解计算背后的理论。他们使用 FFT 并找到峰值。但是他们使用 FFT 输出相位的部分让我感到困惑。我认为他们对语音频率使用了一些启发式方法。
那么,任何人都可以解释一下 Performous 中用于检测音高的算法吗?
audio - 吉他和弦识别算法?
有什么好的数字信号处理算法可以很好地处理吉他和弦?由于快速傅立叶变换我认为只有在吉他上弹奏的单个音符上才是准确的,而不是同时弹奏的音符(即和弦)。
谢谢!
fft - 吉他弦的 FFT 音高检测
我有简单的音高检测。输入(麦克风)数据传递给 fft 例程,然后我正在寻找具有最大值的音高这意味着:
我需要它来检测吉他弦的主频率。它适用于频率 440 赫兹(也许更高,我没有检查)到 250 赫兹。低于这个值,检测到的频率是它应该达到的两倍,即。对于 195 赫兹,检测到的频率约为 380 赫兹。看起来它检测到低于 250 赫兹的高次谐波。对于纯 195 赫兹的音调,它可以完美地检测到,但对于 quitar 字符串,它是错误的。
有什么建议会导致这种情况吗?或者我应该使用更复杂的音高检测?
附言。采样率:8000hz,输入数据大小:1024
android - 如何可靠地评估 Android 设备上音高跟踪算法的性能?
好的,我意识到这个问题很模糊,所以我会提供一些上下文,也许我会收到一些与上下文相关的答案。
我正在进行最后一年的项目,作为我的计算机科学理学士和数学学位的一部分,我选择的项目是评估在移动设备上运行的音高跟踪算法。我可能会在基于 Android 的设备上实现一些标准算法。
我将评估频率估计器的性能、可靠性和准确性,因此我需要产生一些与之相关的定量测量。
我担心的是我的结论将与我自己对这些算法的实现密切相关。我将如何检测或最小化我引入的低效率?
此外,我应该注意与移动设备上的数学计算相关的性能问题吗?我读到整数运算受到青睐,因为处理器并不总是支持浮点值?
我阅读了一些相关问题,它们指向具有标准算法的书籍,但是当许多音高跟踪算法仅作为学术论文中的描述存在时,这并不容易。
我还针对性能评估软件,但不针对任何特定应用程序。有什么流行的选择吗?
java - Java 中 Wav 文件的音乐转录
我有一个关于使用 Java 进行音乐转录的项目,问题是,我创建了一个小程序,可以记录声音并将其保存到 WAV 文件中,播放器应该只播放他/她想要转录的作品,之后我就卡住了当时我必须从保存的 WAV 文件中获取信息并使用此信息创建 MIDI 文件,并且在创建 MIDI 文件后,我必须为其生成乐谱(乐谱),所有这些都必须完成在爪哇。
我到处寻找关于如何完成这些东西的清晰解释,但我没有找到任何直接的东西:(因为我是 Java 新手,我希望有人能帮我解决这个问题,我在编程时遇到问题的主题是:
- 获取有关在 WAV 文件中播放的音符的信息。
- 知道笔记。
- 创建与 WAV 文件等效的 MIDI 文件。
- 从 MIDI 文件生成 SCORE。
在对正在读取的数据执行分割后,我也尝试过快速傅立叶变换,但我认为这绝对是错误的方向:(
请如果有人可以在上面指定的主题上为我提供帮助,以及如何仅在 Java 中对这些主题进行编程,我们将不胜感激:)
顺便说一句,该项目是:
玩家在钢琴上弹奏音符>>记录他的演奏>>玩家获得他的演奏分数。
c# - C# 的 FFT 不准确性
我一直在试验 FFT 算法。我使用 NAudio 以及来自互联网的 FFT 算法的工作代码。根据我对表演的观察,得到的音高是不准确的。
发生的情况是我有一个 MIDI(从 GuitarPro 生成)转换为 WAV 文件(44.1khz,16 位,单声道),其中包含从 E2(最低吉他音符)到大约 E6 的音高进程。较低的音符(E2-B3 附近)的结果通常是非常错误的。但是达到 C4 它在某种程度上是正确的,因为您已经可以看到正确的进程(下一个音符是 C#4,然后是 D4 等)但是,问题在于检测到的音高比实际音高低半音(例如 C4 应该是音符,但显示 D#4)。
你认为可能有什么问题?如有必要,我可以发布代码。非常感谢!我还是开始掌握DSP领域。
编辑:这是我在做什么的一个粗略的划痕
然后:(waveBuffer 只是一个将 byte[] 转换为 float[] 的类,因为该函数只接受 float[])
最后:(Smbpitchfft 是具有 FFT 算法的类......我相信它没有任何问题,所以我不在这里发布)
并解释结果:
更新(如果有人仍然感兴趣):
因此,以下答案之一表明来自 FFT 的频率峰值并不总是等于音高。我明白那个。但如果是这种情况,我想为自己尝试一些东西(假设有时频率峰值是产生的音高)。所以基本上,我得到了 2 个能够显示音频信号频域的软件(DewResearch 的 SpectraPLUS 和 FFProperties;归功于他们)。
所以这里是时域中频率峰值的结果:
SpectraPLUS
和 FFT 属性:
这是使用 A2 的测试笔记(大约 110Hz)完成的。查看图像时,SpectraPLUS 的频率峰值在 102-112 Hz 范围内,FFT 属性的频率峰值在 108 Hz 范围内。在我的代码中,我得到 104Hz(我使用 8192 个块和 44.1khz 的采样率......然后将 8192 加倍以使其成为复杂输入,所以最后,与 SpectraPLUS 的 10Hz binsize 相比,我得到大约 5Hz 的 binsize )。
所以现在我有点困惑,因为在软件上它们似乎返回了正确的结果,但在我的代码上,我总是得到 104Hz(请注意,我已经将我使用的 FFT 函数与 Math.Net 等其他函数进行了比较,它似乎是正确的)。
你认为问题可能出在我对数据的解释上吗?或者软件在显示频谱之前会做其他事情吗?谢谢!
mp3 - 将音频转换为 MIDI 的软件
有谁知道是否有好的软件可以执行从(wave 或 mp3 或其他已知格式)到 MIDI 的转换?我知道从音频文件到 MIDI 的转换是一个非常复杂的过程。我目前正在为我的学士学位开发一个需要操作 MIDI 文件的课程项目。
如果您知道任何好的软件,我愿意接受建议。我更喜欢也可以通过传递要转换的文件从 shell 执行的软件。
任何帮助表示赞赏。