博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OBS插件学习入门:一个非常简单的、调节音量的filter
阅读量:6867 次
发布时间:2019-06-26

本文共 1988 字,大约阅读时间需要 6 分钟。

一个非常简单的、调节音量的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,};

转载于:https://www.cnblogs.com/swnuwangyun/p/8117135.html

你可能感兴趣的文章
linux内核驱动module_init解析(1)
查看>>
linux常用命令&以及帮助命令
查看>>
apachebench的简单使用
查看>>
Appium完整安装教程
查看>>
python--元组tuple
查看>>
最大连续子数组
查看>>
用android模拟器Genymotion定位元素
查看>>
mysql函数大全
查看>>
子查询:相关子查询、无关子查询
查看>>
Python-使用Magellan进行数据匹配总结
查看>>
jersey rest webservice
查看>>
java 获取指定日前的前一天
查看>>
position
查看>>
ios内存管理(转)
查看>>
H5 离线缓存的用法
查看>>
我们为什么需要Windows Workflow Foundation?(摘)
查看>>
五笔打字学习
查看>>
vector
查看>>
printf("%d\n",printf("%d",printf("%d",i)));
查看>>
最小转弯问题
查看>>