MIDI Блок

Вопросы по MIDI

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#1

Сообщение vd0 » 16.02.2018{, 10:12}

Решил создать тему по миди блоку, так как поисковик по форуму не выдал результата. К сожалению в такой замечательной программе как FlProg нет такого блока, а для Arduino 2560 он очень нужен. Библиотека в вложении. Сейчас занялся его созданием , но есть некоторые трудности. Суть задачи такова: имеем вход музыкального инструмента. В библиотеку посылаем с входа значения note, sensitivity и flag=false.
Примерный вид:
СпойлерПоказать
#include <MIDI.h>
struct MySettings : public midi::DefaultSettings
{
static const long BaudRate = 115200;
};
MIDI_CREATE_DEFAULT_INSTANCE);
const int velocity = 127; //Max Velocity (range is 0-127)
const int channel = 1; //MIDI Channel 1 (out of 16)
void setup() {
MIDI.begin();
}
// Play notes from F3 (53) to A6 (93):
void loop() {
// For each note from 53 to 93, perform the following code for that note,
// incrementing note by 1 each time.
for (int note = 53; note <= 93; note ++) {
MIDI.sendNoteOn(note, velocity, channel); // Turn the note on.
delay(1000); // Wait 1000 milliseconds.
MIDI.sendNoteOff(note, velocity, channel); // Turn the note off.
}
}
Как создать блок в FLProg, это понятно, понятно и что куда прописать, не могу разобраться как заставить команду MIDI.sendNoteOn передавать входящее значение с внешней переменной. К миди блоку хочется подвести хотя бы 2 входа типа integer.
Velocity - характеризует силу удара по клавише. Устройства, оснащенные датчиками скорости нажатия клавиши, измеряют скорость, с которой клавиша при нажатии опускается вниз, и присваивают значение в пределах от 0 до 127 параметру velocity, указывая, таким образом, скорость атаки.
note - передаваемый код ноты согласно миди карты нот
channel - номер миди канала на который передавать.

Так же приведу в листинге из библиотеки в вложении, поддерживаемый набор команд для миди библиотеки, которые так же хотелось бы использовать.
СпойлерПоказать
/*!
* @file midi_Defs.h
* Project Arduino MIDI Library
* @brief MIDI Library for the Arduino - Definitions
* @author Francois Best
* @date 24/02/11
* @license MIT - Copyright (c) 2015 Francois Best
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#pragma once

#include "midi_Namespace.h"

#if ARDUINO
#include <Arduino.h>
#else
#include <inttypes.h>
typedef uint8_t byte;
#endif

BEGIN_MIDI_NAMESPACE

#define MIDI_LIBRARY_VERSION 0x040300
#define MIDI_LIBRARY_VERSION_MAJOR 4
#define MIDI_LIBRARY_VERSION_MINOR 3
#define MIDI_LIBRARY_VERSION_PATCH 0

// -----------------------------------------------------------------------------

#define MIDI_CHANNEL_OMNI 0
#define MIDI_CHANNEL_OFF 17 // and over

#define MIDI_PITCHBEND_MIN -8192
#define MIDI_PITCHBEND_MAX 8191

// -----------------------------------------------------------------------------
// Type definitions

typedef byte StatusByte;
typedef byte DataByte;
typedef byte Channel;
typedef byte FilterMode;

// -----------------------------------------------------------------------------
// В этой секции миди команды
/*! Enumeration of MIDI types */
enum MidiType
{
InvalidType = 0x00, ///< For notifying errors
NoteOff = 0x80, ///< Note Off
NoteOn = 0x90, ///< Note On
AfterTouchPoly = 0xA0, ///< Polyphonic AfterTouch
ControlChange = 0xB0, ///< Control Change / Channel Mode
ProgramChange = 0xC0, ///< Program Change
AfterTouchChannel = 0xD0, ///< Channel (monophonic) AfterTouch
PitchBend = 0xE0, ///< Pitch Bend
SystemExclusive = 0xF0, ///< System Exclusive
TimeCodeQuarterFrame = 0xF1, ///< System Common - MIDI Time Code Quarter Frame
SongPosition = 0xF2, ///< System Common - Song Position Pointer
SongSelect = 0xF3, ///< System Common - Song Select
TuneRequest = 0xF6, ///< System Common - Tune Request
Clock = 0xF8, ///< System Real Time - Timing Clock
Start = 0xFA, ///< System Real Time - Start
Continue = 0xFB, ///< System Real Time - Continue
Stop = 0xFC, ///< System Real Time - Stop
ActiveSensing = 0xFE, ///< System Real Time - Active Sensing
SystemReset = 0xFF, ///< System Real Time - System Reset
};

