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
+