obs-filters: Add "Invert Polarity" audio filter
Allows inverting the polarity of the audio data, which can be useful for ether purposefully canceling out audio or preventing audio cancellation. Amends pull request obsproject/obs-studio#1404
This commit is contained in:
@@ -48,6 +48,7 @@ set(obs-filters_SOURCES
|
||||
gain-filter.c
|
||||
noise-gate-filter.c
|
||||
mask-filter.c
|
||||
invert-audio-polarity.c
|
||||
compressor-filter.c)
|
||||
|
||||
add_library(obs-filters MODULE
|
||||
|
@@ -12,6 +12,7 @@ GPUDelayFilter="Render Delay"
|
||||
UndistortCenter="Undistort center of image when scaling from ultrawide"
|
||||
NoiseGate="Noise Gate"
|
||||
NoiseSuppress="Noise Suppression"
|
||||
InvertPolarity="Invert Polarity"
|
||||
Gain="Gain"
|
||||
DelayMs="Delay (milliseconds)"
|
||||
Type="Type"
|
||||
|
49
plugins/obs-filters/invert-audio-polarity.c
Normal file
49
plugins/obs-filters/invert-audio-polarity.c
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <obs-module.h>
|
||||
|
||||
static const char *invert_polarity_name(void *unused)
|
||||
{
|
||||
UNUSED_PARAMETER(unused);
|
||||
return obs_module_text("InvertPolarity");
|
||||
}
|
||||
|
||||
static void invert_polarity_destroy(void *data)
|
||||
{
|
||||
UNUSED_PARAMETER(data);
|
||||
}
|
||||
|
||||
static void *invert_polarity_create(obs_data_t *settings, obs_source_t *filter)
|
||||
{
|
||||
UNUSED_PARAMETER(settings);
|
||||
return filter;
|
||||
}
|
||||
|
||||
static struct obs_audio_data *invert_polarity_filter_audio(void *unused,
|
||||
struct obs_audio_data *audio)
|
||||
{
|
||||
float **adata = (float**)audio->data;
|
||||
|
||||
for (size_t c = 0; c < MAX_AV_PLANES; c++) {
|
||||
register float *channel_data = adata[c];
|
||||
register float *channel_end = channel_data + audio->frames;
|
||||
|
||||
if (!channel_data)
|
||||
break;
|
||||
|
||||
while (channel_data < channel_end) {
|
||||
*(channel_data++) *= -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
UNUSED_PARAMETER(unused);
|
||||
return audio;
|
||||
}
|
||||
|
||||
struct obs_source_info invert_polarity_filter = {
|
||||
.id = "invert_polarity_filter",
|
||||
.type = OBS_SOURCE_TYPE_FILTER,
|
||||
.output_flags = OBS_SOURCE_AUDIO,
|
||||
.get_name = invert_polarity_name,
|
||||
.create = invert_polarity_create,
|
||||
.destroy = invert_polarity_destroy,
|
||||
.filter_audio = invert_polarity_filter_audio,
|
||||
};
|
@@ -20,6 +20,7 @@ extern struct obs_source_info async_delay_filter;
|
||||
#if SPEEXDSP_ENABLED
|
||||
extern struct obs_source_info noise_suppress_filter;
|
||||
#endif
|
||||
extern struct obs_source_info invert_polarity_filter;
|
||||
extern struct obs_source_info noise_gate_filter;
|
||||
extern struct obs_source_info compressor_filter;
|
||||
|
||||
@@ -40,6 +41,7 @@ bool obs_module_load(void)
|
||||
#if SPEEXDSP_ENABLED
|
||||
obs_register_source(&noise_suppress_filter);
|
||||
#endif
|
||||
obs_register_source(&invert_polarity_filter);
|
||||
obs_register_source(&noise_gate_filter);
|
||||
obs_register_source(&compressor_filter);
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user