2 Steinberg Audio Stream I/O API
\r
3 (c) 1996, Steinberg Soft- und Hardware GmbH
\r
7 asio functions entries which translate the
\r
8 asio interface to the asiodrvr class methods
\r
12 #include "asiosys.h" // platform definition
\r
16 #include "asiodrvr.h"
\r
20 AsioDriver *theAsioDriver = 0;
\r
32 #include "windows.h"
\r
33 #include "iasiodrv.h"
\r
34 #include "asiodrivers.h"
\r
36 IASIO *theAsioDriver = 0;
\r
37 extern AsioDrivers *asioDrivers;
\r
39 #elif SGI || SUN || BEOS || LINUX
\r
40 #include "asiodrvr.h"
\r
41 static AsioDriver *theAsioDriver = 0;
\r
44 //-----------------------------------------------------------------------------------------------------
\r
45 ASIOError ASIOInit(ASIODriverInfo *info)
\r
47 #if MAC || SGI || SUN || BEOS || LINUX
\r
50 delete theAsioDriver;
\r
53 info->driverVersion = 0;
\r
54 strcpy(info->name, "No ASIO Driver");
\r
55 theAsioDriver = getDriver();
\r
58 strcpy(info->errorMessage, "Not enough memory for the ASIO driver!");
\r
59 return ASE_NotPresent;
\r
61 if(!theAsioDriver->init(info->sysRef))
\r
63 theAsioDriver->getErrorMessage(info->errorMessage);
\r
64 delete theAsioDriver;
\r
66 return ASE_NotPresent;
\r
68 strcpy(info->errorMessage, "No ASIO Driver Error");
\r
69 theAsioDriver->getDriverName(info->name);
\r
70 info->driverVersion = theAsioDriver->getDriverVersion();
\r
75 info->driverVersion = 0;
\r
76 strcpy(info->name, "No ASIO Driver");
\r
77 if(theAsioDriver) // must be loaded!
\r
79 if(!theAsioDriver->init(info->sysRef))
\r
81 theAsioDriver->getErrorMessage(info->errorMessage);
\r
83 return ASE_NotPresent;
\r
86 strcpy(info->errorMessage, "No ASIO Driver Error");
\r
87 theAsioDriver->getDriverName(info->name);
\r
88 info->driverVersion = theAsioDriver->getDriverVersion();
\r
91 return ASE_NotPresent;
\r
96 ASIOError ASIOExit(void)
\r
101 asioDrivers->removeCurrentDriver();
\r
103 delete theAsioDriver;
\r
110 ASIOError ASIOStart(void)
\r
113 return ASE_NotPresent;
\r
114 return theAsioDriver->start();
\r
117 ASIOError ASIOStop(void)
\r
120 return ASE_NotPresent;
\r
121 return theAsioDriver->stop();
\r
124 ASIOError ASIOGetChannels(long *numInputChannels, long *numOutputChannels)
\r
128 *numInputChannels = *numOutputChannels = 0;
\r
129 return ASE_NotPresent;
\r
131 return theAsioDriver->getChannels(numInputChannels, numOutputChannels);
\r
134 ASIOError ASIOGetLatencies(long *inputLatency, long *outputLatency)
\r
138 *inputLatency = *outputLatency = 0;
\r
139 return ASE_NotPresent;
\r
141 return theAsioDriver->getLatencies(inputLatency, outputLatency);
\r
144 ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity)
\r
148 *minSize = *maxSize = *preferredSize = *granularity = 0;
\r
149 return ASE_NotPresent;
\r
151 return theAsioDriver->getBufferSize(minSize, maxSize, preferredSize, granularity);
\r
154 ASIOError ASIOCanSampleRate(ASIOSampleRate sampleRate)
\r
157 return ASE_NotPresent;
\r
158 return theAsioDriver->canSampleRate(sampleRate);
\r
161 ASIOError ASIOGetSampleRate(ASIOSampleRate *currentRate)
\r
164 return ASE_NotPresent;
\r
165 return theAsioDriver->getSampleRate(currentRate);
\r
168 ASIOError ASIOSetSampleRate(ASIOSampleRate sampleRate)
\r
171 return ASE_NotPresent;
\r
172 return theAsioDriver->setSampleRate(sampleRate);
\r
175 ASIOError ASIOGetClockSources(ASIOClockSource *clocks, long *numSources)
\r
180 return ASE_NotPresent;
\r
182 return theAsioDriver->getClockSources(clocks, numSources);
\r
185 ASIOError ASIOSetClockSource(long reference)
\r
188 return ASE_NotPresent;
\r
189 return theAsioDriver->setClockSource(reference);
\r
192 ASIOError ASIOGetSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp)
\r
195 return ASE_NotPresent;
\r
196 return theAsioDriver->getSamplePosition(sPos, tStamp);
\r
199 ASIOError ASIOGetChannelInfo(ASIOChannelInfo *info)
\r
203 info->channelGroup = -1;
\r
204 info->type = ASIOSTInt16MSB;
\r
205 strcpy(info->name, "None");
\r
206 return ASE_NotPresent;
\r
208 return theAsioDriver->getChannelInfo(info);
\r
211 ASIOError ASIOCreateBuffers(ASIOBufferInfo *bufferInfos, long numChannels,
\r
212 long bufferSize, ASIOCallbacks *callbacks)
\r
216 ASIOBufferInfo *info = bufferInfos;
\r
217 for(long i = 0; i < numChannels; i++, info++)
\r
218 info->buffers[0] = info->buffers[1] = 0;
\r
219 return ASE_NotPresent;
\r
221 return theAsioDriver->createBuffers(bufferInfos, numChannels, bufferSize, callbacks);
\r
224 ASIOError ASIODisposeBuffers(void)
\r
227 return ASE_NotPresent;
\r
228 return theAsioDriver->disposeBuffers();
\r
231 ASIOError ASIOControlPanel(void)
\r
234 return ASE_NotPresent;
\r
235 return theAsioDriver->controlPanel();
\r
238 ASIOError ASIOFuture(long selector, void *opt)
\r
241 return ASE_NotPresent;
\r
242 return theAsioDriver->future(selector, opt);
\r
245 ASIOError ASIOOutputReady(void)
\r
248 return ASE_NotPresent;
\r
249 return theAsioDriver->outputReady();
\r