AudioConvert_F32: adjusting how conversion is done

pull/5/head
Chip Audette 8 years ago
parent 96202a55fe
commit c1c7241b9b
  1. 19
      AudioConvert_F32.h

@ -29,16 +29,16 @@ class AudioConvert_I16toF32 : public AudioStream_F32 //receive Int and transmits
AudioStream::release(int_block); 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) { 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 //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; const float MAX_INT = 32678.0;
for (int i = 0; i < len; i++) out->data[i] = (float)(in->data[i]); 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 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,7 +58,7 @@ class AudioConvert_F32toI16 : public AudioStream_F32 //receive Float and transmi
if (int_block == NULL) return; if (int_block == NULL) return;
//convert back to int16 //convert back to int16
convertAudio_F32ToI16(float_block, int_block, AUDIO_BLOCK_SAMPLES); convertAudio_F32toI16(float_block, int_block, AUDIO_BLOCK_SAMPLES);
//return audio to the system //return audio to the system
AudioStream::transmit(int_block); AudioStream::transmit(int_block);
@ -66,16 +66,17 @@ class AudioConvert_F32toI16 : public AudioStream_F32 //receive Float and transmi
AudioStream_F32::release(float_block); AudioStream_F32::release(float_block);
}; };
private: static void convertAudio_F32toI16(audio_block_f32_t *in, audio_block_t *out, int len) {
audio_block_f32_t *inputQueueArray_Float[1];
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 //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; const float MAX_INT = 32678.0;
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
out->data[i] = (int16_t)(max(min( (in->data[i] * MAX_INT), MAX_INT), -MAX_INT)); 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 #endif
Loading…
Cancel
Save