@@ -40,8 +40,10 @@ void ambi_enc_create
4040 /* default user parameters */
4141 loadSourceConfigPreset (SOURCE_CONFIG_PRESET_DEFAULT , pData -> src_dirs_deg , & (pData -> new_nSources ));
4242 pData -> nSources = pData -> new_nSources ;
43- for (i = 0 ; i < MAX_NUM_INPUTS ; i ++ )
43+ for (i = 0 ; i < MAX_NUM_INPUTS ; i ++ ){
4444 pData -> recalc_SH_FLAG [i ] = 1 ;
45+ pData -> src_gains [i ] = 1.f ;
46+ }
4547 pData -> chOrdering = CH_ACN ;
4648 pData -> norm = NORM_SN3D ;
4749 pData -> order = SH_ORDER_FIRST ;
@@ -117,18 +119,21 @@ void ambi_enc_process
117119
118120 /* recalulate SHs (only if encoding direction has changed) */
119121 mixWithPreviousFLAG = 0 ;
120- for (i = 0 ; i < nSources ; i ++ ){
121- if (pData -> recalc_SH_FLAG [i ]){
122- getRSH_recur (order , pData -> src_dirs_deg [i ], 1 , (float * )Y_src );
122+ for (ch = 0 ; ch < nSources ; ch ++ ){
123+ if (pData -> recalc_SH_FLAG [ch ]){
124+ getRSH_recur (order , pData -> src_dirs_deg [ch ], 1 , (float * )Y_src );
123125 for (j = 0 ; j < nSH ; j ++ )
124- pData -> Y [j ][i ] = Y_src [j ];
126+ pData -> Y [j ][ch ] = Y_src [j ];
125127 for (; j < MAX_NUM_SH_SIGNALS ; j ++ )
126- pData -> Y [j ][i ] = 0.0f ;
127- pData -> recalc_SH_FLAG [i ] = 0 ;
128+ pData -> Y [j ][ch ] = 0.0f ;
129+ pData -> recalc_SH_FLAG [ch ] = 0 ;
128130
129131 /* If encoding gains have changed, then we should also mix with and interpolate the previous gains */
130132 mixWithPreviousFLAG = 1 ;
131133 }
134+ /* Apply source gains */
135+ if (fabsf (pData -> src_gains [ch ] - 1.f ) > 1e-6f )
136+ utility_svsmul (pData -> inputFrameTD [ch ], & (pData -> src_gains [ch ]), AMBI_ENC_FRAME_SIZE , NULL );
132137 }
133138
134139 /* spatially encode the input signals into spherical harmonic signals */
@@ -281,6 +286,30 @@ void ambi_enc_setEnablePostScaling(void* const hAmbi, int newStatus)
281286 pData -> enablePostScaling = newStatus ;
282287}
283288
289+ void ambi_enc_setSourceGain (void * const hAmbi , int srcIdx , float newGain )
290+ {
291+ ambi_enc_data * pData = (ambi_enc_data * )(hAmbi );
292+ pData -> src_gains [srcIdx ] = newGain ;
293+ }
294+
295+ void ambi_enc_setSourceSolo (void * const hAmbi , int srcIdx )
296+ {
297+ ambi_enc_data * pData = (ambi_enc_data * )(hAmbi );
298+ int i ;
299+ for (i = 0 ; i < pData -> nSources ; i ++ ){
300+ if (i == srcIdx )
301+ pData -> src_gains [i ] = 1.f ;
302+ else
303+ pData -> src_gains [i ] = 0.f ;
304+ }
305+ }
306+
307+ void ambi_enc_setUnSolo (void * const hAmbi )
308+ {
309+ ambi_enc_data * pData = (ambi_enc_data * )(hAmbi );
310+ for (int i = 0 ; i < pData -> nSources ; i ++ )
311+ pData -> src_gains [i ] = 1.f ;
312+ }
284313
285314/* Get Functions */
286315
0 commit comments