Files
jens 562920dd85 Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/asiosdk2@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
2014-07-19 07:44:42 +00:00

149 lines
3.7 KiB
C++
Executable File

/*
Steinberg Audio Stream I/O API
(c) 1999, Steinberg Soft- und Hardware GmbH
asiosmpl.h
test implementation of asio
*/
#ifndef _asiosmpl_
#define _asiosmpl_
#include "asiosys.h"
#define TESTWAVES 1
// when true, will feed the left input (to host) with
// a sine wave, and the right one with a sawtooth
enum
{
kBlockFrames = 256,
kNumInputs = 16,
kNumOutputs = 16
};
#if WINDOWS
#include "rpc.h"
#include "rpcndr.h"
#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include "ole2.h"
#endif
#include "combase.h"
#include "iasiodrv.h"
class AsioSample : public IASIO, public CUnknown
{
public:
AsioSample(LPUNKNOWN pUnk, HRESULT *phr);
~AsioSample();
DECLARE_IUNKNOWN
//STDMETHODIMP QueryInterface(REFIID riid, void **ppv) { \
// return GetOwner()->QueryInterface(riid,ppv); \
//}; \
//STDMETHODIMP_(ULONG) AddRef() { \
// return GetOwner()->AddRef(); \
//}; \
//STDMETHODIMP_(ULONG) Release() { \
// return GetOwner()->Release(); \
//};
// Factory method
static CUnknown *CreateInstance(LPUNKNOWN pUnk, HRESULT *phr);
// IUnknown
virtual HRESULT STDMETHODCALLTYPE NonDelegatingQueryInterface(REFIID riid,void **ppvObject);
#else
#include "asiodrvr.h"
//---------------------------------------------------------------------------------------------
class AsioSample : public AsioDriver
{
public:
AsioSample ();
~AsioSample ();
#endif
ASIOBool init (void* sysRef);
void getDriverName (char *name); // max 32 bytes incl. terminating zero
long getDriverVersion ();
void getErrorMessage (char *string); // max 128 bytes incl.
ASIOError start ();
ASIOError stop ();
ASIOError getChannels (long *numInputChannels, long *numOutputChannels);
ASIOError getLatencies (long *inputLatency, long *outputLatency);
ASIOError getBufferSize (long *minSize, long *maxSize,
long *preferredSize, long *granularity);
ASIOError canSampleRate (ASIOSampleRate sampleRate);
ASIOError getSampleRate (ASIOSampleRate *sampleRate);
ASIOError setSampleRate (ASIOSampleRate sampleRate);
ASIOError getClockSources (ASIOClockSource *clocks, long *numSources);
ASIOError setClockSource (long index);
ASIOError getSamplePosition (ASIOSamples *sPos, ASIOTimeStamp *tStamp);
ASIOError getChannelInfo (ASIOChannelInfo *info);
ASIOError createBuffers (ASIOBufferInfo *bufferInfos, long numChannels,
long bufferSize, ASIOCallbacks *callbacks);
ASIOError disposeBuffers ();
ASIOError controlPanel ();
ASIOError future (long selector, void *opt);
ASIOError outputReady ();
void bufferSwitch ();
long getMilliSeconds () {return milliSeconds;}
private:
friend void myTimer();
bool inputOpen ();
#if TESTWAVES
void makeSine (short *wave);
void makeSaw (short *wave);
#endif
void inputClose ();
void input ();
bool outputOpen ();
void outputClose ();
void output ();
void timerOn ();
void timerOff ();
void bufferSwitchX ();
double samplePosition;
double sampleRate;
ASIOCallbacks *callbacks;
ASIOTime asioTime;
ASIOTimeStamp theSystemTime;
short *inputBuffers[kNumInputs * 2];
short *outputBuffers[kNumOutputs * 2];
#if TESTWAVES
short *sineWave, *sawTooth;
#endif
long inMap[kNumInputs];
long outMap[kNumOutputs];
long blockFrames;
long inputLatency;
long outputLatency;
long activeInputs;
long activeOutputs;
long toggle;
long milliSeconds;
bool active, started;
bool timeInfoMode, tcRead;
char errorMessage[128];
};
#endif