MyTetra Share
Делитесь знаниями!
Библиотеки для реалтаймовой работы с MIDI в Linux
Время создания: 22.09.2024 23:28
Раздел: Компьютер - Linux - Звук и аудио - MIDI
Запись: xintrea/mytetra_syncro/master/base/17270368880lvmzyfm59/text.html на raw.github.com

Библиотека для Python alsaseq


В Python существует бмблиотека alsaseq. Раньше она была доступна из пакета alsa-python, затем стала устанавливаться из пакета python3-pyalsa.


Адекватной официальной документации на библиотеку найти не удалось. Имеется только репозитарий на GitHub: https://github.com/ppaez/alsaseq. Документации вместе с пакетом так же не идет.



Библиотека для Python alsa_midi


Для Python есть более документированная библиотека - alsa_midi. Ее официальный сайт:


https://python-alsa-midi.readthedocs.io/en/latest/usage.html


Основная работа библиотеки идет через клиента, создаваемого как экземпляр класса SequencerClient. Чтобы получать/отправлять события из/в MIDI-порт, вначале надо получить порт и приконнектиться клиентом в соответствующем режиме (Port.connect_to() или Port.connect_from()).



Библиотека RtMidi для C++


Для языка C++ создана библиотека RtMidi (пакет может называться librtmidi-dev). Аббревиатура Rt означает Real Time. Библиотека подключается следующим образом:



#include "RtMidi.h"



Минимальный пример выглядит так:



#include <iostream>

#include <cstdlib>

#include "RtMidi.h"


int main()

{

RtMidiIn *midiin = 0;

RtMidiOut *midiout = 0;

// RtMidiIn constructor

try {

midiin = new RtMidiIn();

}

catch ( RtMidiError &error ) {

error.printMessage();

exit( EXIT_FAILURE );

}


// Check inputs.

unsigned int nPorts = midiin->getPortCount();

std::cout << "\nThere are " << nPorts << " MIDI input sources available.\n";

std::string portName;

for ( unsigned int i=0; i<nPorts; i++ ) {

try {

portName = midiin->getPortName(i);

}

catch ( RtMidiError &error ) {

error.printMessage();

goto cleanup;

}


std::cout << " Input Port #" << i+1 << ": " << portName << '\n';

}


// RtMidiOut constructor

try {

midiout = new RtMidiOut();

}

catch ( RtMidiError &error ) {

error.printMessage();

exit( EXIT_FAILURE );

}


// Check outputs.

nPorts = midiout->getPortCount();

std::cout << "\nThere are " << nPorts << " MIDI output ports available.\n";

for ( unsigned int i=0; i<nPorts; i++ ) {

try {

portName = midiout->getPortName(i);

}

catch (RtMidiError &error) {

error.printMessage();

goto cleanup;

}


std::cout << " Output Port #" << i+1 << ": " << portName << '\n';

}

std::cout << '\n';


// Clean up

cleanup:

delete midiin;

delete midiout;

return 0;

}



Документация доступна по ссылке:
https://www.music.mcgill.ca/~gary/rtmidi/


Так же существует биндинг для Python, находящийся в пакете python3-rtmidi.


 
MyTetra Share v.0.65
Яндекс индекс цитирования