RtMidi 라이브러리를 사용하여 MIDI 인터페이스 만들기
11883 단어 RtMidiC++LinuxRaspberryPiMIDI
시리즈 카탈로그
처음에 설명한 바와 같이 언어는 C++이고 사용RtMidi 라이브러리입니다.
'Midi 인터페이스'는 출력과 입력 두 가지 유형으로 나뉘는데 운영체제가 식별하는'Midi 인터페이스'는
aconnect -l
에 열거할 수 있다.> aconnect -l
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
idi 인터페이스를 만들고 지정한 이름을 포함하는 인터페이스에 연결하는 클래스를 만듭니다.midi.hpp
#include <iostream>
#include "RtMidi.h"
enum struct MidiDirection {
IN,
OUT,
};
class MidiInterface {
private:
const char * name;
public:
MidiInterface(const char * interfaceName);
RtMidi * connect(std::string target, MidiDirection direction);
};
midi.cpp#include "midi.hpp"
MidiInterface::MidiInterface(const char * interfaceName) {
name = interfaceName;
}
RtMidi * MidiInterface::connect(std::string target, MidiDirection direction) {
char clientName[256] = "";
sprintf(clientName, "%s Midi %s Client", name, direction == MidiDirection::IN ? "Input" : "Output");
RtMidi * midi = direction == MidiDirection::IN ?
(RtMidi *)new RtMidiIn (RtMidi::UNSPECIFIED, clientName) :
(RtMidi *)new RtMidiOut(RtMidi::UNSPECIFIED, clientName);
unsigned int portCount = midi->getPortCount();
for (unsigned int i=0; i<portCount; i++) {
std::string portName = midi->getPortName(i).c_str();
std::string::size_type index = portName.find(target, 0);
if (index != std::string::npos) {
char portName[256] = "";
sprintf(portName, "%s Midi %s Port", name, direction == MidiDirection::IN ? "Input" : "Output");
midi->openPort(i, portName);
return midi;
}
}
return NULL;
}
aconnect -l
명령을 통해 Midi 인터페이스 간의 연결 상태를 확인할 수도 있습니다.create_midi_interface.cpp
#include <iostream>
#include "midi.hpp"
int main () {
MidiInterface * p = new MidiInterface("foobar");
p->connect("Midi Through", MidiDirection::OUT);
while (true) std::cin.getc();
exit(0);
}
$ aconnect -l
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
$ ./create_midi_interface.o &
$ aconnect -l
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
Connected From: 128:0[real:0]
client 128: 'foobar Midi Output Client' [type=user,pid=1528]
0 'foobar Midi Output Port'
Connecting To: 14:0[real:0]
새로운 Foobar Midi Output Client의 Foobar Midi Output Port가 만들어지고 포트 14:0(Midi Through)과 연결되는 것을 볼 수 있습니다.해설
별거 없어요.
이전
다음
Raspberry Pi와 MIDI 인터페이스를 통한 장치 개발
표준 블렌드 형식 분석 및 MIDI 인터페이스 가져오기
Reference
이 문제에 관하여(RtMidi 라이브러리를 사용하여 MIDI 인터페이스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ixsiid/items/dfd093732d05260ed174
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(RtMidi 라이브러리를 사용하여 MIDI 인터페이스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ixsiid/items/dfd093732d05260ed174텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)