diff --git a/kraken/KRAudioManager.cpp b/kraken/KRAudioManager.cpp index 3ab64c1..11726a3 100755 --- a/kraken/KRAudioManager.cpp +++ b/kraken/KRAudioManager.cpp @@ -274,9 +274,7 @@ void KRAudioManager::renderReverbImpulseResponse(int impulse_response_offset, in vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], &impulse_block_data_complex, 1, fft_size_log2, kFFTDirection_Forward); - vDSP_zvmul(&reverb_sample_data_complex, 1, - &impulse_block_data_complex, 1, - &conv_data_complex, 1, fft_size, 1); + KRDSP::Multiply(&reverb_sample_data_complex, &impulse_block_data_complex, &conv_data_complex, fft_size); vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], &conv_data_complex, 1, fft_size_log2, kFFTDirection_Inverse); KRDSP::Scale(conv_data_complex.realp, scale, fft_size); @@ -1648,7 +1646,7 @@ void KRAudioManager::renderHRTF() memset(hrtf_sample->realp + hrtf_frames, 0, sizeof(float) * hrtf_frames); memset(hrtf_sample->imagp, 0, sizeof(float) * fft_size); - SplitComplex hrtf_spectral; + KRDSP::SplitComplex hrtf_spectral; if(m_high_quality_hrtf) { // High quality, interpolated HRTF @@ -1666,9 +1664,8 @@ void KRAudioManager::renderHRTF() for(int i=0; i < 1 /*4 */; i++) { if(mix[i] > 0.0f) { KRDSP::SplitComplex hrtf_impulse_sample = getHRTFSpectral(dir[i], channel); - KRDSP::ScaleCopy(hrtf_impulse_sample.realp, mix[i], hrtf_impulse->realp, fft_size); - KRDSP::ScaleCopy(hrtf_impulse_sample.imagp, mix[i], hrtf_impulse->imagp, fft_size); - vDSP_zvadd(hrtf_impulse, 1, hrtf_accum, 1, hrtf_accum, 1, fft_size); + KRDSP::ScaleCopy(&hrtf_impulse_sample, mix[i], hrtf_impulse, fft_size); + KRDSP::Accumulate(hrtf_accum, hrtf_impulse, fft_size); } } } else { @@ -1681,10 +1678,7 @@ void KRAudioManager::renderHRTF() vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], hrtf_sample, 1, fft_size_log2, kFFTDirection_Forward); - vDSP_zvmul(hrtf_sample, 1, - &hrtf_spectral, 1, - hrtf_convolved, 1, - fft_size, 1); + KRDSP::Multiply(hrtf_sample, &hrtf_spectral, hrtf_convolved, fft_size); vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], hrtf_convolved, 1, fft_size_log2, kFFTDirection_Inverse); diff --git a/kraken/KRDSP.cpp b/kraken/KRDSP.cpp index 5eab874..8c2028a 100644 --- a/kraken/KRDSP.cpp +++ b/kraken/KRDSP.cpp @@ -65,6 +65,12 @@ void ScaleCopy(const float *src, float scale, float *dest, size_t count) #endif } +void ScaleCopy(const SplitComplex *src, float scale, SplitComplex *dest, size_t count) +{ + ScaleCopy(src->realp, scale, dest->realp, count); + ScaleCopy(src->imagp, scale, dest->imagp, count); +} + void ScaleRamp(float *buffer, float scaleStart, float scaleStep, size_t count) { #ifdef KRDSP_APPLE_VDSP @@ -86,4 +92,23 @@ void Accumulate(float *buffer, size_t bufferStride, const float *buffer2, size_t #endif } +void Accumulate(SplitComplex *buffer, const SplitComplex *buffer2, size_t count) +{ +#ifdef KRDSP_APPLE_VDSP + vDSP_zvadd(buffer2, 1, buffer, 1, buffer, 1, count); +#else +#error TODO - Implement +#endif +} + + +void Multiply(const SplitComplex *a, const SplitComplex *b, SplitComplex *c, size_t count) +{ +#ifdef KRDSP_APPLE_VDSP + vDSP_zvmul(a, 1, b, 1, c, 1, count, 1); +#else +#error TODO - Implement +#endif +} + } // namespace KRDSP diff --git a/kraken/KRDSP.h b/kraken/KRDSP.h index a0895f6..e1b4d30 100644 --- a/kraken/KRDSP.h +++ b/kraken/KRDSP.h @@ -47,8 +47,11 @@ namespace KRDSP { void Int16ToFloat(const short *src, size_t srcStride, float *dest, size_t destStride, size_t count); void Scale(float *buffer, float scale, size_t count); void ScaleCopy(const float *src, float scale, float *dest, size_t count); +void ScaleCopy(const SplitComplex *src, float scale, SplitComplex *dest, size_t count); void ScaleRamp(float *buffer, float scaleStart, float scaleStep, size_t count); void Accumulate(float *buffer, size_t bufferStride, const float *buffer2, size_t buffer2Stride, size_t count); +void Accumulate(SplitComplex *buffer, const SplitComplex *buffer2, size_t count); +void Multiply(const SplitComplex *a, const SplitComplex *b, SplitComplex *c, size_t count); } // namespace KRDSP diff --git a/kraken_win/kraken.vcxproj b/kraken_win/kraken.vcxproj index 3b9ab2c..37f4ca9 100755 --- a/kraken_win/kraken.vcxproj +++ b/kraken_win/kraken.vcxproj @@ -143,6 +143,7 @@ + @@ -271,6 +272,9 @@ + + + diff --git a/kraken_win/kraken.vcxproj.filters b/kraken_win/kraken.vcxproj.filters index 45fc444..fbf1bac 100755 --- a/kraken_win/kraken.vcxproj.filters +++ b/kraken_win/kraken.vcxproj.filters @@ -243,6 +243,9 @@ Source Files + + Source Files +