|
- /*
- Copyright (C) 2006 Grame
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #ifndef _asiosmpl_
- #define _asiosmpl_
-
- #include "asiosys.h"
-
-
- // Globals
- static int kBlockFrames = 256;
- static int kNumInputs = 4;
- static int kNumOutputs = 4;
-
-
- #if WINDOWS
-
- #include "jack.h"
- #include "rpc.h"
- #include "rpcndr.h"
- #ifndef COM_NO_WINDOWS_H
- #include <windows.h>
- #include "ole2.h"
-
- #endif
-
- #include "combase.h"
- #include "iasiodrv.h"
-
- #define MAX_PORTS 32
-
- #define LONG_SAMPLE 1
-
- #define PATH_SEP "\\"
-
- #include <list>
- #include <string>
-
- class JackRouter : public IASIO, public CUnknown
- {
- public:
- JackRouter(LPUNKNOWN pUnk, HRESULT *phr);
- ~JackRouter();
-
- 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 JackRouter : public AsioDriver
- {
- public:
- JackRouter();
- ~JackRouter();
- #endif
-
- static int process(jack_nframes_t nframes, void* arg);
- static void shutdown(void* arg);
-
- 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 fMilliSeconds;}
-
- static bool fFirstActivate;
- static std::list<std::pair<std::string, std::string> > fConnections; // Connections list
-
- private:
-
- void bufferSwitchX();
-
- double fSamplePosition;
- ASIOCallbacks* fCallbacks;
- ASIOTime fAsioTime;
- ASIOTimeStamp fTheSystemTime;
-
- #ifdef LONG_SAMPLE
- long* fInputBuffers[MAX_PORTS * 2];
- long* fOutputBuffers[MAX_PORTS * 2];
- #else
- float* fInputBuffers[MAX_PORTS * 2];
- float* fOutputBuffers[MAX_PORTS * 2];
- #endif
- long fInMap[MAX_PORTS];
- long fOutMap[MAX_PORTS];
-
- long fInputLatency;
- long fOutputLatency;
- long fActiveInputs;
- long fActiveOutputs;
- long fToggle;
- long fMilliSeconds;
- bool fActive, fStarted;
- bool fTimeInfoMode, fTcRead;
- char fErrorMessage[128];
-
- bool fAutoConnectIn;
- bool fAutoConnectOut;
-
- // Jack part
- jack_client_t* fClient;
- jack_port_t* fInputPorts[MAX_PORTS];
- jack_port_t* fOutputPorts[MAX_PORTS];
- long fBufferSize;
- ASIOSampleRate fSampleRate;
-
- void AutoConnect();
- void SaveConnections();
- void RestoreConnections();
-
- };
-
- #endif
-
|