当前位置: 首页 > news >正文

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

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 it
    params.push_back(std::make_unique<juce::AudioParameterFloat>("Gain", "Gain", 0.0f,1.0f,0.5f));//id,name,min.max.startValue
    return{ 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 slider
    gainSliderAtachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"Gain",gainSlider);

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

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

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

相关文章:

  • IDC TechScape中国数据安全发展路线图,美创两款产品获重点推荐
  • python语言通过neo4j构建知识图谱
  • JAVA基于微信小程序的校园信息共享平台毕业设计-附源码211615
  • javaweb医院科室管理系统springboot
  • 深度学习(PyTorch)——长短期记忆神经网络(LSTM)
  • 外贸怎么在谷歌搜索客户?
  • L73.linux命令每日一练 -- 第十章 Linux网络管理命令 -- dig和host
  • 用MicroPython开发ESP32-用TFT-LCD(ST7735S)显示图像
  • off-by-one+overlapped chunk
  • Debian/Ubuntu/Kali 如何安装 Spotify 音乐白嫖神器
  • Vue-Vue实例
  • JVM外部调试工具:JMXTerm
  • super和this的区别
  • 为什么软件工程项目普遍不重视可行性分析?
  • 亚马逊云购买和配置苹果MacOs系统的云主机
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ESLint简单操作
  • IDEA 插件开发入门教程
  • JavaScript中的对象个人分享
  • socket.io+express实现聊天室的思考(三)
  • Spring Boot快速入门(一):Hello Spring Boot
  • SpringBoot几种定时任务的实现方式
  • Spring声明式事务管理之一:五大属性分析
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue--为什么data属性必须是一个函数
  • vue自定义指令实现v-tap插件
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 第十八天-企业应用架构模式-基本模式
  • 如何用vue打造一个移动端音乐播放器
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​学习一下,什么是预包装食品?​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #1014 : Trie树
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4.10~4.16)
  • (a /b)*c的值
  • (C语言)二分查找 超详细
  • (Oracle)SQL优化技巧(一):分页查询
  • (独孤九剑)--文件系统
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (三) diretfbrc详解
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)认识微服务
  • (转)Mysql的优化设置
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net Application的目录
  • .Net IOC框架入门之一 Unity
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET运行机制