JUCE框架教程(6)——通过AudioProcessorValuetTeeState链接数据和UI

上节我们讲到了plugin的基本结构,processor和editor
https://blog.csdn.net/m0_56699208/article/details/126533353?spm=1001.2014.3001.5501
接下来我们会用一个叫AudioProcessorValuetTeeState的类来链接他们。

首先,我们进入PluginProcessor.h文件,添加一个AudioProcessorValuetTeeState类。

juce::AudioProcessorValueTreeState apvts;

在private下面,构建一个函数,返回值为juce::AudioProcessorValueTreeState::ParameterLayout
(JUCE的参数,数据)

private:juce::AudioProcessorValueTreeState::ParameterLayout createParameters();

回到PluginProcessor.cpp文件,末尾编写这个函数。

juce::AudioProcessorValueTreeState::ParameterLayout  PlguinDemoAudioProcessor::createParameters() {std::vector<std::unique_ptr<juce::RangedAudioParameter>> params;  //points of RangedAudioParameters//add params element to itparams.push_back(std::make_unique<juce::AudioParameterFloat>("Gain", "Gain", 0.0f,1.0f,0.5f));//id,name,min.max.startValuereturn{ params.begin(),params.end() };
}

注意:
1.PlguinDemo是我这个项目的名字,你应该写成自己项目名字+AudioProcessor createParameters()
2.我们创建了一个指针vector,用来存放各个参数
3.我们使用push_back()来新建参数,最后再return出去

写完这些,我们发现上方出现了报错,这是因为类AudioProcessorValuetTeeState不存在默认构造函数造成的

此时我们需要添加一个构造函数:
添加前:

PlguinDemoAudioProcessor::PlguinDemoAudioProcessor()
#ifndef JucePlugin_PreferredChannelConfigurations: AudioProcessor(BusesProperties()
#if ! JucePlugin_IsMidiEffect
#if ! JucePlugin_IsSynth.withInput("Input", juce::AudioChannelSet::stereo(), true)
#endif.withOutput("Output", juce::AudioChannelSet::stereo(), true)
#endif)
#endif
{}

添加后:

PlguinDemoAudioProcessor::PlguinDemoAudioProcessor()
#ifndef JucePlugin_PreferredChannelConfigurations: AudioProcessor(BusesProperties()
#if ! JucePlugin_IsMidiEffect
#if ! JucePlugin_IsSynth.withInput("Input", juce::AudioChannelSet::stereo(), true)
#endif.withOutput("Output", juce::AudioChannelSet::stereo(), true)
#endif), apvts(*this, nullptr, "Parameters", createParameters())//this,null,name,functions
#endif
{}

接下来,我们进行对ProcessorEditor的编写
首先添加一个Slider滑块

juce::Slider gainSlider

在cpp中将这个滑块实例化

 gainSlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);gainSlider.setTextBoxStyle(juce::Slider::TextBoxBelow, true, 100, 50);addAndMakeVisible(gainSlider);
void PlguinDemoAudioProcessorEditor::resized()
{gainSlider.setBounds(getWidth() / 2 - 100, getHeight() / 2 - 50, 200, 100);
}

.h文件中添加用于绑定数据和界面的指针

std::unique_ptr<juce::AudioProcessorValueTreeState::SliderAttachment> gainSliderAtachment;

.cpp

//attach the data to the slidergainSliderAtachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"Gain",gainSlider);

这里,我们使用了之前实例出的apvts,他存在于audioProcessor下
至此,我们成功使用AudioProcessorValuetTeeState链接数据和UI

我们可以在Processor中拿到这个变化的数据,并打印出来

 auto g = apvts.getRawParameterValue("Gain");std::cout << g->load();

