2

我是一名开发人员,但我对音频和音乐知之甚少。我正在尝试检测歌曲文件中的音符,我正在使用 p5.sound.js 和这个脚本。

我创建了两个数组 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,....]

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

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

图表截图

在此处输入图像描述

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

4

1 回答 1

1

懂一点乐理,懂一点音频。把这个和一粒盐一起吃。

你问的可能很难做到。通常,您可以在轨道中混合多种乐器。将每一个从混合轨道中分离出来被称为鸡尾酒会问题,它没有一个简单的解决方案——事实上,解决它是一个活跃的研究领域。

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

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

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

不过还需要进一步研究。具有良好效果的音频处理不是那么简单的事情。同样适用于图像处理、ML 等。

于 2019-09-03T19:08:08.170 回答