Уголок программиста

Чисто из академического интереса...
Язык не важен.
Возможно ли решить такую задачу?
181179

Известны начало, конец и высота нот.
Знаем, что голоса 3.
Нужно разделить итем на 3 разых трека, как обведено красным.
 
Последнее редактирование:
@Astor-Piazzolla, Когда количество голосов постоянно — при условии, что они не перекрещиваются — это решаемо даже в realtime.
Основные проблемы возникают, когда они постоянно сходятся-расходятся.

Над псевдо-кодом думать откровенно лень, но общий алгоритм в базовом случае примерно такой: Задаем кол-во голосов, окно для распознавания, резолвим голоса по порядку, попутно проверяя, что остаются свободные ноты для остальных. Если не остается — расширяем окно и пробуем дальше.

В конкретном кейсе, допустим, проблемна первая нота из второго аккорда: она к верхнему голосу ближе, чем к среднему. Но в принципе, если потвикать алгоритм для пачки подобных случаев — то будет работать. Я б в качестве второго граничного примера 3 аккорд сделал с захлестом на 2й любым голосом.
Ну, день-два посидеть надо над этим. В принципе, похоже чем-то на парсинг какого-нибудь ЯП, когда делается AST в какой-нибудь польской нотации через рекурсивный спуск.
 
  • Like
Реакции: Astor-Piazzolla
Когда количество голосов постоянно — при условии, что они не перекрещиваются
всегда бы такие тепличные условия.:)
Это же не 3 голоса в задаче по гармонии. Это чаще группа pizz, например. В этом случае правила не работают, ибо группа как бы один голос. (Имеется в виду, что если по контексту все партии по сути 1 голос, то то правила гармонии неприменимы. Правила работают только для ЯВНО РАЗНЫХ голосов).
 
Последнее редактирование:
В конкретном кейсе, допустим, проблемна первая нота из второго аккорда: она к верхнему голосу ближе, чем к среднему.
А вот это интересно. Я думал, что проблема в том, что она заканчивается раньше, чем начинаются другие голоса этого аккорда.
 
  • Like
Реакции: PianoIst
всегда бы такие тепличные условия.
На самом деле такие условия создаются протечкой абстракции. Допустим, я давно хожу вокруг идеи явного указания количества голосов для divisi. В принципе, педаль sustain + еще какой-нибудь контроллер под пальцем дают свободу точного указания от 1 до 4 голосов. Там дальше для реалтайма идет вопрос того, какой голос куда легатирует, и, как раз скорее всего потекут ошибки по моему кейсу с дистанцией до соседнего голоса.
Вообще тут господа @dr-music и @V_ad_im обсуждают софт, который это все, вроде как решает, под названием divisimate. Но я пока туда не смотрю)
[automerge]1589578773[/automerge]
заканчивается раньше, чем начинаются другие голоса этого аккорда.
а ыот этого я не заметил, да)
 
Возможно ли решить такую задачу?
и да и нет)

навскидку видится такое:
главной задачей тут будет правильно задать временнОе окно (которое очерчивает условный аккорд), внутри которого сортировать ноты на самую нижнюю, среднюю и самую верхнюю, чтобы присвоить их голосам. И явно это временнОе окно будет всё время разное - т. е. его надо будет по ходу вычислять своё для каждого случая. И хорошо бы, чтобы этим занималась программа, а не человек..

правило определения этого окна может быть такое: окно для аккорда из трёх нот длится до момента, пока не встретится любая новая нота. Это правило действует как вперёд по временнОй шкале, так и назад. В данном примере эти окна будут накладываться друг на друга.
 
Последнее редактирование:
  • Like
Реакции: Astor-Piazzolla
Чисто из академического интереса...
Язык не важен.
Возможно ли решить такую задачу?
Посмотреть вложение 181179
Известны начало, конец и высота нот.
Знаем, что голоса 3.
Нужно разделить итем на 3 разых трека, как обведено красным.

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

Более сложная логика потребуется если в каком-либо голосе будет удержание.
 
Длительность ноты тут не так важна,так как считать можно и по note_on, только скорее всего весь путь длины куска(отрывка) придется сохранять (нужно сосчитать лямбды(отрезки тишины между нотами) + длительность нот).Считаем по три команды(note_on)(запоминаем последовательность),затем вычисляем и выбираем нужную высоту нот(вычисляем голос/голоса),затем выделяем из исходных данных по условию нужные ноты на трек_per_voice,разделяем/копируем/генерим(в зависимости от задачи).
181216
181217
181219
181220
181221
181222
181223
 
  • Like
Реакции: Astor-Piazzolla и PianoIst
@Trasher, конечно, длительность в данном примере вообще не важна, если не ожидается удержание. А если возможна пауза в голосе, без вмешательства человека однозначно разделить по голосам, боюсь, невозможно в принципе - все время будет конкуренция...
 
  • Like
