git-svn-id: http://moon:8086/svn/software/trunk/libsrc/asiosdk2@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
149 lines
3.7 KiB
C++
Executable File
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
|
|
|