mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-24 01:04:02 +02:00
Optimization to stereo panner.
This commit is contained in:
@@ -35,7 +35,7 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ma_engine_sound_set_pitch(&engine, &sound1, 0.75f);
|
ma_engine_sound_set_pitch(&engine, &sound1, 0.75f);
|
||||||
ma_engine_sound_set_pan(&engine, &sound1, -1.0f);
|
ma_engine_sound_set_pan(&engine, &sound1, 0.0f);
|
||||||
ma_engine_sound_set_looping(&engine, &sound1, MA_TRUE);
|
ma_engine_sound_set_looping(&engine, &sound1, MA_TRUE);
|
||||||
ma_engine_sound_start(&engine, &sound1);
|
ma_engine_sound_start(&engine, &sound1);
|
||||||
|
|
||||||
|
|||||||
+13
-18
@@ -510,29 +510,24 @@ MA_API ma_result ma_panner_init(const ma_panner_config* pConfig, ma_panner* pPan
|
|||||||
|
|
||||||
static void ma_stereo_pan_pcm_frames_f32(float* pFramesOut, const float* pFramesIn, ma_uint64 frameCount, float pan)
|
static void ma_stereo_pan_pcm_frames_f32(float* pFramesOut, const float* pFramesIn, ma_uint64 frameCount, float pan)
|
||||||
{
|
{
|
||||||
float factorL0;
|
|
||||||
float factorR0;
|
|
||||||
float factorL1;
|
|
||||||
float factorR1;
|
|
||||||
ma_uint64 iFrame;
|
ma_uint64 iFrame;
|
||||||
|
|
||||||
|
|
||||||
/* TODO: We can optimize this by removing some multiplies and adds. */
|
|
||||||
if (pan > 0) {
|
if (pan > 0) {
|
||||||
factorL0 = 1.0f - pan;
|
float factorL0 = 1.0f - pan;
|
||||||
factorR0 = 0.0f;
|
float factorL1 = 0.0f + pan;
|
||||||
factorL1 = 0.0f + pan;
|
|
||||||
factorR1 = 1.0f;
|
|
||||||
} else {
|
|
||||||
factorL0 = 1.0f;
|
|
||||||
factorR0 = 0.0f - pan;
|
|
||||||
factorL1 = 0.0f;
|
|
||||||
factorR1 = 1.0f + pan;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (iFrame = 0; iFrame < frameCount; iFrame += 1) {
|
for (iFrame = 0; iFrame < frameCount; iFrame += 1) {
|
||||||
pFramesOut[iFrame*2 + 0] = (pFramesIn[iFrame*2 + 0] * factorL0) + (pFramesIn[iFrame*2 + 1] * factorR0);
|
pFramesOut[iFrame*2 + 0] = (pFramesIn[iFrame*2 + 0] * factorL0);
|
||||||
pFramesOut[iFrame*2 + 1] = (pFramesIn[iFrame*2 + 0] * factorL1) + (pFramesIn[iFrame*2 + 1] * factorR1);
|
pFramesOut[iFrame*2 + 1] = (pFramesIn[iFrame*2 + 0] * factorL1) + pFramesIn[iFrame*2 + 1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
float factorR0 = 0.0f - pan;
|
||||||
|
float factorR1 = 1.0f + pan;
|
||||||
|
|
||||||
|
for (iFrame = 0; iFrame < frameCount; iFrame += 1) {
|
||||||
|
pFramesOut[iFrame*2 + 0] = pFramesIn[iFrame*2 + 0] + (pFramesIn[iFrame*2 + 1] * factorR0);
|
||||||
|
pFramesOut[iFrame*2 + 1] = (pFramesIn[iFrame*2 + 1] * factorR1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user