Подтвердить что ты не робот

Извлечение частоты песни mp3 файла с использованием HTML5 web audio API

Я использую API веб-аудио HTML5 для анализа песни и создания маркеров, когда средняя частота звука падает ниже определенного значения. Используя существующую инфраструктуру AudioNode, мне удалось это сделать, но звук анализируется только и только при воспроизведении песни.

Однако я хочу проанализировать песню заранее, поэтому я могу извлечь маркеры молчания и превратить их в кнопки CUE, которые пользователь может использовать для перемещения по всей песне.

Очевидно, что будет очень медленно полагаться на воспроизведение всей песни сначала, чтобы проанализировать ее, особенно, если песня похожа на 50-минутный подкаст. Я попытался ускорить воспроизведениеRate до 10x, но это не помогает.

Я полагаю, что решение заключается в пропуске API веб-аудио и анализе необработанного массива ArrayBuffer, однако я не знаю, с чего начать.

Предложения? Идеи?

4b9b3361

Ответ 1

Мне удалось найти слайд в презентации, который описывает именно это: здесь

Нормальное использование API - это обработка звука в режиме реального времени. Вместо этого мы можем предварительно обработать аудио через всю систему и получить результат:

Единственная проблема заключается в том, что мое понимание аудио API слишком упрощено, чтобы понять, что такое "трюк" из примера кода:

var sampleRate = 44100.0;
var length = 20; // seconds
var ctx = new webkitAudioContext(2, sampleRate * length, sampleRate);
ctx.oncomplete = function(e) {
  var resultAudioBuffer = e.renderedBuffer;
  ...
};

function convolveAudio(audioBuffer, audioBuffer2) {
  var source = ctx.createBufferSource();
  var convolver = ctx.createConvolver();
  source.buffer = audioBuffer;
  convolver.buffer = audioBuffer2;

  // source -> convolver -> destination.
  source.connect(convolver);
  convolver.connect(ctx.destination);

  source.noteOn(0);
  ctx.startRendering();
}

Но я подумал, что лучше по крайней мере поделиться этим, чем оставить его полностью, даже если это не совсем тот ответ, который я надеялся дать.

Ответ 2

В приведенной выше свертке описывается преобразование Фурье, которое перемещает ваш звук от интенсивности с течением времени к интенсивности по частоте. Я предлагаю googling javascript преобразование Фурье. В зависимости от того, что вы ищете, я увидел несколько полезных ссылок на эту тему.