asio.hpp 4.3 KB

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