@ -29,16 +29,16 @@ class AudioConvert_I16toF32 : public AudioStream_F32 //receive Int and transmits
AudioStream : : release ( int_block ) ;
} ;
private :
audio_block_f32_t * inputQueueArray_f32 [ 1 ] ; //2 for stereo
static void convertAudio_I16toF32 ( audio_block_t * in , audio_block_f32_t * out , int len ) {
//WEA Method. Should look at CMSIS arm_q15_to_float instead: https://www.keil.com/pack/doc/CMSIS/DSP/html/group__q15__to__x.html#gaf8b0d2324de273fc430b0e61ad4e9eb2
const float MAX_INT = 32678.0 ;
for ( int i = 0 ; i < len ; i + + ) out - > data [ i ] = ( float ) ( in - > data [ i ] ) ;
arm_scale_f32 ( out - > data , 1.0 / MAX_INT , out - > data , out - > length ) ; //divide by 32678 to get -1.0 to +1.0
}
}
private :
audio_block_f32_t * inputQueueArray_f32 [ 1 ] ; //2 for stereo
} ;
@ -58,24 +58,25 @@ class AudioConvert_F32toI16 : public AudioStream_F32 //receive Float and transmi
if ( int_block = = NULL ) return ;
//convert back to int16
convertAudio_F32T oI16 ( float_block , int_block , AUDIO_BLOCK_SAMPLES ) ;
convertAudio_F32t oI16 ( float_block , int_block , AUDIO_BLOCK_SAMPLES ) ;
//return audio to the system
AudioStream : : transmit ( int_block ) ;
AudioStream : : release ( int_block ) ;
AudioStream_F32 : : release ( float_block ) ;
} ;
private :
audio_block_f32_t * inputQueueArray_Float [ 1 ] ;
static void convertAudio_F32ToI16 ( audio_block_f32_t * in , audio_block_t * out , int len ) {
static void convertAudio_F32toI16 ( audio_block_f32_t * in , audio_block_t * out , int len ) {
//WEA Method. Should look at CMSIS arm_float_to_q15 instead: https://www.keil.com/pack/doc/CMSIS/DSP/html/group__float__to__x.html#ga215456e35a18db86882e1d3f0d24e1f2
const float MAX_INT = 32678.0 ;
for ( int i = 0 ; i < len ; i + + ) {
out - > data [ i ] = ( int16_t ) ( max ( min ( ( in - > data [ i ] * MAX_INT ) , MAX_INT ) , - MAX_INT ) ) ;
}
}
}
private :
audio_block_f32_t * inputQueueArray_Float [ 1 ] ;
} ;
# endif