1/*----------------------------------------------------------------------------
2 *
3 * File:
4 * eas_mixer.h
5 *
6 * Contents and purpose:
7 * This file contains the critical components of the mix engine that
8 * must be optimized for best performance.
9 *
10 * Copyright Sonic Network Inc. 2005
11
12 * Licensed under the Apache License, Version 2.0 (the "License");
13 * you may not use this file except in compliance with the License.
14 * You may obtain a copy of the License at
15 *
16 *      http://www.apache.org/licenses/LICENSE-2.0
17 *
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
23 *
24 *----------------------------------------------------------------------------
25 * Revision Control:
26 *   $Revision: 706 $
27 *   $Date: 2007-05-31 17:22:51 -0700 (Thu, 31 May 2007) $
28 *----------------------------------------------------------------------------
29*/
30
31#ifndef _EAS_MIXER_H
32#define _EAS_MIXER_H
33
34//3 dls: This module is in the midst of being converted from a synth
35//3 specific module to a general purpose mix engine
36
37#define MIX_FLAGS_STEREO_SOURCE     1
38#define MIX_FLAGS_STEREO_OUTPUT     2
39#define NUM_MIXER_GUARD_BITS        4
40
41#include "eas_effects.h"
42
43extern void SynthMasterGain( long *pInputBuffer, EAS_PCM *pOutputBuffer, EAS_U16 nGain, EAS_U16 nNumLoopSamples);
44
45/*----------------------------------------------------------------------------
46 * EAS_MixEngineInit()
47 *----------------------------------------------------------------------------
48 * Purpose:
49 * Prepares the mix engine for work, allocates buffers, locates effects modules, etc.
50 *
51 * Inputs:
52 * pEASData         - instance data
53 * pInstData        - pointer to variable to receive instance data handle
54 *
55 * Outputs:
56 *
57 * Side Effects:
58 *
59 *----------------------------------------------------------------------------
60*/
61EAS_RESULT EAS_MixEngineInit (EAS_DATA_HANDLE pEASData);
62
63/*----------------------------------------------------------------------------
64 * EAS_MixEnginePrep()
65 *----------------------------------------------------------------------------
66 * Purpose:
67 * Performs prep before synthesize a buffer of audio, such as clearing
68 * audio buffers, etc.
69 *
70 * Inputs:
71 * psEASData - pointer to overall EAS data structure
72 *
73 * Outputs:
74 *
75 * Side Effects:
76 *
77 *----------------------------------------------------------------------------
78*/
79void EAS_MixEnginePrep (EAS_DATA_HANDLE pEASData, EAS_I32 nNumSamplesToAdd);
80
81/*----------------------------------------------------------------------------
82 * EAS_MixEnginePost
83 *----------------------------------------------------------------------------
84 * Purpose:
85 * This routine does the post-processing after all voices have been
86 * synthesized. It calls any sweeteners and does the final mixdown to
87 * the output buffer.
88 *
89 * Inputs:
90 *
91 * Outputs:
92 *
93 * Notes:
94 *----------------------------------------------------------------------------
95*/
96void EAS_MixEnginePost (EAS_DATA_HANDLE pEASData, EAS_I32 nNumSamplesToAdd);
97
98/*----------------------------------------------------------------------------
99 * EAS_MixEngineShutdown()
100 *----------------------------------------------------------------------------
101 * Purpose:
102 * Shuts down effects modules and deallocates memory
103 *
104 * Inputs:
105 * pEASData         - instance data
106 * pInstData        - instance data handle
107 *
108 * Outputs:
109 *
110 * Side Effects:
111 *
112 *----------------------------------------------------------------------------
113*/
114EAS_RESULT EAS_MixEngineShutdown (EAS_DATA_HANDLE pEASData);
115
116#ifdef UNIFIED_MIXER
117/*----------------------------------------------------------------------------
118 * EAS_MixStream
119 *----------------------------------------------------------------------------
120 * Mix a 16-bit stream into a 32-bit buffer
121 *
122 * pInputBuffer 16-bit input buffer
123 * pMixBuffer   32-bit mix buffer
124 * numSamples   number of samples to mix
125 * gainLeft     initial gain left or mono
126 * gainRight    initial gain right
127 * gainLeft     left gain increment per sample
128 * gainRight    right gain increment per sample
129 * flags        bit 0 = stereo source
130 *              bit 1 = stereo output
131 *----------------------------------------------------------------------------
132*/
133void EAS_MixStream (EAS_PCM *pInputBuffer, EAS_I32 *pMixBuffer, EAS_I32 numSamples, EAS_I32 gainLeft, EAS_I32 gainRight, EAS_I32 gainIncLeft, EAS_I32 gainIncRight, EAS_I32 flags);
134#endif
135
136#endif /* #ifndef _EAS_MIXER_H */
137
138