1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
using ASIOError = long;
enum : long {
ASE_OK = 0,
ASE_SUCCESS = 0x3f4847a0,
ASE_NotPresent = -1000,
ASE_HWMalfunction,
ASE_InvalidParameter,
ASE_InvalidMode,
ASE_SPNotAdvancing,
ASE_NoClock,
ASE_NoMemory,
};
using ASIOBool = long;
enum : long {
ASIOFalse = 0,
ASIOTrue = 1,
};
using ASIOSampleRate = double;
using ASIOSamples = long long int;
using ASIOTimeStamp = long long int;
using ASIOSampleType = long;
enum : long {
ASIOSTInt16MSB = 0,
ASIOSTInt24MSB = 1,
ASIOSTInt32MSB = 2,
ASIOSTFloat32MSB = 3,
ASIOSTFloat64MSB = 4,
ASIOSTInt32MSB16 = 8,
ASIOSTInt32MSB18 = 9,
ASIOSTInt32MSB20 = 10,
ASIOSTInt32MSB24 = 11,
ASIOSTInt16LSB = 16,
ASIOSTInt24LSB = 17,
ASIOSTInt32LSB = 18,
ASIOSTFloat32LSB = 19,
ASIOSTFloat64LSB = 20,
ASIOSTInt32LSB16 = 24,
ASIOSTInt32LSB18 = 25,
ASIOSTInt32LSB20 = 26,
ASIOSTInt32LSB24 = 27,
ASIOSTDSDInt8LSB1 = 32,
ASIOSTDSDInt8MSB1 = 33,
ASIOSTDSDInt8NER8 = 40,
ASIOSTLastEntry,
};
struct ASIOBufferInfo {
ASIOBool isInput;
long channelNum;
void* buffers[2];
};
struct ASIOChannelInfo {
long channel;
ASIOBool isInput;
ASIOBool isActive;
long channelGroup;
ASIOSampleType type;
char name[32];
};
struct ASIOClockSource {
long index;
long associatedChannel;
long associatedGroup;
ASIOBool isCurrentSource;
char name[32];
};
struct ASIOTimeInfo {
double speed;
ASIOTimeStamp systemTime;
ASIOSamples samplePosition;
ASIOSampleRate sampleRate;
unsigned long flags;
char reserved[12];
};
enum : unsigned long {
kSystemTimeValid = 1 << 0,
kSamplePositionValid = 1 << 1,
kSampleRateValid = 1 << 2,
kSpeedValid = 1 << 3,
kSampleRateChanged = 1 << 4,
kClockSourceChanged = 1 << 5,
};
struct ASIOTimeCode {
double speed;
ASIOSamples timeCodeSamples;
unsigned long flags;
char future[64];
};
enum : unsigned long {
kTcValid = 1 << 0,
kTcRunning = 1 << 1,
kTcReverse = 1 << 2,
kTcOnspeed = 1 << 3,
kTcStill = 1 << 4,
kTcSpeedValid = 1 << 8,
};
struct ASIOTime {
long reserved[4];
ASIOTimeInfo timeInfo;
ASIOTimeCode timeCode;
};
struct ASIOCallbacks {
auto (*bufferSwitch)(long doubleBufferIndex, ASIOBool directProcess) -> void;
auto (*sampleRateDidChange)(ASIOSampleRate sampleRate) -> void;
auto (*asioMessage)(long selector, long value, void* message, double* optional) -> long;
auto (*bufferSwitchTimeInfo)(ASIOTime* parameters, long doubleBufferIndex, ASIOBool directProcess) -> ASIOTime*;
};
enum : long {
kAsioSelectorSupported = 1,
kAsioEngineVersion,
kAsioResetRequest,
kAsioBufferSizeChange,
kAsioResyncRequest,
kAsioLatenciesChanged,
kAsioSupportsTimeInfo,
kAsioSupportsTimeCode,
kAsioMMCCommand,
kAsioSupportsInputMonitor,
kAsioSupportsInputGain,
kAsioSupportsInputMeter,
kAsioSupportsOutputGain,
kAsioSupportsOutputMeter,
kAsioOverload,
kAsioNumMessageSelectors,
};
struct IASIO : public IUnknown {
virtual auto init(void* systemHandle) -> ASIOBool;
virtual auto getDriverName(char* name) -> void;
virtual auto getDriverVersion() -> long;
virtual auto getErrorMessage(char* error) -> void;
virtual auto start() -> ASIOError;
virtual auto stop() -> ASIOError;
virtual auto getChannels(long* inputChannels, long* outputChannels) -> ASIOError = 0;
virtual auto getLatencies(long* inputLatency, long* outputLatency) -> ASIOError = 0;
virtual auto getBufferSize(long* minimumSize, long* maximumSize, long* preferredSize, long* granularity) -> ASIOError = 0;
virtual auto canSampleRate(ASIOSampleRate sampleRate) -> ASIOError = 0;
virtual auto getSampleRate(ASIOSampleRate* sampleRate) -> ASIOError = 0;
virtual auto setSampleRate(ASIOSampleRate sampleRate) -> ASIOError = 0;
virtual auto getClockSources(ASIOClockSource* clocks, long* sources) -> ASIOError = 0;
virtual auto setClockSource(long reference) -> ASIOError = 0;
virtual auto getSamplePosition(ASIOSamples* samplePosition, ASIOTimeStamp* timeStamp) -> ASIOError = 0;
virtual auto getChannelInfo(ASIOChannelInfo* information) -> ASIOError = 0;
virtual auto createBuffers(ASIOBufferInfo* bufferInformation, long channels, long bufferSize, ASIOCallbacks* callbacks) -> ASIOError = 0;
virtual auto disposeBuffers() -> ASIOError = 0;
virtual auto controlPanel() -> ASIOError = 0;
virtual auto future(long selector, void* optional) -> ASIOError = 0;
virtual auto outputReady() -> ASIOError = 0;
};
|