// -----------------------------------------------------------------------------

/*! Enumeration of Thru filter modes */
struct Thru
{
enum Mode
{
Off = 0, ///< Thru disabled (nothing passes through).
Full = 1, ///< Fully enabled Thru (every incoming message is sent back).
SameChannel = 2, ///< Only the messages on the Input Channel will be sent back.
DifferentChannel = 3, ///< All the messages but the ones on the Input Channel will be sent back.
};
};

/*! Deprecated: use Thru::Mode instead.
Will be removed in v5.0.
*/
enum __attribute__ ((deprecated)) MidiFilterMode
{
Off = Thru::Off,
Full = Thru::Full,
SameChannel = Thru::SameChannel,
DifferentChannel = Thru::DifferentChannel,
};

// -----------------------------------------------------------------------------

/*! \brief Enumeration of Control Change command numbers.
See the detailed controllers numbers & description here:
http://www.somascape.org/midi/tech/spec.html#ctrlnums
*/
enum MidiControlChangeNumber
{
// High resolution Continuous Controllers MSB (+32 for LSB) ----------------
BankSelect = 0,
ModulationWheel = 1,
BreathController = 2,
// CC3 undefined
FootController = 4,
PortamentoTime = 5,
DataEntryMSB = 6,
ChannelVolume = 7,
Balance = 8,
// CC9 undefined
Pan = 10,
ExpressionController = 11,
EffectControl1 = 12,
EffectControl2 = 13,
// CC14 undefined
// CC15 undefined
GeneralPurposeController1 = 16,
GeneralPurposeController2 = 17,
GeneralPurposeController3 = 18,
GeneralPurposeController4 = 19,

DataEntryLSB = 38,

// Switches ----------------------------------------------------------------
Sustain = 64,
Portamento = 65,
Sostenuto = 66,
SoftPedal = 67,
Legato = 68,
Hold = 69,

// Low resolution continuous controllers -----------------------------------
SoundController1 = 70, ///< Synth: Sound Variation FX: Exciter On/Off
SoundController2 = 71, ///< Synth: Harmonic Content FX: Compressor On/Off
SoundController3 = 72, ///< Synth: Release Time FX: Distortion On/Off
SoundController4 = 73, ///< Synth: Attack Time FX: EQ On/Off
SoundController5 = 74, ///< Synth: Brightness FX: Expander On/Off
SoundController6 = 75, ///< Synth: Decay Time FX: Reverb On/Off
SoundController7 = 76, ///< Synth: Vibrato Rate FX: Delay On/Off
SoundController8 = 77, ///< Synth: Vibrato Depth FX: Pitch Transpose On/Off
SoundController9 = 78, ///< Synth: Vibrato Delay FX: Flange/Chorus On/Off
SoundController10 = 79, ///< Synth: Undefined FX: Special Effects On/Off
GeneralPurposeController5 = 80,
GeneralPurposeController6 = 81,
GeneralPurposeController7 = 82,
GeneralPurposeController8 = 83,
PortamentoControl = 84,
// CC85 to CC90 undefined
Effects1 = 91, ///< Reverb send level
Effects2 = 92, ///< Tremolo depth
Effects3 = 93, ///< Chorus send level
Effects4 = 94, ///< Celeste depth
Effects5 = 95, ///< Phaser depth
DataIncrement = 96,
DataDecrement = 97,
NRPNLSB = 98, ///< Non-Registered Parameter Number (LSB)
NRPNMSB = 99, ///< Non-Registered Parameter Number (MSB)
RPNLSB = 100, ///< Registered Parameter Number (LSB)
RPNMSB = 101, ///< Registered Parameter Number (MSB)

// Channel Mode messages ---------------------------------------------------
AllSoundOff = 120,
ResetAllControllers = 121,
LocalControl = 122,
AllNotesOff = 123,
OmniModeOff = 124,
OmniModeOn = 125,
MonoModeOn = 126,
PolyModeOn = 127
};

