Полезно: НОВОСТИ Главная | ФОРУМ | Статьи | Обучающее видео | Видео | Вопрос-ответ | Ссылки | ПОИСК по сайту
Скачать: Пресеты ProChannel | Instrument Definitions | Studioware Panels | Шаблоны проектов | Обои | CAL-скрипты | Русификатор Sonar | Сэмплы | SONAR Themes | Cakewalk Sonar скачать

Автор Тема: MIDI события в KB-930. Переназначение - как?  (Прочитано 9720 раз)

blackstrip

  • Новичок форума
  • *
  • Сообщений: 2
  • Репутация: 0
У меня веселый синтезатор Techno KB-930. Я знаю что буээ) Но вот я его захотел заставить норм. работать.

Кабель у меня "Премьер" usb-2-midi.

Значит так - подключаю его к компу. Ну в сонаре (у меня Sonar 7) назначил как положено устройство input мой синтезатор (точнее вот этот девайс "премьер" с драйвером NT USB-MIDI).

Играю - в режиме live, када просто слушаешь чо играешь, и еще никакой записи не ведешь - видно по мигающему индикатору при нажатии клавиши на синтезаторе приходит MIDI сообщение какое то, при отжатии приходит второе.

А когда веду запись на MIDI трэк - то ноты идут, как будто клавиши не отжимаются, и нажатыми остаются пока запись не закончится.

Я еще раз в режиме live без записи слушаю - всё ок, клавишу нажал и держу - оно поет долго, а если нажал и отпустил - то оно по второму миганию (что пришло сообщение) отрубает звук.

Я ставлю MIDI-OX. Смотрю очередь сообщений:
Значит с одной клавишей:
Нажал
 00000B59   1   1     C0    00    --    1  ---  PC: Acc. Grand Piano - инструмент грандпиано
 00000B59   1   1     B0    7B    00    1  ---  CC: All Notes Off    - все ноты в нулевом канале вырубаем
 00000B59   1   1     90    48    42    1  C  5 Note On              - включаем тока С5 ноту в нулевом канале
Отпустил
 00000E1F   1   1     B0    7B    00    1  ---  CC: All Notes Off    - вырубаем все ноты в нулевом канале, включая С5

А если с двумя клавишами:
Нажал первую
 00001C38   1   1     C0    00    --    1  ---  PC: Acc. Grand Piano - инструмент грандпиано в 0 канале
 00001C38   1   1     B0    7B    00    1  ---  CC: All Notes Off    - все ноты в нулевом канале вырубаем
 00001C38   1   1     90    4C    33    1  E  5 Note On              - включаем E5 в нулевом канале
Нажал вторую
 00001D6F   1   1     C1    00    --    2  ---  PC: Acc. Grand Piano - инструмент грандпиано в 1 канале
 00001D6F   1   1     B1    7B    00    2  ---  CC: All Notes Off    - вырубаем все ноты в 1 канале
 00001D6F   1   1     91    4D    42    2  F  5 Note On              - включаем в 1 канале ноту F5
Потом отпускаю первую
 000020B7   1   1     B0    7B    00    1  ---  CC: All Notes Off    - отрубаем все ноты в 0 канале
Потом отпускаю вторую
 000021D9   1   1     B1    7B    00    2  ---  CC: All Notes Off    - отрубаем все ноты в 1 канале

Короче синтезатор разбивает сам по каналам ноты. Т.е. каждую очередную ноту в свой канал. Если по порядку нажимать 5 нот - то первую он запхнет в 0 канал, вторую в 1 канал, третью в 2 канал, четверную в 3 канал, пятую в 4 канал.

НО сообщение All Notes Off для любого канала - почему то Sonar не воспринимает в режиме записи, а в режиме live когда без записи с эхом на вывод (microsoft synthesizer) - то всё окей.

Вопрос в том - как заставить сонар команду All Notes Off выполнять?

p.s. я уже даже пробовал свой MFX плагин написать на основе DXi SDK на C++. Вот смотрите - там есть короч две процедуры OnInput и OnEvents.

OnInput я так понимаю сонар использует в режиме live (а может и в режиме записи). А вот OnEvents - толи тока в режиме записи, толи и в режиме записи и в режиме live тоже.

Я делаю процедуру OnInput (точнее дорабатываю готовую из SDK)

