/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_audioconst.h
 *
 * Contents and purpose:
 * Defines audio constants related to the sample rate, bit size, etc.
 *
 *
 * Copyright Sonic Network Inc. 2005

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *   $Revision: 82 $
 *   $Date: 2006-07-10 11:45:19 -0700 (Mon, 10 Jul 2006) $
 *----------------------------------------------------------------------------
*/

#ifndef _EAS_AUDIOCONST_H
#define _EAS_AUDIOCONST_H

/*----------------------------------------------------------------------------
 * These macros define the various characteristics of the defined sample rates
 *----------------------------------------------------------------------------
 * BUFFER_SIZE_IN_MONO_SAMPLES	size of buffer in samples
 * _OUTPUT_SAMPLE_RATE			compiled output sample rate
 * AUDIO_FRAME_LENGTH			length of an audio frame in 256ths of a millisecond
 * SYNTH_UPDATE_PERIOD_IN_BITS	length of an audio frame (2^x samples)
 *----------------------------------------------------------------------------
*/

#if	defined (_SAMPLE_RATE_8000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		32
#define _OUTPUT_SAMPLE_RATE 			8000
#define AUDIO_FRAME_LENGTH				1024
#define SYNTH_UPDATE_PERIOD_IN_BITS		5

#elif defined (_SAMPLE_RATE_16000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		64
#define _OUTPUT_SAMPLE_RATE				16000
#define AUDIO_FRAME_LENGTH				1024
#define SYNTH_UPDATE_PERIOD_IN_BITS		6

#elif defined (_SAMPLE_RATE_20000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		128
#define _OUTPUT_SAMPLE_RATE				20000
#define AUDIO_FRAME_LENGTH				1638
#define SYNTH_UPDATE_PERIOD_IN_BITS		7

#elif defined (_SAMPLE_RATE_22050)
#define BUFFER_SIZE_IN_MONO_SAMPLES		128
#define _OUTPUT_SAMPLE_RATE				22050
#define AUDIO_FRAME_LENGTH				1486
#define SYNTH_UPDATE_PERIOD_IN_BITS		7

#elif defined (_SAMPLE_RATE_24000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		128
#define _OUTPUT_SAMPLE_RATE				24000
#define AUDIO_FRAME_LENGTH				1365
#define SYNTH_UPDATE_PERIOD_IN_BITS		7

#elif defined (_SAMPLE_RATE_32000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		128
#define _OUTPUT_SAMPLE_RATE				32000
#define AUDIO_FRAME_LENGTH				1024
#define SYNTH_UPDATE_PERIOD_IN_BITS		7

#elif defined (_SAMPLE_RATE_44100)
#define BUFFER_SIZE_IN_MONO_SAMPLES		256
#define _OUTPUT_SAMPLE_RATE				44100
#define AUDIO_FRAME_LENGTH				1486
#define SYNTH_UPDATE_PERIOD_IN_BITS		8

#elif defined (_SAMPLE_RATE_48000)
#define BUFFER_SIZE_IN_MONO_SAMPLES		256
#define _OUTPUT_SAMPLE_RATE				48000
#define AUDIO_FRAME_LENGTH				1365
#define SYNTH_UPDATE_PERIOD_IN_BITS		8

#else
#error "_SAMPLE_RATE_XXXXX must be defined to valid rate"
#endif

#endif /* #ifndef _EAS_AUDIOCONST_H */

