Как я могу оптимизировать свой алгоритм Viterbi для обнаружения аккордов?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу оптимизировать свой алгоритм Viterbi для обнаружения аккордов?

Сообщение Anonymous »

Я строю цифровую аудио рабочую станцию в таких, как FL Studio, и имею алгоритм обнаружения аккордов. Это работает так, как есть, но чрезвычайно неэффективно, что мне нужно для оптимизации.[
['C', 'E'],
['E', 'G'],
['G']
]
< /code>
Обратите внимание, что они в порядке, и что для демонстраций саке, первые два E и G являются одинаковой нотой, потому что при каждом изменении примечания мы добавляем элемент в список: < /p>
G --------
E --------------
C ---------
< /code>
Alogrithm, который я выбрал, является алгоритмом Viterbi, в котором у меня есть базовые шаблоны аккордов, которые я затем комбинирую с каждым из 12 заметок в этом случае, это 72 шаблона: < /p>
// Base chords; example after combination: Cmaj, Cmin .... BMaj, Bmin
const chordList: ChordInformation[] = [
{ label: 'maj', keys: [0,4,7], bias: -0.2 },
{ label: 'min', keys: [0,3,7], bias: -0.2 },
{ label: 'dim', keys: [0,3,6], bias: 0.0 },
{ label: 'maj7', keys: [0,4,7,11], bias: -0.1 },
{ label: '7', keys: [0,4,7,10], bias: 0.0 },
{ label: 'm7', keys: [0,3,7,10], bias: 0.0 },
];
< /code>
Затем мы просматриваем алгоритм Viterbi, тестируя каждый аккорд до (72) с каждым аккордом после (72), вычислить лучший и выберите это в качестве интерпретации аккорда: < /p>
// N === templates.length
for (let newSpace = 0; newSpace < N; newSpace++) {
let bestScore = Infinity, prevSpaceOfBest = -1;
for (let prevSpace = 0; prevSpace < N; prevSpace++) {
const candidate = this.chordPath[prevX][prevSpace].bestScore
+ (prevSpace === newSpace ? 0 : this.params.switchCost)
+ this.chordScores[x][newSpace];
if (candidate < bestScore) {
bestScore = candidate;
prevSpaceOfBest = prevSpace;
}
}
this.chordPath[x][newSpace] = {bestScore: bestScore, prevSpace: prevSpaceOfBest};
}
< /code>
Как вы можете видеть даже с 6 аккордами, его уже> 5000 (72x72) операции для каждого расчета, и хотя я поддерживаю массивы в качестве глобального объекта, когда нота изменяется в одной позиции, все позиции после того, как должны обновить свои значения. Это означает, что в проекте с 1000 вводами ведра, если ведро номер 15 изменяется, то должны быть обновлены ведра 15-1000, что является слишком дорогостоящим. < /P>
Еще то, что я пытался: < /p>

Расчет Just Acord Satrates и сочетать с заметками. Первоначально это работает, мы изначально вычислили каждую оценку Emit с всеми 12 смещениями, делающими его O (n) и сохраняем лучшее смещение напоследствии, затем chordpath масштабируется с гораздо меньшей длиной chordlist в этом случае 6, SO 6x6 для каждой интерпретации. Этот перерыв, когда два аккорда имеют одинаковую расчетную оценку. Здесь может быть решение с возвратом, но я не мог его найти. Алгоритм 72x72 работает там, где он терпит неудачу, потому что он всегда рассчитывает каждый путь до конца, тогда как 6x6 должен разрешать только один в каждой части. Этот галстук часто случается, например, ведро с ['C'] будет набирать то же самое для FMAJ, CMAJ, F#DIM и т. Д. Я не собираюсь делать это, потому что музыкально не звучит < /li>
< /ol>
Мне кажется, что с этим алгоритмом нет пути. Я подумал о поиске трансформаторного подхода, но я не знаю, где я мог бы найти один обученный и открытый исходный код.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -detection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу оптимизировать свой алгоритм Viterbi для обнаружения аккордов?
    Anonymous » » в форуме Javascript
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как использовать декодер Viterbi из Radio Library GNU
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Уценка для гитарных аккордов и текстов песен
    Гость » » в форуме CSS
    0 Ответы
    19 Просмотры
    Последнее сообщение Гость
  • Файл output.mid не передает ноты аккордов MIDI
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как я могу оптимизировать свой алгоритм поиска по глубине первого поиска для поиска файлов на моем дисковом дисков?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»