Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/asiosdk2@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#include <windows.h>
|
||||
#include "asiosmpl.h"
|
||||
|
||||
static DWORD __stdcall ASIOThread (void *param);
|
||||
static HANDLE ASIOThreadHandle = 0;
|
||||
static bool done = false;
|
||||
const double twoRaisedTo32 = 4294967296.;
|
||||
|
||||
AsioSample* theDriver = 0;
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
void getNanoSeconds (ASIOTimeStamp* ts)
|
||||
{
|
||||
double nanoSeconds = (double)((unsigned long)timeGetTime ()) * 1000000.;
|
||||
ts->hi = (unsigned long)(nanoSeconds / twoRaisedTo32);
|
||||
ts->lo = (unsigned long)(nanoSeconds - (ts->hi * twoRaisedTo32));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
void AsioSample::timerOn ()
|
||||
{
|
||||
theDriver = this;
|
||||
DWORD asioId;
|
||||
done = false;
|
||||
ASIOThreadHandle = CreateThread (0, 0, &ASIOThread, 0, 0, &asioId);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
void AsioSample::timerOff ()
|
||||
{
|
||||
done = true;
|
||||
if (ASIOThreadHandle)
|
||||
WaitForSingleObject(ASIOThreadHandle, 1000);
|
||||
ASIOThreadHandle = 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
static DWORD __stdcall ASIOThread (void *param)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (theDriver)
|
||||
{
|
||||
theDriver->bufferSwitch ();
|
||||
Sleep (theDriver->getMilliSeconds ());
|
||||
}
|
||||
else
|
||||
{
|
||||
double a = 1000. / 44100.;
|
||||
Sleep ((long)(a * (double)kBlockFrames));
|
||||
|
||||
}
|
||||
} while (!done);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user