audioconvert: add optional hilbert transform to rear channels

Add an option to do a hilbert transform on the generated rear channels
to do a 90 degree pahse shift on them. This can improve spacialization
of the rear channels.

See #861
This commit is contained in:
Wim Taymans 2021-03-09 21:07:37 +01:00
parent 5dd0a12875
commit 5b3388e4ac
9 changed files with 121 additions and 17 deletions

View file

@ -302,10 +302,10 @@ channelmix_f32_2_5p1_c(struct channelmix *mix, void * SPA_RESTRICT dst[],
lr4_process(&mix->lr4[2], d[2], d[3], v2, n_samples);
lr4_process(&mix->lr4[3], d[3], d[3], v3, n_samples);
delay_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
d[4], d[5], v4, n_samples);
delay_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
d[5], d[5], v5, n_samples);
delay_convolve_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[4], d[5], v4, n_samples);
delay_convolve_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[5], d[5], -v5, n_samples);
}
else {
for (n = 0; n < n_samples; n++) {
@ -320,10 +320,10 @@ channelmix_f32_2_5p1_c(struct channelmix *mix, void * SPA_RESTRICT dst[],
lr4_process(&mix->lr4[2], d[2], d[3], v2, n_samples);
lr4_process(&mix->lr4[3], d[3], d[3], v3, n_samples);
delay_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
d[4], d[5], v4, n_samples);
delay_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
d[5], d[5], v5, n_samples);
delay_convolve_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[4], d[5], v4, n_samples);
delay_convolve_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[5], d[5], -v5, n_samples);
}
}
@ -362,10 +362,10 @@ channelmix_f32_2_7p1_c(struct channelmix *mix, void * SPA_RESTRICT dst[],
lr4_process(&mix->lr4[2], d[2], d[3], v2, n_samples);
lr4_process(&mix->lr4[3], d[3], d[3], v3, n_samples);
delay_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
d[6], d[7], v6, n_samples);
delay_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
d[7], d[7], v7, n_samples);
delay_convolve_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[6], d[7], v6, n_samples);
delay_convolve_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[7], d[7], -v7, n_samples);
}
else {
for (n = 0; n < n_samples; n++) {
@ -382,10 +382,10 @@ channelmix_f32_2_7p1_c(struct channelmix *mix, void * SPA_RESTRICT dst[],
lr4_process(&mix->lr4[2], d[2], d[3], v2, n_samples);
lr4_process(&mix->lr4[3], d[3], d[3], v3, n_samples);
delay_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
d[6], d[7], v6, n_samples);
delay_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
d[7], d[7], v7, n_samples);
delay_convolve_run(mix->buffer[0], &mix->pos[0], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[6], d[7], v6, n_samples);
delay_convolve_run(mix->buffer[1], &mix->pos[1], BUFFER_SIZE, mix->delay,
mix->taps, mix->n_taps, d[7], d[7], -v7, n_samples);
}
}