HRESULT CPlugKb930::OnInput( IMfxDataQueue* pqIn, IMfxDataQueue* pqOut )
{
   // This gives us a chance to process live MIDI input
   int nCount;
   if (SUCCEEDED( pqIn->GetCount( &nCount ) ))
   {
      for (int ix = 0; ix < nCount; ++ix)
      {
         MfxData data;
         if (SUCCEEDED( pqIn->GetAt( ix, &data ) ))
         {
            // Нота включается (0x90)? - ловим событие включения ноты
            BYTE const byKind = data.m_byStatus & 0xF0;
            if (0x90 == byKind)
            {
               //запоминаем что там такое было нажато в конкретном канале номер data.m_byStatus & 0x0F - от 0 до 15
               n_chan[data.m_byStatus & 0x0F]=data.m_byData1;
               pqOut->Add( data ); // выкидываем это событие нажатия ноты на выполнение
            } else if (0xB0 == byKind) { //а если контроль, то
               //смотрим чо тут за контроль пошел, если наше вырубание All Notes Off
               if ((data.m_byData1 == 0x7B)&(data.m_byData2 == 0)&(n_chan[data.m_byStatus & 0x0F]!=0)) {//ага, синтезатор вырубает все ноты. подменяем событие - вырубаем последнюю нажатую в этом канале
                  data.m_byStatus = (0x80|(data.m_byStatus & 0x0F));//событие "вырубание"
                  data.m_byData1 = n_chan[data.m_byStatus & 0x0F];//как раз последнюю ноту
                  data.m_byData2 = 0; //громкость - ноль
                  n_chan[data.m_byStatus & 0x0F] = 0;
               }
               pqOut->Add( data );//запихиваем измененное событие или неизмененное
            }
            else
            {
// а если это было ни нажатие, ни all notes off - то просто пропускаем событие
               pqOut->Add( data );
            }
         }
      }
   }
   return S_OK;
}


Вроде эта процедура ничего не меняет особо =) Ибо в режиме live кейкволк и так прекрасно ловит all notes off, и хоть ты ее заменяй на вырубание отдельной ноты, хоть не заменяй - все остается одинаково, и работает хорошо

А вот для режима записи - вроде как действует OnEvents. Пишу ее:

HRESULT CPlugKb930::OnEvents( LONG lTimeFrom, LONG lTimeThru, IMfxEventQueue* pqIn, IMfxEventQueue* pqOut )
{
   // NOTE: We are not allowed to retain the IMfxEventQueue pointers pqIn or
   // pqOut, nor should we call Add() or Release() on them.
   //
   // This method will likely make up the bulk of your MFX effect.


   int nCount;
   
   if (SUCCEEDED( pqIn->GetCount( &nCount ) ))
   {
      //по всем событиям
      for (int ix = 0; ix < nCount; ++ix)
      {
         MfxEvent event;
         //достаем каждое отдельно
         if (SUCCEEDED( pqIn->GetAt( ix, &event ) ))
         {
            // TODO:  Add event handling code here.
            // Add event to outgoing queue
            
            if (event.m_eType==MfxEvent::Note) {
               //если идет нотная инфа. сохраняем в соотв канале инфу о нажатой ноте
               n_chan2[event.m_byChan]=event.m_byKey;
               pqOut->Add( event );
            } else
            if (event.m_eType==MfxEvent::Control) {
               if ((event.m_byNum = 0x7B)&(event.m_byVal=0)) {
                  //если All notes off - обрываются все ноты. вместо этого правим эвент, чтоб оборвать последнюю нажатую ноту в этом канале
                  event.m_eType=MfxEvent::Note;
                  event.m_byKey=n_chan2[event.m_byChan];
                  event.m_byVel=0;//громкость в ноль ей - вот и хорош играть
                  pqOut->Add( event ); //кидаем ее в поток обратно
               }
            } else {
            pqOut->Add( event );
            }
            pqOut->Add( event );
         }
      }
   }
   return S_OK;
}

И вот сонар на енто реагировать не хочет. При записи ноты не обрываются как раньше, хотя вроде и OnInput и OnEvents запрограммированы на замену сообщения All notes off на сообщение "вырубай ту последнюю ноту в этом канале, которую перед этим в этом канале нажимали". Что вы можете посоветовать? =) Мож в кейкволке где галочку просто надо поставить чтоб при записи реагировал кейкволк на All notes off в канале, для всех каналов мож даже галочки поставить. Где они эти галочки? ))) Посоветуйте чего нибудь =) Кроме выкидывания этого "синтезатора")

