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();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值