Реакции: Astor-Piazzolla и Trasher
Если стереть верхнюю ноту второго аккорда в задачке, то разрешить ход голосов может лишь автор)
на самом деле и стирать ничего не надо. Вдруг там в верхнем голосе на ноту больше?))) В смысле, мелодия. Так шта...
 
  • Like
  • Haha
Реакции: Astor-Piazzolla и H-ron
Если голоса постоянно идут подобными аккордами с примерно одинаковым таймингом, то можно тупо дожидаться трех нот, из которых разбрасывать по голосам верхнюю-среднюю-нижнюю, сбрасывать счетчик и дожидаться следующей тройки...
Видимо, пытаясь всякое предусмотреть, я бессмысленно усложнил задачу. Подразумеваются аккомпанирующие преимущественно аккордовые фактуры.
В таком контексте ситуация похожая на первый аккорд маловероятна. А если и возникнет, то скорее всего все эти ноты окажутся в одном голосе. А вот второй может возникать часто. Даже при отсутствии опеваний может быть исполнено 2 голоса (например, при разрешении ум3).
Думается, что счетчик полифонии можно прерывать при общей паузе. И если получилась мелодия, определить к какому голосу следующего аккорда ведёт её высотный тренд. Или от какого голоса предыдущего, при соответствующих обстоятельствах.
 
@Astor-Piazzolla, а нет ничего страшного. Если начало самой поздней ноты каждой тройки происходит раньше, чем начало самой ранней ноты следующей тройки, то все группируется элементарным счетом этих начал до трех, затем сортируется по высоте, сбрасывается и повторяется снова) При этом абсолютно не важно в каком порядке они в этих самых тройках поступают, т.к. группируются тупо последовательно, а затем сортируются по высоте в уже сформированных тройках-аккордах.

Даже напрягаться не надо...
 
Последнее редактирование:
Тогда конечно надо задавать минимально возможное время между нотами мелодии, а если ноты поступают в пределах этого заданного временного интервала, разносить их по голосам. Но если в пределах заданного интервала лишь одно событие - скидывать в верхний. Тоже не великая проблема)
 
Последнее редактирование:
  • Like
Реакции: Astor-Piazzolla
ну это уж другой пример)
Две ноты мелодии далее аккорд?
Ага.:) Я просто совсем не учел в примере, что случай опеваний всяких даже в аккордовой фактуре вероятней всего произойдёт.
 
  • Like
Реакции: H-ron
@Hron, вот тоже сижу про это думаю. Может допустить отрицательное значение и выразить в процентах?
Впрочем, я больше думаю про случайные легаты, если темп шустрый. От pizz и spicc вряд ли стоит ожидать кудрявой орнаментики.
 
Последнее редактирование:
@Astor-Piazzolla, идея в чем:
53159430-ABB9-41E7-8030-466455B4E913.jpeg


Задали некий временной интервал - красным. Если между последовательными нотами интервал больше заданного, то обрабатываем отдельно, если меньше - группируем и добавляем в аккорд, а затем раскидываем по голосам сообразно высоте, как только очередная нота выскакивает за заданный интервал. Цикл.

При таком подходе нот в аккорде может быть неограниченно)

Интервал пропорционален доле...
 
Последнее редактирование:
  • Like
Реакции: Morpheus и Astor-Piazzolla
случайные легаты

Кстати, я б для начала обрабатывал бы исключительно тайминг Note-On. Дополнительную логику по длительности включал бы лишь при явной необходимости, которой в примерах пока не видно)
 
вот ещё задачка из серии "тут бы ИИ не помешал..":

Имеем звуковой файл (легатная нота одной известной струнной библиотеки) - нужно объяснить программе, как в рилтайме измерить время от начала миди ноты до условного пика получаемого аудио-звука. Сам звук непростой, с нарастающей атакой - поэтому за синхрометку его скорее следует принимать момент первого максимального пика громкости. При этом имеем в виду, что таких звуков измерить надо тонну, они могут быть разной громкости. Поэтому не хотелось бы сравнивать звуки с неким общим порогом - хочется мерить их внутри себя, сравнивая относительные точки огибающей, чтобы тихие звуки не нужно было нормализовать перед измерением. Поэтому, к примеру, берём за основу такой алгоритм: сравниваем в рилтайме поступающую громкость со звука, если она больше значения, записанного в буфер, тригерим таймер ("найден пик") и записываем новое значение в буфер. Т.е., пока громкость нарастает, мы каждый момент времени засекаем время "вот, сейчас достигнут пик, меряем время". А когда значения поступают такие же или меньше, то не тригерим. Таким образом мы имеем время, прошедшее с момента начала замера, до времени максимального пика сигнала любой громкости, пусть он даже - 55 дБ. По сути это алгоритм Peak-hold индикаторов уровня. Но вот тут задача усложняется тем, что разные звуки могут иметь разные огибающие, и первый пик может быть не максимальным в рамках всего звука. И тут программе надо отличить - какой пик считать начальным и таймстемпом, а какой уже является продолжением звука.. И вот тут следствие зашло в тупик) кроме как выставить гейт "пики возможны в течении только n-го количества первых миллисекунд" ничего не придумал. Но так можно ошибиться, если, например, если я этот гейт выставил на 200мс, а у сигнала пик прозойдёт на 230 мс..
 

