KRDSP abstraction WIP

This commit is contained in:
Kearwood Gilbert
2017-06-14 14:09:53 -07:00
parent bef32ab528
commit b566949d6f
5 changed files with 40 additions and 11 deletions

View File

@@ -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_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, KRDSP::Multiply(&reverb_sample_data_complex, &impulse_block_data_complex, &conv_data_complex, fft_size);
&impulse_block_data_complex, 1,
&conv_data_complex, 1, fft_size, 1);
vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], &conv_data_complex, 1, fft_size_log2, kFFTDirection_Inverse); 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); 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->realp + hrtf_frames, 0, sizeof(float) * hrtf_frames);
memset(hrtf_sample->imagp, 0, sizeof(float) * fft_size); memset(hrtf_sample->imagp, 0, sizeof(float) * fft_size);
SplitComplex hrtf_spectral; KRDSP::SplitComplex hrtf_spectral;
if(m_high_quality_hrtf) { if(m_high_quality_hrtf) {
// High quality, interpolated HRTF // High quality, interpolated HRTF
@@ -1666,9 +1664,8 @@ void KRAudioManager::renderHRTF()
for(int i=0; i < 1 /*4 */; i++) { for(int i=0; i < 1 /*4 */; i++) {
if(mix[i] > 0.0f) { if(mix[i] > 0.0f) {
KRDSP::SplitComplex hrtf_impulse_sample = getHRTFSpectral(dir[i], channel); 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, mix[i], hrtf_impulse, fft_size);
KRDSP::ScaleCopy(hrtf_impulse_sample.imagp, mix[i], hrtf_impulse->imagp, fft_size); KRDSP::Accumulate(hrtf_accum, hrtf_impulse, fft_size);
vDSP_zvadd(hrtf_impulse, 1, hrtf_accum, 1, hrtf_accum, 1, fft_size);
} }
} }
} else { } else {
@@ -1681,10 +1678,7 @@ void KRAudioManager::renderHRTF()
vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N],
hrtf_sample, 1, hrtf_sample, 1,
fft_size_log2, kFFTDirection_Forward); fft_size_log2, kFFTDirection_Forward);
vDSP_zvmul(hrtf_sample, 1, KRDSP::Multiply(hrtf_sample, &hrtf_spectral, hrtf_convolved, fft_size);
&hrtf_spectral, 1,
hrtf_convolved, 1,
fft_size, 1);
vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N], vDSP_fft_zip(m_fft_setup[fft_size_log2 - KRENGINE_AUDIO_BLOCK_LOG2N],
hrtf_convolved, 1, hrtf_convolved, 1,
fft_size_log2, kFFTDirection_Inverse); fft_size_log2, kFFTDirection_Inverse);

View File

@@ -65,6 +65,12 @@ void ScaleCopy(const float *src, float scale, float *dest, size_t count)
#endif #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) void ScaleRamp(float *buffer, float scaleStart, float scaleStep, size_t count)
{ {
#ifdef KRDSP_APPLE_VDSP #ifdef KRDSP_APPLE_VDSP
@@ -86,4 +92,23 @@ void Accumulate(float *buffer, size_t bufferStride, const float *buffer2, size_t
#endif #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 } // namespace KRDSP

View File

@@ -47,8 +47,11 @@ namespace KRDSP {
void Int16ToFloat(const short *src, size_t srcStride, float *dest, size_t destStride, size_t count); 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 Scale(float *buffer, float scale, size_t count);
void ScaleCopy(const float *src, float scale, float *dest, 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 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(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 } // namespace KRDSP

View File

@@ -143,6 +143,7 @@
<ClCompile Include="..\kraken\KRContextObject.cpp" /> <ClCompile Include="..\kraken\KRContextObject.cpp" />
<ClCompile Include="..\kraken\KRDataBlock.cpp" /> <ClCompile Include="..\kraken\KRDataBlock.cpp" />
<ClCompile Include="..\kraken\KRDirectionalLight.cpp" /> <ClCompile Include="..\kraken\KRDirectionalLight.cpp" />
<ClCompile Include="..\kraken\KRDSP.cpp" />
<ClCompile Include="..\kraken\KRFloat.cpp" /> <ClCompile Include="..\kraken\KRFloat.cpp" />
<ClCompile Include="..\kraken\KRHitInfo.cpp" /> <ClCompile Include="..\kraken\KRHitInfo.cpp" />
<ClCompile Include="..\kraken\KRLight.cpp" /> <ClCompile Include="..\kraken\KRLight.cpp" />
@@ -271,6 +272,9 @@
<ClInclude Include="..\kraken\KRVector3.h" /> <ClInclude Include="..\kraken\KRVector3.h" />
<ClInclude Include="..\kraken\KRVector4.h" /> <ClInclude Include="..\kraken\KRVector4.h" />
<ClInclude Include="..\kraken\KRViewport.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> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@@ -243,6 +243,9 @@
<ClCompile Include="..\kraken\KRUnknownManager.cpp"> <ClCompile Include="..\kraken\KRUnknownManager.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\kraken\KRDSP.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\3rdparty\tinyxml2\tinyxml2.h"> <ClInclude Include="..\3rdparty\tinyxml2\tinyxml2.h">