struct RPN
{
enum RegisteredParameterNumbers
{
PitchBendSensitivity = 0x0000,
ChannelFineTuning = 0x0001,
ChannelCoarseTuning = 0x0002,
SelectTuningProgram = 0x0003,
SelectTuningBank = 0x0004,
ModulationDepthRange = 0x0005,
NullFunction = (0x7f << 7) + 0x7f,
};
};

// -----------------------------------------------------------------------------

/*! \brief Create an instance of the library attached to a serial port.
You can use HardwareSerial or SoftwareSerial for the serial port.
Example: MIDI_CREATE_INSTANCE(HardwareSerial, Serial2, midi2);
Then call midi2.begin(), midi2.read() etc..
*/
#define MIDI_CREATE_INSTANCE(Type, SerialPort, Name) \
midi::MidiInterface<Type> Name((Type&)SerialPort);

#if defined(ARDUINO_SAM_DUE) || defined(USBCON)
// Leonardo, Due and other USB boards use Serial1 by default.
#define MIDI_CREATE_DEFAULT_INSTANCE() \
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
#else
/*! \brief Create an instance of the library with default name, serial port
and settings, for compatibility with sketches written with pre-v4.2 MIDI Lib,
or if you don't bother using custom names, serial port or settings.
*/
#define MIDI_CREATE_DEFAULT_INSTANCE() \
MIDI_CREATE_INSTANCE(HardwareSerial, Serial, MIDI);
#endif

/*! \brief Create an instance of the library attached to a serial port with
custom settings.
@see DefaultSettings
@see MIDI_CREATE_INSTANCE
*/
#define MIDI_CREATE_CUSTOM_INSTANCE(Type, SerialPort, Name, Settings) \
midi::MidiInterface<Type, Settings> Name((Type&)SerialPort);

END_MIDI_NAMESPACE
Плата Arduino 2560 умеет быть миди устройством, если переставить перемычку на ней. Тогда она даже в системе отображается как миди устройство. В этом режиме достаточно работать просто миди командами.
Вложения
MIDI_Library.zip
Миди библиотека для платы Arduino 2560
(101.55 КБ) 96 скачиваний

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#2

Сообщение vd0 » 18.02.2018{, 00:55}

Повозился с миди блоком, видать сам не осилю, прошу помощи в исправлении ошибок. Никак не пойму как это правильно сделать в FLProg. Отдельно скетчем если делать то работает, а в FLProg не получается оформить.
Вложения
test_midi.flp
(883.47 КБ) 86 скачиваний

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#3

Сообщение vd0 » 18.02.2018{, 15:10}

Обнаружил один неприятный баг, секция DeclareSection не правильно обрабатывает MIDI_CREATE_DEFAULT_INSTANCE(); показывая что данная строка является ошибочной , но при этом данная строка должна строго быть под #include <MIDI.h> и на оборот, если вставить MIDI_CREATE_DEFAULT_INSTANCE(); в секцию SetupSection, flprog считает что это верно, генерируя не рабочий скетч, в котором нужно руками переставлять MIDI_CREATE_DEFAULT_INSTANCE(); под #include <MIDI.h>. тогда всё собирается. В секции setup достаточно просто иметь MIDI.begin();
СпойлерПоказать
Баг3.PNG
СпойлерПоказать
баг2.PNG
СпойлерПоказать
баг.PNG
баг.PNG (7.59 КБ) 2207 просмотров
Надеюсь в новой версии FlProg пофиксят это и может таки получится с миди блоком...
Последний раз редактировалось pan 18.02.2018{, 15:16}, всего редактировалось 1 раз.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

MIDI Блок

#4

Сообщение Сергей » 18.02.2018{, 20:45}

