bug fix, finished ASIO implementation
This commit is contained in:
parent
2516cf62f9
commit
d8d34e6c5a
3 changed files with 26 additions and 18 deletions
|
@ -79,7 +79,7 @@
|
||||||
#define DEF_NET_BUF_SIZE_NUM_BL 5 // number of blocks
|
#define DEF_NET_BUF_SIZE_NUM_BL 5 // number of blocks
|
||||||
|
|
||||||
// number of ticks of audio in/out buffer sliders
|
// number of ticks of audio in/out buffer sliders
|
||||||
# define AUD_SLIDER_LENGTH 6
|
# define AUD_SLIDER_LENGTH 8
|
||||||
|
|
||||||
// maximum number of internet connections (channels)
|
// maximum number of internet connections (channels)
|
||||||
// if you want to change this paramter, there has to be done code modifications
|
// if you want to change this paramter, there has to be done code modifications
|
||||||
|
|
|
@ -95,11 +95,31 @@ bool CSound::Read ( CVector<short>& psData )
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait until enough data is available
|
// wait until enough data is available
|
||||||
|
int iWaitCount = 0;
|
||||||
while ( iBufferPosCapture < iBufferSizeStereo )
|
while ( iBufferPosCapture < iBufferSizeStereo )
|
||||||
{
|
{
|
||||||
if ( bBlockingRec && !bCaptureBufferOverrun )
|
if ( bBlockingRec )
|
||||||
{
|
{
|
||||||
WaitForSingleObject ( m_ASIOEvent, INFINITE );
|
if ( !bCaptureBufferOverrun )
|
||||||
|
{
|
||||||
|
// regular case
|
||||||
|
WaitForSingleObject ( m_ASIOEvent, INFINITE );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// it seems that the buffers are too small, wait
|
||||||
|
// just one time to avoid CPU to go up to 100% and
|
||||||
|
// then leave this function
|
||||||
|
if ( iWaitCount == 0 )
|
||||||
|
{
|
||||||
|
WaitForSingleObject ( m_ASIOEvent, INFINITE );
|
||||||
|
iWaitCount++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -125,7 +145,7 @@ bool CSound::Read ( CVector<short>& psData )
|
||||||
|
|
||||||
// move all other data in buffer
|
// move all other data in buffer
|
||||||
const int iLenCopyRegion = iBufferPosCapture - iBufferSizeStereo;
|
const int iLenCopyRegion = iBufferPosCapture - iBufferSizeStereo;
|
||||||
for ( i = 0; i < iBufferSizeStereo; i++ )
|
for ( i = 0; i < iLenCopyRegion; i++ )
|
||||||
{
|
{
|
||||||
psCaptureBuffer[i] = psCaptureBuffer[iBufferSizeStereo + i];
|
psCaptureBuffer[i] = psCaptureBuffer[iBufferSizeStereo + i];
|
||||||
}
|
}
|
||||||
|
@ -306,18 +326,6 @@ void CSound::InitRecordingAndPlayback ( int iNewBufferSize )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TEST test if requested buffer size is supported by the audio hardware, if not, fire error
|
|
||||||
if ( iASIOBufferSizeMono != iBufferSizeMono )
|
|
||||||
{
|
|
||||||
throw CGenErr ( QString ( "Required sound card buffer size of %1 samples "
|
|
||||||
"not supported by the audio hardware." ).arg(iBufferSizeMono) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// TEST
|
|
||||||
//iASIOBufferSizeMono = 256;
|
|
||||||
|
|
||||||
|
|
||||||
// prepare input channels
|
// prepare input channels
|
||||||
for ( i = 0; i < NUM_IN_OUT_CHANNELS; i++ )
|
for ( i = 0; i < NUM_IN_OUT_CHANNELS; i++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,8 +47,8 @@
|
||||||
#define MAX_SND_BUF_IN 100
|
#define MAX_SND_BUF_IN 100
|
||||||
#define MAX_SND_BUF_OUT 100
|
#define MAX_SND_BUF_OUT 100
|
||||||
|
|
||||||
#define NUM_SOUND_BUFFERS_IN 1
|
#define NUM_SOUND_BUFFERS_IN 4
|
||||||
#define NUM_SOUND_BUFFERS_OUT 1
|
#define NUM_SOUND_BUFFERS_OUT 4
|
||||||
|
|
||||||
// maximum number of recognized sound cards installed in the system
|
// maximum number of recognized sound cards installed in the system
|
||||||
#define MAX_NUMBER_SOUND_CARDS 10
|
#define MAX_NUMBER_SOUND_CARDS 10
|
||||||
|
|
Loading…
Reference in a new issue