Извлечение частоты песни из mp3-файла с помощью HTML5 web audio API - PullRequest
12 голосов
/ 02 января 2012

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 13 июня 2012

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

Нормальным использованием 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();
}

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

0 голосов
/ 13 июня 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...