File: asio.hpp

package info (click to toggle)
ares 134%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 34,680 kB
  • sloc: cpp: 338,717; ansic: 89,036; sh: 52; makefile: 27
file content (163 lines) | stat: -rw-r--r-- 4,420 bytes parent folder | download | duplicates (3)
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;
};