JUCE框架教程(6)——通过AudioProcessorValuetTeeState链接数据和UI相关推荐

  1. 从零搭建React全家桶框架教程

    从零搭建React全家桶框架教程 源码地址:https://github.com/brickspert/react-family 欢迎star 提问反馈:blog 原文地址:https://githu ...

  2. 2020 年最具潜力的 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(附链接)...

    来源:AI开发者 本文约为7600字,建议阅读10分钟 本文给开发者提供了详细的各领域工具并整理了清单11 种极具潜力的 AI 工具类型. 工欲善其事必先利其器,这也是大部分开发者在日常工作中最重要开 ...

  3. Spring 框架教程

    Spring 框架教程 Spring Framework是最流行的Java EE框架之一.本文面向希望学习Spring框架体系结构的Java开发人员,它的核心组件以及属于Spring框架伞的各种项目. ...

  4. API接口开发其实特简单,Python Flask Web 框架教程来了

    大家好,日常工作中,无论你是数据工程师.数据挖掘工程师,甚至数据分析人员,都不可避免的与他人进行数据交互,API接口提供数据是最常见的形式. 今天我给大家分享 Python Flask Web 框架教 ...

  5. 26Play框架教程2学习笔记

    Play框架教程2学习笔记 文章目录 1 play框架01 1.1 概述 1.2 特性 1.2.1 无缝集成现有开发环境 1.2.2 热重载和修改Bug 1.2.3 简单的无状态MVC架构 1.2.4 ...

  6. jfinal框架教程

    jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...

  7. Unittest自动化测试框架教程(四)——Python中的数据驱动测试DDT

     " 数据驱动测试DDT(Data Drivern test),是自动化测试领域优势中亮眼的闪光点,在unittest测试框架中对数据驱动更是提供了强大的支持,文章通过基础概念的引入,介绍了 ...

  8. 物联网APP开源框架教程(二)—— iOS APP开发

    如何使用核心模块开发设备控制功能(iOS APP开发) 导读:本次教程我们在开源框架代码基础上做一个控制gokit红灯开的App,Wi-Fi设备接入机智云客户端调试工具包括 iOS Demo 和And ...

  9. 26Play框架教程1学习笔记

    Play框架教程1学习笔记 文章目录 1play教程 第一课 1.1 play是什么 1.2 REST风格是什么 1.3 play的优点和缺点 2 play教程 第二课 2.1 搭建开发环境 2.1. ...

  10. [超详细图文]小米/MIUI12开发版/安卓10通用magisk/面具安装EdXposed框架教程(以红米K20为例)

    MIUI12开发版安装EdXposed框架(以红米K20为例) MIUI12开发版通用安装EdXposed框架教程 0.做好备份 1.确认你的MIUI是开发版并解锁BL.开启Root权限 2.安装Ma ...

最新文章

  1. 可微分的「OpenCV」:这是基于PyTorch的可微计算机视觉库
  2. jmeter 自定义参数_jmeter参数化并在jenkins上执行
  3. C语言使用递归算法实现Sudoku Solver算法(附完整源码)
  4. java内存系列:测试JDK最大内存
  5. mac安装brew简单方法
  6. np.unique( )--去除数组中的重复数字,并进行排序之后输出
  7. adjustViewBounds属性
  8. 幸福框架:模式驱动开发
  9. 一个简单的BP神经网络matlab程序(附函数详解)
  10. 玩耍redis遇到的问题之记录
  11. 培养一个数据人才需要多少年?
  12. 【免费课程】小白学数据挖掘与机器学习
  13. WindowsAPI 之 CreatePipe、CreateProcess
  14. 大数据应用案例,告诉你最真实的大数据故事
  15. 排列组合问题的通用算法
  16. 微服务拆分原则之 AKF
  17. 数值分析实习作业(各种插值函数与积分公式的python代码实现)
  18. 什么是宏任务与微任务?
  19. outlook 设置延迟发送邮件
  20. 疫情期间怎么在家里创业?推荐一个平台

热门文章

  1. JVM之垃圾回收机制(GC)
  2. 面试必备 | 机器学习这十大算法你确定会了吗?
  3. 【概率论基础01】:通俗解释,啥叫随机变量?
  4. 公路建设项目管理软件
  5. fgo服务器维护更新,fgo命运冠位指定活动维护公告 12月2日更新
  6. php 泛型编程,泛型是什么,C++泛型编程又是什么?
  7. 浙大mooc翁凯 C语言笔记
  8. 傲腾内存 可以用ghost系统_英特尔傲腾是什么?让你秒懂英特尔傲腾技术
  9. 随机森林算法工作原理
  10. petalinux设计流程