Использование Teensy 3.5 (Arduino) для одновременной генерации USB и аппаратных MIDI-сообщений.
В настоящее время пытаюсь заставить крошечный 3.5-дюймовый компьютер спамить серию заметок в цикле через USB и аппаратный последовательный порт, и я почти уверен, что он с этим справится.
У меня есть схема MIDI, настроенная в соответствии со спецификациями, приведенными здесь: https://www.pjrc.com/teensy/td_libs_MIDI.html И в настоящее время он воспроизводит циклическую группировку нот через массив, встроенный в Ableton через 5-контактную схему DIN, подключенную к универсальному преобразователю MIDI 5-контактный DIN -> USB.
#include <MIDI.h>
#define HWSerial Serial1
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
const int channel = 1;
void setup() {
HWSerial.begin(9600);
MIDI.begin();
}
void loop() {
int note;
for (note=10; note <= 127; note++) {
MIDI.sendNoteOn(note, 100, channel);
delay(200);
MIDI.sendNoteOff(note, 100, channel);
}
delay(2000);
}
Я склонен полагать, что при работе с последовательным выходом USB на Teensy вы просто называете порт «Serial», а для других — «Serial1», «Serial2» и т. д.
Я пробовал использовать последовательный порт вместо аргументов в MIDI_CREATE_INSTANCE и также пробовал использовать MIDI_CREATE_DEFAULT_INSTANCE, который должен выполнить эту настройку на последовательном порте по умолчанию, которым, как я предполагаю, является USB? (Это отлично сработало на моей настройке Arduino Mega, где я использовал чип 16u2 в качестве преобразователя последовательного порта в USB-MIDI в соответствии с этим методом: https://github.com/ddiakopoulos/hiduino)
Я просто немного озадачен, так как мне удалось скомпилировать код с использованием экземпляра по умолчанию, и он отображается как MIDI-устройство в диспетчере устройств Windows, а также в Ableton, когда я устанавливаю Тип USB: Последовательный + MIDI в раскрывающемся списке инструментов Arduinos, но не выводит никаких нот :(
Может ли кто-нибудь помочь мне заставить это работать?
Сейчас я играю с:
#include <MIDI.h>
const int channel = 1;
void setup()
{
}
void loop()
{
int note;
for (note=20; note <= 63; note++) // Диапазон был изменен с 10:127 для сохранения барабанных перепонок.
{
usbMIDI.sendNoteOn(note, 100, channel);
delay(200);
usbMIDI.sendNoteOff(note, 100, channel);
}
delay(2000);
}
но получить
C:\Users\Jamie\AppData\Local\Temp\arduino_build_144363/..\arduino_cache_283435\core\core_teensy_avr_teensy35_usb_serialmidi,speed_120,opt_o2std,keys_en-us_4939f5412a75a8560acb0f9e98268f02.a(pins_teensy.c.o): In function `_init_Teensyduino_internal_':
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3/pins_teensy.c:582: undefined reference to `analog_init'
collect2.exe: error: ld returned 1 exit status
Error compiling for board Teensy 3.5.
а если я попробую включить 'usbMIDI', то получу
F:\GigaTech\MMMM_Beta_Code\debug\TeensyUSBMIDILoopTest\TeensyUSBMIDILoopTest.ino:1:21: fatal error: usbMIDI.h: No such file or directory
compilation terminated.
Error compiling for board Teensy 3.5.
хотя midiUSB определенно установлен :S
-----------------------------ПРОДОЛЖЕНИЕ ----------------------------
Итак, теперь у меня есть рабочий скетч для USB и аппаратной MIDI-связи, но я не могу заставить их работать одновременно. Мой код для оборудования показан выше, а метод USB — ниже:
#include <MIDI.h>
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
const int channel = 1;
void setup() {
MIDI.begin();
}
void loop() {
int note;
for (note=10; note <= 127; note++)
{
usbMIDI.sendNoteOn(note, 100, channel);
delay(200);
usbMIDI.sendNoteOff(note, 100, channel);
}
delay(2000);
}
Я предполагал, что можно сделать что-то вроде этого:
#include <MIDI.h>
#define HWSerial Serial1
MIDI_CREATE_INSTANCE(HardwareSerial, Serial, MIDI); // 5-контактный выход DIN
const int channel = 1;
void setup()
{
HWSerial.begin(9600);
MIDI.begin();
}
void loop() {
int note;
for (note=20; note <= 63; note++) // Диапазон был изменен с 10:127 для сохранения барабанных перепонок.
{
usbMIDI.sendNoteOn(note, 100, channel);
MIDI.sendNoteOn(note, 100, channel);
delay(200);
usbMIDI.sendNoteOff(note, 100, channel);
MIDI.sendNoteOff(note, 100, channel);
}
delay(2000);
}
Но, похоже, это не работает. Код прекрасно компилируется и загружается, однако Ableton видит только MIDI-сообщения, поступающие через маленький USB-порт, а не через мой MIDI-приемник. Я задавался вопросом, связано ли это с тем, что оба они подключены к моему ПК через USB-порт, но это, конечно, не должно быть проблемой. Я также пробовал назначать USB и аппаратные MIDI-отправки на разные каналы, но безрезультатно.
Мне бы очень хотелось, чтобы они оба работали одновременно.
@GigaJoules, 👍0
2 ответа
Просто используйте usbMidi.
#include <MIDI.h>
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
const int channel = 1;
void setup() {
MIDI.begin();
}
void loop() {
int note;
for (note=10; note <= 127; note++) {
MIDI.sendNoteOn(note, 100, channel);
usbMIDI.sendNoteOn(note, 100, channel);
delay(200);
MIDI.sendNoteOff(note, 100, channel);
usbMIDI.sendNoteOff(note, 100, channel);
}
delay(2000);
}
Так что мне удалось заставить оба работать одновременно!
Похоже, для MIDI teensy через USB не требуется объявление экземпляра MIDI, и в моем коде была небольшая ошибка. Указанное объявление функции должно быть «Serial1», а не «Serial».
Рабочий код ниже! :)
#include <MIDI.h>
#define HWSerial Serial1
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI); // 5-контактный выход DIN
const int HWChannel = 2;
const int USBChannel = 1;
void setup()
{
HWSerial.begin(9600);
MIDI.begin();
}
void loop() {
int note;
for (note=20; note <= 63; note++) // Диапазон был изменен с 10:127 для сохранения барабанных перепонок.
{
usbMIDI.sendNoteOn(note, 100, USBChannel);
MIDI.sendNoteOn(note, 100, HWChannel);
delay(200);
usbMIDI.sendNoteOff(note, 100, USBChannel);
MIDI.sendNoteOff(note, 100, HWChannel);
}
delay(2000);
}
- Teensy 2.0 MIDI: количество нот в аккорде ограничено 6?
- Последовательная связь между Teensy и Teensy через USB-разъем
- Отправка MIDI CC на несколько миди-каналов
- Получить серийный номер или идентификатор контроллера USB-хоста с помощью Teensy или других HID устройств
- Teensy 2.0 устройство xinput usb
- Arduino Zero не распознается как MIDI-устройство через собственный USB-порт
- Как определить, какая скорость передачи данных установлена для виртуального COM-порта?
- ПК не распознает Arduino при работе с классом и библиотекой MIDIUSB