MIDI Input

Тема в разделе "Arduino & Shields", создана пользователем PashkovGS, 7 дек 2018 в 13:13.

Метки:
  1. PashkovGS

    PashkovGS Нуб

    Добрый день!
    Мне нужна помощь, с библиотекой MIDI
    Проблема такова: мне необходимо назначить событие в виде включение одного из 8и ключей на N-FET
    используя данные приходящие через MIDI интерфейс а именно номер ноты.
    Проще говоря, при нажатии на миди ктавиатуне на необходимую клавишу нужно инициировать включение определенного силового ключа.
    На данный момент только получается использовать как тригер только сам факт чтения миди порта, и нажатие любой клавиши на клавиатуре приводит к включению силового ключа. через монитор серийного порта сообщения о нотах я принемаю.
    помогите пожатуста интерпретировать сообщение конкретной ноты для включения конкретного силового ключа.
    Спасибо!
     
  2. Igor68

    Igor68 Гуру

  3. PashkovGS

    PashkovGS Нуб

    Спасибо за своевременный совет про Гугл)
    Но все выше представленные ссылки про MIDI Output
     
  4. Igor68

    Igor68 Гуру

    Стало быть принимать байты не смогли? Или анализировать их?
    А Вы посмотрите как они формируются. А по аналогии и дешифруйте.
    Вот смотрите как передают:
    Код (C++):
    // plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that
    // data values are less than 127:
    void noteOn(int cmd, int pitch, int velocity) {
      Serial.write(cmd);
      Serial.write(pitch);
      Serial.write(velocity);
    }
    Видите там как применяют
    Код (C++):
     // play notes from F#-0 (0x1E) to F#-5 (0x5A):
      for (int note = 0x1E; note < 0x5A; note ++) {
        //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
        noteOn(0x90, note, 0x45);
        delay(100);
        //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
        noteOn(0x90, note, 0x00);
        delay(100);
      }
    Видно, что второй байт (точнее первый считая от 0) это нота. Ну вот после байта команды идёт нота и потом скорость. Надо анализировать для команды 0x90 сразу следующий байт.
    Вы же принимаете байты?
     
  5. Igor68

    Igor68 Гуру

    А потом сможете подсвечивать эти ноты светодиодами RGB и ШИМ цветомузыка для пианино.
     
  6. PashkovGS

    PashkovGS Нуб


    в сожалению с байтами я не знаком(
     
  7. PashkovGS

    PashkovGS Нуб

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

    PashkovGS Нуб

    самые близкие проекты которые я нашел :



    Индикатор нажатия клавиш
    http://wiki.amperka.ru/продукты:troyka:midi
     
  9. Igor68

    Igor68 Гуру

    Вообще странно. Вы хотите отличать ноты с помощью ардуины друг от друга? или нет?
    Тогда что это:
    А что это?
    Код (C++):
    for (int note = 0x1E; note < 0x5A; note ++) {
        //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
        noteOn(0x90, note, 0x45);
        delay(100);
        //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
        noteOn(0x90, note, 0x00);
        delay(100);
      }
    параметр note вообще ни о чём? который меняется
    от F#-0 (0x1E) до F#-5 (0x5A) я так понимаю это ноты F# от октавы такой - то до ноты F# октавы такой-то. Что не так? И то, что она идёт вторым байтом в посылке. Вы их эти байты сказали что принимаете:
    Даже я сам уже понял:
    1 - команда
    2 - нота
    3 - длительность ноты.

    Посмотрите посылку в байтах