gpt4 book ai didi

javascript - 如何从 .mp3 音乐文件中检测音符,然后显示 MIDI 时间图

转载 作者:行者123 更新时间:2023-11-29 22:49:00 25 4
gpt4 key购买 nike

我是一名开发人员,但我对音频和音乐了解不多。我正在尝试检测歌曲文件中的音符,我正在使用 p5.sound.js 和 this脚本。

我创建了两个数组 1) Midi 值,2) 该 midi 值的开始时间。然后我为该 MIDI 值的持续时间创建第三个数组。

我的绘图函数如下所示。

function draw() {
background(200);

// array of values from -1 to 1
var timeDomain = fft.waveform(1024, 'float32');
var corrBuff = autoCorrelate(timeDomain);

beginShape();
for (var i = 0; i < corrBuff.length; i++) {
var w = map(i, 0, corrBuff.length, 0, width);
var h = map(corrBuff[i], -1, 1, height, 0);
curveVertex(w, h);
}
endShape();

fill(0);
text ('Center Clip: ' + centerClipThreshold, 20, 20);
line (0, height/2, width, height/2);

var freq = findFrequency(corrBuff);

t1_arr.push(source.currentTime());
midi_arr.push(freqToMidi(freq));

text ('Fundamental Frequency: ' + freq.toFixed(2), 20, 50);
}

这段代码给我这样的数据

"midi": [
"66",
"74",
"68",
"62",
"69",
"75",
"72",
"66",
"73",
"72",....]

"start_time": [
"2.1066458333333333",
"2.1119791666666665",
"2.1386458333333334",
"2.1546458333333334",
"2.1653125",
"2.1866458333333334",
"2.2079791666666666",
"2.2559791666666666",
"2.2826458333333335",
"2.3093125",....]

"duration": [
5.3333333333332,
26.666666666667,
16,
10.666666666667,
21.333333333333,
21.333333333333,
48,
26.666666666667,
26.666666666666,
32,....]

问题是持续时间很短,而且也没有给出准确的结果。

形成这些数据我正在尝试使用如下图表制作工具然后我将使用麦克风记录用户声音并将其与原始歌曲中的音符匹配并在最后显示乐谱。

图截图

enter image description here

如果有更好的方法请建议我。

最佳答案

了解一点音乐理论和音频知识。对此持保留态度。

您的要求可能很难做到。通常,您可以在轨道中混合使用多种乐器。从混合轨道中分离出每一个被称为 cocktail party problem而且它没有简单的解决方案 - 事实上,解决它是一个活跃的研究领域。

即使您将问题简化为只有一台乐器,该乐器也可以同时演奏多个音符。想一想吉他上的和弦或典型的鼓点。

最后,如果您让一台乐器一次演奏一个音符,您可能会毫不费力地找到可追踪的东西。

FFT 将在这方面为您提供帮助。但是你需要在短时间内运行它——一个小的时间窗口。在该窗口中,您可以查看它输出的频谱,以尝试找出乐器或歌手演奏的一些主频率。但是会很吵。您可以查看每个短窗口中的主频率,并构建主频率随时间变化的 map 。这可能开始类似于您发布的 midi 图表。但它仍然需要大量的按摩才能最终形成“音符结构”。还有一个特定音符不能仅由频率正确表示的问题。您可能需要考虑次要频率或相位信息。

不过还需要进一步研究。具有良好效果的音频处理不是可以简单地完成的事情。图像处理、ML 等同上。

关于javascript - 如何从 .mp3 音乐文件中检测音符,然后显示 MIDI 时间图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57772321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com