他人の空似自作物置場

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);