В настоящее время я пишу программу на хаскеле, которая имитирует игру гитариста-человека и выдает события Midi. В качестве гитары я использую сэмплированный Telecaster на Fluidsynth/Qsynth.
Чтобы имитировать слайд-ап, я использую изменение высоты тона, но я также хотел добавить немного «щипка», когда палец перемещается по ладу. К моему удивлению, я должен был понять, что когда я играю две последовательные ноты одинаковой высоты по одному и тому же каналу, вторая нота заглушает первую.
Это ожидаемое поведение? Это то, что вы ожидаете от стандарта Midi? Или Fluidsynth плохо себя ведет?
Если это Fluidsynth, кто-нибудь знает, что я могу сделать, чтобы убедиться, что NOTE_ON означает NOTE_ON, а не NOTE_OFF, за которым следует NOTE_ON?
Это довольно часто. Мой синтезатор тоже так делает.
Перекрывающиеся ноты — это серая область в миди.
Но большинство синтезаторов выполняют неявную ноту, когда нота появляется на этом канале.
Если вы хотите, чтобы он оставался включенным, поместите их на отдельные каналы. Обычно это помогает.
Миди в первую очередь предназначен для фортепиано. И вы найдете множество обозначений, которые показывают аккорд для всего такта с перекрывающимися нотами мелодии.
Итак, как только вы играете ноту мелодии на той же ноте, что и аккорд... Ну, у пианино есть одна клавиша для воспроизведения этой ноты, поэтому ее нужно приглушить, прежде чем вы сможете услышать перекрывающуюся.
Обычно гитара делается поверх миди: у вас есть канал для каждой гитарной струны.
Я не совсем уверен, что понимаю, что происходит, но я уже сталкивался с подобными вещами раньше. Если вы пытаетесь скользить в ноту, вы можете использовать соседнюю ноту, изгибая ее. Таким образом, если вы скользите вверх до G, вместо того, чтобы использовать изменение высоты тона, чтобы G начиналась с мимоля и поднималась вверх, вы могли бы использовать F#, начинающуюся с диеза, и подтягивать ее вверх к G, а затем атаковать G.
Ответ Стивена очень хорош и обеспечивает гораздо более широкое решение проблемы с MIDI-гитарой, но может потребовать небольшой дополнительной работы и более глубокого понимания. Я немного не уверен, как это будет запрограммировано и сможете ли вы эффективно зафиксировать производительность с помощью контроллера, т.е. может быть намного больше программирования.
Что ты имеешь в виду под словом "выщипывать"? Почему нужно снова запускать заметку?
Я предполагаю, что вы имеете в виду изменение звука, которое вызывает скольжение по ладу. Я думаю о динамике слайда, и на самом деле нет особого смысла моделировать его как новую заметку. Думаю, имеет больше смысла думать об этом как об изменении текущего звука, а не как о новом звуке.
То, что делает скольжение по ладу, немного возбуждает струну, но добавляет к текущему состоянию огибающей звука. Вот почему имеет смысл думать об этом как об изменении амплитуды, быстром вверх и более медленном вниз.
Вы можете модулировать звук так, чтобы он менялся, когда он достигает состояния «щипка». Возможно, вам действительно нужна более высокая амплитуда в состоянии «щипка» и более низкая амплитуда, когда звук проходит состояние «щипка».
В состоянии скольжения каждое изменение полутона (каждый раз, когда слайд проходит через лад) должно запускать модуляцию, может быть, огибающую или, может быть, один цикл обратного пилообразного LFO, который формирует динамику амплитуды (и, возможно, тембра?) как скользить по ладу.
Ли Ковальковски