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