Вложения

  • trigger from a signal peak.jpg
    trigger from a signal peak.jpg
    151,8 KB · Просмотры: 100
  • ложный пик.jpg
    ложный пик.jpg
    145,5 KB · Просмотры: 103
Последнее редактирование:
@V_ad_im, Реальность времени довольно относительная, но как вариант:

Оперируем суммой квадратов значений напряжения сигнала за некий небольшой промежуток времени, превышающий некоторое количество периодов несущей. Это позволит сгладить одиночные пики. По производной данной величины(приращению), а точнее по изменению ее знака, находим очередной максимум. И сравниваем его величину с предидущим. Для надежности, возможно, надо рассматривать больше двух последовательных значений максимумов - опытным путем находим оптимум.
 
  • Like
Реакции: V_ad_im
а как насчёт квадратов разности соседних значений.
 
  • Like
Реакции: V_ad_im
спрошу тут)
вслед за отдельными форматами, научился делать VST2.4, понятно что Steinberg мне не даст лицензию сегодня на продажу вст2, только на тройку.. но это отдельная история.
Меня больше интересует вопрос лицензирования по части VST / AU / AAX
По VST в пакете VST3_SDK есть VST3_License_Agreement. Первую страницу заполняю на себя, а что в конце документа? Поля для Штайна или для меня в том числе?
Поделитесь если кто подписывал ранее соглашение VST?

Так же ткните плиз на то как подписать AU соглашение? Пока я нашел только соглашение на использование логотипа AU.
Проекты НЕ-опенсурсные, коммерческие.
Гуглю третий день, не густо на эту тематику совсем на форумах западных, именно по вопросу подписания лицензионных соглашений на издание VST/AU/AAX.
 
Поля для Штайна или для меня в том числе?
дык по идее самое логичное - это самих штайнов и спросить, на их форуме, например. Или в Ямахе - техподдержку по штайни на русском они осуществляют на территории РФ
 
  • Like
Реакции: baloo
аккаунт форума на аппруве завис, прийдется ждать, но смотрю и ответ там не быстрые, за Ямаху спасибо
писал на почту так же, вобщем зависшая ситуация)
 
Последнее редактирование:
Проекты НЕ-опенсурсные
С этим у VST все очень плохо:
VST3 по факту правильно работает только на винде. На маке уже с костылями, вроде. На Linux вообще лажа.
VST2.4, как правильно заметили, все, ахтунг, не лицензируется. Но для open-source вроде бы, типа, прокатывает.
Так что... Грустно это все. Очень грустно. Особенно грустно то, что по факту — безальтернативно... Очень надеюсь, что Cokos что-нибудь начнет с этим делать. Но даже на это толком не стоит надеяться, потому что у Cokos есть, типа, JSFX, и им, по большому счету, нас⋅рать

@V_ad_im, Вопрос крайне обширный. Если очень коротко — то надо гуглить по ключевым словам MIR (Music Feature Re... (extraction)) и librosa (python). Это самый быстрый путь начать что-то реально делать. Еще как вариант — курить новый препроцессор сэмплов от NI (Kontakt Developer tools + MIR), но там, боюсь, быстро уткнешься в то, что что-то не сможешь сделать.
У меня давно руки чешутся в эти вопросы погрузиться, но все не до того...
 
  • Like
Реакции: V_ad_im
Да, перспективы не радужные. Что с ВСТ3 все плохо это понятно. Они и покрывают сейчас всего 30% рынка в сравнении, встречал много раз, и это за свои 10 лет формата. Из идейного встречал по теме предложения поиска и покупки умершей конторы которая когда то выпускала 2.4 (с большим вопросом по ребрендинг в свою пользу)..

Искажу вопрос тогда... в сторону AU / AAX лицензирования. На сайте Apple я нашел соглашение на использование логотипа только.
где брать лицензионное соглашение (и существует ли оно, предусмотрено - думал что да) для продаж AU.
То же самое с AAX (эту тему я вообще еще не трогал, но слышал что лицензия там под 500 евро?).
 

Сейчас просматривают