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_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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user