Files
2026-03-10 16:51:02 +08:00

111 lines
1.9 KiB
C++

#include "dl_midi.h"
#if DL_PLATFORM != DL_PLATFORM_ANDROID
#include "io/dl_log.h"
#include <RtMidi.h>
namespace dl
{
Midi* g_midi;
class MidiImp
{
public:
RtMidiIn* _in;
RtMidiOut* _out;
MidiImp() :
_in{ nullptr },
_out{ nullptr }
{
//try {
// _out = new RtMidiOut;
// std::vector<unsigned char> message;
//
// // Check available ports.
// unsigned int nPorts = _out->getPortCount();
// if (nPorts == 0) {
// std::cout << "No ports available!\n";
// goto cleanup;
// }
// // Open first available port.
// _out->openPort(0);
// // Send out a series of MIDI messages.
// // Program change: 192, 5
// message.push_back(192);
// message.push_back(5);
// _out->sendMessage(&message);
// // Control Change: 176, 7, 100 (volume)
// message[0] = 176;
// message[1] = 7;
// message.push_back(100);
// _out->sendMessage(&message);
// // Note On: 144, 64, 90
//
// /*while (true)
// {
// message[0] = 144;
// message[1] = 64;
// message[2] = 91;
// _out->sendMessage(&message);
// std::this_thread::sleep_for(std::chrono::milliseconds(500));
// message[0] = 128;
// message[1] = 70;
// message[2] = 40;
// _out->sendMessage(&message);
// std::this_thread::sleep_for(std::chrono::milliseconds(500));
// }*/
//
// //Sleep(500); // Platform-dependent ... see example in tests directory.
// // Note Off: 128, 64, 40
//
// // Clean up
//cleanup:
// //delete _out;
// int x = 3;
//}
//catch (RtMidiError& error) {
// log_err("{}", error.getMessage());
//}
}
~MidiImp()
{
delete _in;
delete _out;
}
};
Midi::Midi()
{
_imp = new MidiImp;
}
Midi::~Midi()
{
delete _imp;
}
void Midi::Play(BufferView buf)
{
_imp->_out->sendMessage((unsigned char*)buf.data(), buf.size());
}
void Midi::PlayC()
{
/*unsigned char
_imp->_out->sendMessage(,);*/
}
}
#else
#endif