---
title: sysex-daw-tooling
desc: Практичний арсенал для роботи з SysEx — Bitwig, SysEx Librarian, sendmidi/receivemidi, python-rtmidi та Node.js midi, і найчастіша пастка з фільтрацією SysEx у бібліотеках.
locked: false
order: 13
section: music
cycle: sysex
featured: false
---

# SysEx в DAW та тулінгу

Цикл «Анатомія SysEx»: [1. Анатомія SysEx](/music/sysex-anatomy/) · [2. Yamaha DX7](/music/sysex-dx7/) · [3. Roland/Korg/Sequential/Circuit Tracks](/music/sysex-vendors/) · **4. DAW та тулінг** · [5. MIDI-CI та MIDI 2.0](/music/sysex-midi-ci/)

Знати протокол — половина справи. Друга половина — реальний pipeline: DAW, CLI-утиліти, бібліотеки.

## Bitwig Studio

У Piano Roll правий клік дозволяє вставити SysEx-подію — вона відправиться перед нотами в момент відтворення кліпу, зручно для ініціалізації пристрою перед патчем. У налаштуваннях MIDI-порту перевірте, що увімкнено «System Exclusive» — деякі порти фільтрують його за замовчуванням. Прийом SysEx у Bitwig можливий, але без вбудованого парсера — зазвичай перехоплюють паралельно зовнішнім інструментом.

## SysEx Librarian і MIDI Monitor (Mac)

[SysEx Librarian](https://www.snoize.com/SysExLibrarian/) — безкоштовна drag-and-drop утиліта: список .syx файлів, кнопки Play/Record. Відправити DX7 bulk dump у FM8, записати dump з Circuit Tracks, вислати патч перед виступом.

[MIDI Monitor](https://www.snoize.com/MIDIMonitor/) від того ж автора показує всі MIDI-повідомлення в реальному часі включно з SysEx у hex — незамінний для відладки.

## sendmidi / receivemidi

CLI-утиліти [Geert Bevin](https://github.com/gbevin/SendMIDI), стандарт для MIDI-автоматизації:

```bash
brew install sendmidi receivemidi

sendmidi list
sendmidi dev 'Circuit Tracks' syx F0 00 20 29 01 64 40 00 F7
sendmidi dev 'DX7' syxf dx7_bulk.syx

receivemidi dev 'Circuit Tracks' syxf backup.syx
```

## Python — rtmidi

```python
import rtmidi, time

midi_out = rtmidi.MidiOut()
midi_in = rtmidi.MidiIn()
midi_out.open_port(0)
midi_in.open_port(0)
midi_in.ignore_types(sysex=False)  # без цього SysEx мовчки відкидається

midi_out.send_message([0xF0, 0x00, 0x20, 0x29, 0x01, 0x64, 0x40, 0x00, 0xF7])
time.sleep(0.5)
while True:
    msg = midi_in.get_message()
    if msg is None:
        break
    data, delta = msg
    if data[0] == 0xF0:
        print('SysEx received:', len(data), 'bytes')
```

`pip install python-rtmidi`

## Node.js — midi

```javascript
const midi = require('midi')
const output = new midi.Output()
const input = new midi.Input()
output.openPort(0)
input.openPort(0)
input.ignoreTypes(false, false, false)  // sysex, timing, activeSensing

input.on('message', (deltaTime, message) => {
  if (message[0] === 0xF0) console.log('SysEx:', message.length, 'bytes')
})
output.sendMessage([0xF0, 0x00, 0x20, 0x29, 0x01, 0x64, 0x40, 0x00, 0xF7])
```

`npm install midi`

## Найчастіша пастка

Більшість MIDI-бібліотек за замовчуванням фільтрують SysEx. Якщо повідомлення не приходить — перше, що перевіряти: `ignore_types(sysex=False)` у Python, `ignoreTypes(false, false, false)` у Node.js. Це та година дебагінгу, яку проходить кожен, хто вперше пише MIDI-код.

## Further reading

- [sendmidi/receivemidi GitHub](https://github.com/gbevin/SendMIDI)
- [python-rtmidi docs](https://spotlightkid.github.io/python-rtmidi/)
- [Node.js midi package](https://github.com/justinlatimer/node-midi)

<div class="ps">
<div class="ps-label">P.S. — той самий curl, інший протокол</div>

`sendmidi` за архітектурою — це `curl` для MIDI: universal CLI client для протоколу, синтаксис навіть схожий (`sendmidi dev name command args`). Автор, Geert Bevin, паралельно розробляв Linnstrument (MPE-контролер Roger Linn Design) і сидів у комітеті MIDI 2.0 — тобто писав найпопулярнішу CLI-утиліту для SysEx 1.0, одночасно проєктуючи специфікацію, що робить частину цього застарілою. Нормальне становище для інженера.

</div>
