midi.zip/midi.h
#pragma once
#include <string>
#include <memory>
#include <vector>
#include <boost/optional.hpp>
#include <boost/filesystem.hpp>
#pragma comment (lib, "midi.lib")
enum {
ERR_NON,
ERR_FORMAT
};
class MidiData {
public:
int time;
unsigned char stat;
unsigned char param1;
unsigned char param2;
std::vector<unsigned char> param3;
};
class MidiHead {
public:
char type[4];
int len;
unsigned short format;
unsigned short num;
unsigned short time;
};
class MidiTrack {
public:
char type[4];
unsigned int len;
std::vector<MidiData> dataList;
double time;
};
class Midi {
public:
std::unique_ptr<MidiHead> head;
std::unique_ptr<MidiTrack[]> track;
};
void SetAppDir(void);
void MidiPlay(const Midi &midi, const double start, const int deviceId, const unsigned int volume, const double speed);
std::unique_ptr<Midi> loadmidi(const char * const fname);
boost::optional<std::string> getDeviceInfoString(const unsigned int deviceId, const unsigned int indentCount = 0);
void showMidiDevice();
bool isMidiDeviceNone();
boost::optional<unsigned int> getDeviceId();
void savemidi(const boost::filesystem::path &path, const Midi &midi);