KRDSP abstraction WIP
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
<ClCompile Include="..\kraken\KRContextObject.cpp" />
|
||||
<ClCompile Include="..\kraken\KRDataBlock.cpp" />
|
||||
<ClCompile Include="..\kraken\KRDirectionalLight.cpp" />
|
||||
<ClCompile Include="..\kraken\KRDSP.cpp" />
|
||||
<ClCompile Include="..\kraken\KRFloat.cpp" />
|
||||
<ClCompile Include="..\kraken\KRHitInfo.cpp" />
|
||||
<ClCompile Include="..\kraken\KRLight.cpp" />
|
||||
@@ -271,6 +272,9 @@
|
||||
<ClInclude Include="..\kraken\KRVector3.h" />
|
||||
<ClInclude Include="..\kraken\KRVector4.h" />
|
||||
<ClInclude Include="..\kraken\KRViewport.h" />
|
||||
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\glew.h" />
|
||||
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\glxew.h" />
|
||||
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\wglew.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -243,6 +243,9 @@
|
||||
<ClCompile Include="..\kraken\KRUnknownManager.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\kraken\KRDSP.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\3rdparty\tinyxml2\tinyxml2.h">
|
||||
|
||||
Reference in New Issue
Block a user