vd0, поздравляю, Вы нашли единомышленника. Есть у меня китайская игрушка на 48 клавиш кажись. Есть телефон с программой PerfectPiano. В этой проге есть возможность подключить USB MIDI устройство. Вот задумался над переделкой этой китайской игрушки на МИДИ инструмент. По схеме там клавиши считываются 8х8 (точно не помню). Такое считывание клавиатуры считаю категорически ТУПЫМ для хорошего инструмента (но этому простительно, его цена 15-20$). Поэтому однозначно буду ставить внутрь Мегу2560. Каждая клавиша на отдельный пин. Далее увидел у вас:
vd0 писал(а):
16.02.2018{, 10:12}
Плата Arduino 2560 умеет быть миди устройством, если переставить перемычку на ней. Тогда она даже в системе отображается как миди устройство.
Можно подробней? Может Вы имели ввиду HID-устройство?
Есть интерес посылать по ЮСБ миди команды.
Так же есть опыт и рабочий блок по подключению UNO через 3 пина и пару резисторов к ЮСБ. И скетч, которым УНка определяется как USB HID-устройства. Из ФЛПрог можно в компьютер посылать нажатие клавиш и перемещения курсора мыши.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#5

Сообщение vd0 » 19.02.2018{, 00:20}

для работы и отображения устройства в таком виде и режиме нужно прошить его специальным загрузчиком и убрать вот эту перемычку. С перемычкой оно работает через юсб и определяется на COM порт. Если убрать то как на скриншоте. Однако сейчас испытываю некоторые трудности именно с оформлением миди блока в flprog. С братом делаем барабанную устрановку. Всё заработало, кроме миди блока в flprog, с его кодом до сих пор возимся.
СпойлерПоказать
IMG_20140214_154114.jpg
IMG_20140214_154001.jpg
мидидрам.PNG
мидидрам.PNG (20.15 КБ) 2155 просмотров
Последний раз редактировалось vd0 19.02.2018{, 00:22}, всего редактировалось 1 раз.

aidar_i
Полковник
Сообщения: 3144
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 679
Откуда: Уфа
Имя: Айдар
Контактная информация:

MIDI Блок

#6

Сообщение aidar_i » 19.02.2018{, 00:22}

vd0 писал(а):
18.02.2018{, 15:10}
секция DeclareSection не правильно обрабатывает MIDI_CREATE_DEFAULT_INSTANCE();
Если так попробовать?
#include <MIDI.h>
#define MIDI_CREATE_DEFAULT_INSTANCE()
И поставить галочку использовать один раз.
Последний раз редактировалось aidar_i 19.02.2018{, 00:26}, всего редактировалось 1 раз.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#7

Сообщение vd0 » 19.02.2018{, 00:24}

нет , макросом не пойдёт, тут проблема в том что flprog изначально не имеет миди поддержки. И специфика миди библиотеки требует строго под #include <MIDI.h> . Но DeclareSection так не считает. Я последние 3 дня с этим воюю, для отладки секции кода приходится в скетче его руками на своё место переставлять, что порядком уже поднадоело. В данным момент добились посылки миди команд, но почему то пока не передаёт номер ноты.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#8

Сообщение vd0 » 19.02.2018{, 00:34}

примерная конструкция на чайна тарелку, получаем сигнал от датчика china2, если аналоговый сигнал от china2 > china2_sens(чувствительность датчика). То делаем посылку команды с входящими параметрами.
СпойлерПоказать
china2midi.PNG

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

MIDI Блок

#9

Сообщение Сергей » 19.02.2018{, 01:03}

vd0,
vd0 писал(а):
19.02.2018{, 00:20}
для работы и отображения устройства в таком виде и режиме нужно прошить его специальным загрузчиком и убрать вот эту перемычку
Еще подробней плиз. Выложите сюда этот загрузчик... Ну, короче опишите процесс замены загрузчика, что бы я время не тратил на поиски, а я пока займусь блоком.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#10

Сообщение vd0 » 19.02.2018{, 01:40}

Онлайн сборка загрузчика тут. (Желательно использовать хром браузер на IE не работает).
Выбираем просто модель Uno или Mega. Device Name и Manufacturer произвольные, PID не трогаем. Нажимаем Compile и сохраняем готовый загрузчик. Вот исходники, если нужно.
Далее скачиваем Atmel Flip тут.
и заливаем загрузчик , предварительно выбрав свой чип.
СпойлерПоказать
1.PNG
2.PNG
В поле "Operations flow", находящемся слева под кнопками подключения и выбора устройства галочки поставить все.
СпойлерПоказать
op_flow.PNG
op_flow.PNG (4.92 КБ) 2140 просмотров
Далее жмём "File" -> "Load HEX file" и выбираем файл загрузчика. После этого остаётся только в том же поле "Operations Flow" нажать кнопку "RUN". По окончании процесса прошивки, а пройдёт он быстро, в правом нижнем углу проверить наличие галки на "Reset" возле кнопки "Start Applcation", которую и нажимаем.
После этого устройство можно будет отключить и подключить заново. Без перемычки на пинах "MOSI2" -> "GND" оно будет определяться как midi устройство с заданными вами vendor ID(VID) и product ID(PID). Для работы платы в штатном режиме нужно поставить эту перемычку.

