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 
43 extern 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 */
61 EAS_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 */
79 void 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 */
96 void 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 */
114 EAS_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 */
133 void 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