OBS插件学习入门:一个非常简单的、调节音量的filter
一个非常简单的、调节音量的filter,非线性调节:
#include <obs-module.h>
#include <math.h> 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 = ; c < channels; c++) {
if (audio->data[c]) {
for (size_t i = ; 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", , 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,
};

OBS插件学习入门:一个非常简单的、调节音量的filter的更多相关文章
- phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识
16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...
- 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破
我在阿里这仨月 Alibaba 试用期是三个月,转眼三个月过去了,也到了转正述职的时间.回想这三个月做过的事情,很多很杂,但还是有重点. 本文谈一谈工作中遇到的各种场景,需要用到的一些前端知识,以及我 ...
- 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建
salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建 VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...
- SQL 数据库 学习 007 通过一个示例简单介绍什么是字段、属性、列、元组、记录、表、主键、外键 (上)
SQL 数据库 学习 007 通过一个示例简单介绍什么是字段.属性.列.元组.记录.表.主键.外键 (上) 我们来介绍一下:数据库是如何存储数据的. 数据库是如何存储数据的 来看一个小例子 scott ...
- Dubbo入门介绍---搭建一个最简单的Demo框架
Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...
- Win32 程序开发入门:一个最简单的Win32程序
一.什么是 Win32 Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境. 这里再介绍下 Win32 Applicatio ...
- 001.Delphi插件之QPlugins,一个最简单的插件
安装QPlugins里面的Demo,复制粘贴着写了一个最简单的插件,看看好不好用 EXE代码如下: unit Main_Frm; interface uses Winapi.Windows, Wina ...
- 2,turicreate入门 - 一个简单的回归模型
turicreate入门系列文章目录 1,turicreate入门 - jupyter & turicreate安装 2,turicreate入门 - 一个简单的回归模型 3,turicrea ...
- Python学习 - 编写一个简单的web框架(一)
自己动手写一个web框架,因为我是菜鸟,对于python的一些内建函数不是清楚,所以在写这篇文章之前需要一些python和WSGI的预备知识,这是一系列文章.这一篇只实现了如何处理url. 参考这篇文 ...
随机推荐
- C++实现去掉string字符串前后的空白字符
C++标准库提供的字符串类string没有提供类似CString中Trim方法,该方法功能为去除字符串前后的空白字符.利用string自身一些方法可以很容易实现该功能. 如下: void Trim(s ...
- Linux系统——Raid磁盘阵列
Raid磁盘阵列 作用:解决磁盘速度.安全问题 Raid原理 Raid0 写入速度极快,有几块硬盘,写入速度就近似几倍,但是安全性极差,只要一块盘坏了,所有盘的数据全部坏掉,最少两块硬盘组合 性价比最 ...
- 树莓派搭建Git服务器
目录 安装ssh 安装git-core 新增git用户 设置git用户目录 [服务端]设置git仓库 [客户端]设置git仓库 设置ssh登录 安装ssh sudo apt-get install s ...
- JSM 学习(一)
JMS 支持两类消息传送模型:点对点模型和发布/订阅模型.又称这些消息传送模型为消息传送域.点对点模型和发布订阅模型分别缩写为p2p和Pub/Sub.发布订阅模型用于一对多消息广播,点对点模型用于一对 ...
- 1 安装企业wiki:confluence
使用wget下载命令下载文件. 下载成功使用dir可以看到文件目录 [root@localhost usr]# diratlassian-confluence-6.3.1-x64.bin bin ...
- iOS开发之NSUserDefaults
在ios中偏好设置保存用户配置的对象 //NSUserDefaults读取 //获取标准函数对象 //通过对象获取名称下NSMutableDictionary数据 NSUserDefaults *de ...
- iOS开发之XMPPFramework开发基础介绍
1 使用iPhoneXMPP实例 2 修改xmppstream设置 3 基础协议的介绍 协议 协议简介 XEP-0009 在两个XMPP实体间传输XML-RPC编码请求和响应 XEP-0006 使能与 ...
- Hexo博客配置笔记
安装Hexo npm install hexo-cli -g cd /blog hexo init 安装next主题 git clone https://github.com/iissnan/hexo ...
- Autowire
Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found ...
- BIOS/MBR UEFI/GPT关系与区别-资料整理
---恢复内容开始--- 关于 BIOS/MBR UEFI/GPT他们之间的关系一直比较疑惑, 首先一点前提 BIOS UEFI 是一类,是控制硬件,引导启动的:MBR GPT是硬盘的分区定义.. 后 ...