ВНИМАНИЕ!!!
Загрузчик тестировался мною только на чипе Atmega 16U2. Совместимость с другими чипами не проверял. Имеем только 16u2.
Вложения
3.PNG

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

MIDI Блок

#11

Сообщение Сергей » 19.02.2018{, 01:50}

vd0,
блин, это только на тех платах, у которых на ЮСБ интерфейсе стоит атмелка. У меня все платы с FTDI микросхемами.
Похоже, в моем случае, надо брать две дуньки. Одну прошивать как ЮСБ интерфейс для второй (Меги).
Я поищу прошивку для ардуинки, которая может (на любых трех пинах подключенных напрямую в юсб) определить ее как USB MIDI.
С имитацией клавы и мышки (USB HID) получалось.

Наверно пожертвую одним юсб юартом, они кажись на атмелах. Завтра попробую.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#12

Сообщение vd0 » 19.02.2018{, 02:24}

для вашего случая где-то видел статью про ftdi tricks. у вас стоит микруха ft232rl? для неё должна быть прошивка под юсб-миди переходник. Но дело в том что эта микруха не позволит использовать устройство поочерёдно как юсб или ком-порт. её придётся каждый раз отшивать заново для обновления прошивки на меге. Либо сделать переходник на PIC контроллере и транслировать всё через serial. правда и этом случае подключение к телефону даст сомнительный результат ибо нагрузка на USB шину телефона возрастёт. Это всё очень неудобно))
Если же вам использование телефона не критично, то и прошивать ничего не нужно. Для тестов сойдёт и что-то типа hairless-midiserial. В этом случае будет слышно задержку больше 10мс. И для нормальной реализации задачи с миди-клавиатурой так же понадобится блок для FRS-датчиков. С ними реализуется передача velocity и функция aftertouch, без которых, по хорошему, клавиатура так игрушкой и останется.
лучше будет обзавестись платой Mega2560 R3. Остерегайтесь подделок. о продавцах я вообще молчу.. даже в инете с ревизиями путаница дикая, но на третьей ревизии нашей платы должен стоять чип 16u2. Это официальная информация от производителя.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

MIDI Блок

#13

Сообщение Сергей » 19.02.2018{, 02:32}

vd0, засада. Думал у меня есть
frame.jpg
на Атмелах, а там CP2102.

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#14

Сообщение vd0 » 19.02.2018{, 02:56}

кстати... чуть не забыл))
Сергей писал(а):
18.02.2018{, 20:45}
vd0, поздравляю, Вы нашли единомышленника. Есть у меня китайская игрушка на 48 клавиш кажись...
тут вы совершенно правы)
попутно я делаю ещё и миди-клавиатуру на 61 клавишу на базе старого синтезатора Casio, который ничем не лучше подобных китайских игрушек, но мне повезло немного меньше ибо используется stm32f103c8t6
Есть телефон с программой PerfectPiano. В этой проге есть возможность подключить USB MIDI устройство. Вот задумался над переделкой этой китайской игрушки на МИДИ инструмент.
скажем так, вас эта программа не сильно порадует) впрочем я не уверен что вам стоит говорить о синтезаторах на ПК(чего один только KONTAKT5 стоит...) думаю вы о них и так знаете)
По схеме там клавиши считываются 8х8 (точно не помню). Такое считывание клавиатуры считаю категорически ТУПЫМ для хорошего инструмента (но этому простительно, его цена 15-20$). Поэтому однозначно буду ставить внутрь Мегу2560. Каждая клавиша на отдельный пин.
у меня тоже 8х8, но 61клавиша(5октав), но хороший инструмент надо ещё сделать. А хороший инструмент в нашем с вами случае так же должен ещё и имитировать хорошую механику(хотя бы полувзвешенную) и быть чувствительным к скорости нажатия клавиш(velocity) и уметь aftertouch. тут понадобится либо целая куча датчиков холла, либо один FSR датчик, но длинный и ленточный. И использовать мегу для этого совсем необязательно) есть же 74HC595. C регистрами и уно подойдёт.

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