blackstrip

  • Новичок форума
  • *
  • Сообщений: 2
  • Репутация: 0
Re: MIDI события в KB-930. Переназначение - как?
« Ответ #1 : 02 Февраля, 2009, 00:28:13 »
Вот даж подумал и сам догадался что в OnEvents надо не менять событие All Notes Off на ноту с нулевой длительностью, а надо ту СТАРУЮ УЖЕ ЗАПУЩЕННУЮ НОТУ как то остановить! Дык как еще остановить? У нее ж тока поле есть duration, а как его задать, если знаешь что вот ее нажали, а скока по времени она будет звучать - хз. В MfxEvent помоему вообще нет команд остановки звучания в канале и очистки всех звучащих нот или хотя бы выборочных нот.

В итоге Вопрос остается - Где в Sonar включить выполнение команд All Notes Off ?

muzicant

  • Вновь прибывший
  • *
  • Сообщений: 1
  • Репутация: 0
Re: MIDI события в KB-930. Переназначение - как?
« Ответ #2 : 16 Марта, 2009, 21:54:28 »
Ну я вроде не советую выкидывать. Я написал программу для PIC-контроллера, разработал конструктив. Посмотреть можно тут http://mysicant.narod.ru. Если надо будут исходники, это можно сделать. Пишите на mail, тогда выложу в разделе "в хорошие руки".

alexander glushkin

  • Новичок форума
  • *
  • Сообщений: 8
  • Репутация: 4
Re: MIDI события в KB-930. Переназначение - как?
« Ответ #3 : 27 Ноября, 2011, 19:42:24 »
у меня был techno-930 и столкнулся с этой проблемой.
потом была необходимость его продать, спустя несколько лет  попал опять в тоже место, но с синтезатором novis  939  :-\  внешне иденьтичным, только окрас корпуса немного иной. отсюда вывод - все эти синтезаторы делают в одессе, причал номер 5.
если не трудно напиши в личные сообщения, как эти исходники компилировать и чем.

alexander glushkin

  • Новичок форума
  • *
  • Сообщений: 8
  • Репутация: 4
Re: MIDI события в KB-930. Переназначение - как?
« Ответ #4 : 15 Декабря, 2011, 20:27:44 »
решил эту проблему следующим способом, переназначать через midi-ox
инструкция и скрипт во вложении  :scenic:
установить всё и запустить скипт.

Raam

  • Активный участник форума
  • ***
  • Сообщений: 457
  • Репутация: 220
    • Nizin Records
Re: MIDI события в KB-930. Переназначение - как?
« Ответ #5 : 16 Декабря, 2011, 19:13:35 »
+1 за заботу о следующем поколении :)
Nizin Records
....
Intel i5,  Win7 x64, ram 12Gb, RME Fireface UCX, Tannoy Reveal 501a, Oktava mk-105, MXL 990/991


 


Новые сообщения на форуме

Добавить страницу в закладки, поделиться с друзьями.....

Разделы форума


⦁ Sonar. Работа с аудио
Подразделы: Запись и обработка вокала, Запись и обработка гитары, Барабаны, Электронная и танцевальная музыка, Hip-Hop, RNB
⦁ Sonar. Работа с MIDI, контроллеры, автоматизация
⦁ Sonar. Работа с видео
⦁ Sonar и VST эффекты, инструменты, ProChannel, Rewire
⦁ Sonar и музыкальное оборудование
⦁ Sonar. Настройка. Общие вопросы
⦁ Другие программы для создания музыки и совместное их использование с Sonar
⦁ О звуке, сведение, мастеринг, акустическая отделка помещений
⦁ Сэмплы, библиотеки для инструментов
⦁ Творчество
Подразделы: Школа
⦁ Шоубизнес, продвижение творчества, промоушн, авторское право. Концерты, конкурсы, фестивали, релизы альбомов
⦁ Обсуждение сайта
⦁ Другое. Разговоры на общие темы
⦁ Продам - куплю
⦁ Предложения о сотрудничестве, поиск музыкантов



При перепечатке материалов сайта, активная ссылка на SonarMusic.ru обязательна. © 2007-2020 SonarMusic.ru
Этот сайт никаким образом не связан с BandLab и не является их подразделением. This site is not affiliated with or endorsed by BandLab.
Присоединяйтесь к нам:
vk youtube

Видео на русском:

Смотрите также:


SimplePortal 2.3.7 © 2008-2024, SimplePortal