(Page 29 of 69 in this chapter) Version
/* Recording (ms); use 0 to deactivate */
DWORD silencedeglitch;
/* Deglitch while qualifying silence(ms) */
/*-[Beep for record] ---------------------*/
DWORD beepfreq; /* Beep frequency (Hz) */
DWORD AGCenable; /* Enable AGC; use 1 to activate */
INT32 AGCtargetampl; /* Target AGC level (dBm) */
/* Record to supplied buffer, stopping after 1 second of silence. */
int myRecord( CTAHD ctahd, unsigned encoding,
void *buf, unsigned bufsize, unsigned *bytesrecorded )
{
ADI_RECORD_PARMS parms;
CTA_EVENT event;
unsigned datarate; /* average bytes/sec */
int myret;
unsigned silencetime = 1000;
unsigned trimsize = 0;
/* Modify default silence timeout */
adiGetParms (ADI_RECORD_PARMID, &parms, sizeof parms);
parms.silencetime = silencetime;
if( adiRecordToMemory (ctahd, encoding, buf, bufsize, &parms) != SUCCESS )
return MYFAILURE;
do
{
myGetEvent( &event ); /* see ctaWaitEvent example */
} while (event.id != ADIEVN_RECORD_DONE);
switch (event.value)
{
case CTA_REASON_FINISHED: /* Buffer filled */
myret = SUCCESS;
break;
case CTA_REASON_NO_VOICE: /* No voice detected */
*bytesrecorded = 0;
myret = SUCCESS;
break;
case CTA_REASON_RELEASED: /* The call was terminated */
myret = MYDISCONNECT;
break;
case CTA_REASON_STOPPED: /* adiStopRecording was called */
case CTA_REASON_DIGIT: /* Aborted due to touchtone */
/* DTMF is trimmed automatically by AG board */
*bytesrecorded = event.size;
myret = SUCCESS;
break;
case CTA_REASON_VOICE_END: /* Silence after voice */
*bytesrecorded = event.size;
adiGetEncodingInfo (ctahd, encoding, NULL, &datarate, NULL);
trimsize = datarate * silencetime / 1000;
myret = SUCCESS;
break;
default: /* an error code */
myret = MYFAILURE;
break;
}
if (myret == SUCCESS)
{
if (*bytesrecorded > trimsize)
*bytesrecorded -= trimsize;
else
*bytesrecorded = 0;
}
return myret;
}
(Page 29 of 69 in this chapter) Version