OBS插件学习入门:一个非常简单的、调节音量的filter
一个非常简单的、调节音量的filter,非线性调节:
#include#include struct volume_data {obs_source_t *context;size_t channels;float factor; };static const char *volume_name(void *unused) {UNUSED_PARAMETER(unused);return obs_module_text("Volume"); }static void volume_destroy(void *data) {struct volume_data *gf = data;bfree(gf); }static void volume_update(void *data, obs_data_t *s) {struct volume_data *gf = data;double val = obs_data_get_double(s, "volume");gf->channels = audio_output_get_channels(obs_get_audio());gf->factor = (float)val; }static void *volume_create(obs_data_t *settings, obs_source_t *filter) {struct volume_data *gf = bzalloc(sizeof(*gf));gf->context = filter;volume_update(gf, settings);return gf; }static struct obs_audio_data *volume_filter_audio(void *data, struct obs_audio_data *audio) {struct volume_data *gf = data;const size_t channels = gf->channels;float **adata = (float**)audio->data;const float factor = gf->factor;for (size_t c = 0; c < channels; c++) {if (audio->data[c]) {for (size_t i = 0; i < audio->frames; i++) {adata[c][i] *= factor;}}}return audio; }static void volume_defaults(obs_data_t *s) {obs_data_set_default_double(s, "volume", 1.0f); }static obs_properties_t *volume_properties(void *data) {obs_properties_t *ppts = obs_properties_create();obs_properties_add_float_slider(ppts, "volume", "Volume", 0, 1.0, 0.1);UNUSED_PARAMETER(data);return ppts; }struct obs_source_info volume_filter = {.id = "volume_filter",.type = OBS_SOURCE_TYPE_FILTER,.output_flags = OBS_SOURCE_AUDIO,.get_name = volume_name,.create = volume_create,.destroy = volume_destroy,.update = volume_update,.filter_audio = volume_filter_audio,.get_defaults = volume_defaults,.get_properties = volume_properties, };
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