MIDI Блок

#15

Сообщение Сергей » 19.02.2018{, 03:13}

vd0 писал(а):
19.02.2018{, 02:56}
вас эта программа не сильно порадует)
почему? есть опыт использования?
Вообще я не музыкант (как кто то писал в интернете я аккордов не знаю, но зато паять умею)) ), думал ребенку пианинку переделать что б к мобильному девайсу подключить и пусть играется. Там звук по лучше чем на китайской игрушке.
А с тем железом, что имею на руках, получится только к ПК ардуинку подключить, и по компорту гнать ноты. Но неохота еще кучу программ запускать, которые будут с компорта данные преобразовывать.
Хотя, на свежую голову подумаю, может на стороне компа поставить ардуинку с блутуз модулем, а в игрушку аналогичную связку...

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#16

Сообщение vd0 » 19.02.2018{, 03:29}

скорее есть опыт использования DAW и VST на более-менее нормальном оборудовании(пусть хоть и не без участия самодельного, в том числе и лампового). Ребёнка к пианинке подключить эт хорошо))) но более хороший результат будет если и пианинку хорошо подключить))
То есть хороший звук надо) а тут по классике жанра -- Creative SB Live как минимум+ASIO4All(дёшево и сердито) и какие-нибудь Sven BF21 и Kontakt 5 с кучей библиотек. Такая конфигурация уж точно даст результат получше чем у китайской игрушки)))

Отправлено спустя 19 минут 16 секунд:
Если так попробовать?
#include <MIDI.h>
#define MIDI_CREATE_DEFAULT_INSTANCE();

Директива #define определяет идентификатор и последовательность символов, которой будет за­мещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор так­же называется именем макроса, а процесс замещения называется подстановкой макроса. Стандар­тный вид директивы следующий:

#define имя_макроса последовательность_символов

Обратим внимание, что в данном операторе отсутствует точка с запятой. Между идентификато­ром и последовательностью символов может быть любое число пробелов. Макрос завершается только переходом на новую строку.

Например, если необходимо использовать TRUE для значения 1, a FALSE для 0 то можно объявить следующие два макроса:

#define TRUE 1
#define FALSE 0

В результате, если компилятор обнаружит в тексте программы TRUE или FALSE, то он заменит их на 1 и 0 соответственно. А у нас другая ситуация, MIDI_CREATE_DEFAULT_INSTANCE(); вот пример применения
СпойлерПоказать
#include <MIDI.h>

// Created and binds the MIDI interface to the default hardware Serial port
MIDI_CREATE_DEFAULT_INSTANCE();

void setup()
{
MIDI.begin(MIDI_CHANNEL_OMNI); // Listen to all incoming messages
}

void loop()
{
// Send note 42 with velocity 127 on channel 1
MIDI.sendNoteOn(42, 127, 1);

// Read incoming messages
MIDI.read();
}
из которого следует что это объявляется в DeclareSection, перед Setup и loop. О проблеме запихивания ногами миди инстанса описал выше))

Аватара пользователя
vd0
Рядовой
Сообщения: 44
Зарегистрирован: 16.02.2018{, 08:56}
Репутация: 0
Имя: Дмитрий

MIDI Блок

#17

Сообщение vd0 » 21.02.2018{, 17:40}

Вот это чудо пытаемся воскресить, имеем полностью рабочую механику. Теперь пытаемся прикрутить ардуиновские мозги :)
СпойлерПоказать
синт.jpg

Аватара пользователя
Kotafey
Лейтенант
Сообщения: 311
Зарегистрирован: 18.07.2018{, 15:03}
Репутация: 21
Откуда: Геленджик
Имя: Константин

MIDI Блок

#18

Сообщение Kotafey » 05.01.2020{, 13:45}

vd0 писал(а):
21.02.2018{, 17:40}
Вот это чудо пытаемся воскресить, имеем полностью рабочую механику. Теперь пытаемся прикрутить ардуиновские мозги :)
СпойлерПоказать
синт.jpg
Добрый день. Как успехи? Или забросили?

Ответить

Вернуться в «Разработка пользовательских блоков»