如何在JUCE中优雅地使用APVTS管理你的参数
前言阅读此教程需要一定的C++和JUCE基础。我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
其实我一直觉得JUCE官方做的教程很烂…官网上的tutorial甚至还是在用xml做参数存储,目前最常用的apvts连一个影子都没见着,所以在这里整理一下。
新建一个Plugin模版
PluginProcessor.h在public中添加以下成员函数:
12345public:...... static juce::AudioProcessorValueTreeState::ParameterLayout createParameterLayout(); juce::AudioProcessorValueTreeState apvts { *this, nullptr, "Parameters", createParameterLayout() };
PluginPro ...
入门JavaScript中遇到的一些小坑(更新中···)
比较运算符当我们对Number做比较时,可以通过比较运算符得到一个布尔值:
1232 > 5; // false5 >= 2; // true7 == 7; // true
实际上,JavaScript允许对任意数据类型做比较:
12false == 0; // truefalse === 0; // false
要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。
另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
1NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:
12345isNaN(NaN); // true``` 最后要注意浮点数的相等比较:```js1 / 3 === (1 - 2 / 3); // false
这不是J ...
R&B键盘技巧小总结
前言最近正好在做很多R&B曲风的改编,吉他可以薅好homie,但着实感觉自己三脚猫流行键盘手的功夫有些不太够用。恰逢施老师诈尸更新了课程,故在此总结供自己编曲时参考,同时做分享用。我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
和弦音解决二音滑到三音
根音滑到二音## 三音滑到二音在小和弦上色彩更加明显为了humanize,可以先从二音滑到三音,再从三音滑回二音,例如下图最后C->F
六音滑到七音(大和弦)
五音滑到六音(属和弦)
四音滑到五音(小和弦)挺有意思,个人感觉这很neo-soul(因为m11和弦)
练习
使用blues音装饰懂得都懂
经过和弦在目标和弦之前加上高半音/低半音同类和弦比如非常常见的3m->b3m->2m,我的理解就是三全音替换(降三级替代六级)
在大和弦之前加上高半音/低半音的属和弦把任何和弦临时升高或降低半音并返回此技巧最好使用在较为稳定的和弦上,不宜太过有张力,例如属和弦,增 ...
EQ!使用JUCE设计一个简单的低通&高通滤波器/均衡器
前言阅读此教程需要一定的C++和JUCE基础,如果没有可以翻阅我以往的视频和文章。核心内容为EQ效果器的设计。Github地址:https://github.com/TaroPie0224/EqTutorial(建议先gitclone后对照学习)我的Bilibili频道:香芋派Taro我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
在这篇教程中,我们将会带大家设计一个非常简单的EQ效果器。他仅有两个滤波器,一个高通滤波器,一个低通滤波器。你可以通过它来控制截止频率和Q值。让我们开始吧!
准备创建一个新的plugin项目,名字任意。
记得添加dsp模块:
如果以上的步骤都没做错的话,左侧的Moudles看起来是这样子的:
算法配置参数首先,打开 PluginProcessor.h 准备一个 AudioProcessorValueTreeState(apvts) 对象,然后往其中添加我们所需要的参数。这部分不再细讲,不明白的同学可以回去翻看之前的教程或者回看我Gain效果器制作的那期视频。「音频编程」手把手带你写一个增益效果器( ...
这也是Slider?使用JUCE设计NumberBox来交互调整参数
前言阅读此教程需要一定的C++和JUCE基础,如果没有可以翻阅我以往的视频和文章。核心内容为基于Slider的一种新UI交互设计(Ableton Style)。Github原地址:https://github.com/szkkng/NumberBox我的Bilibili频道:香芋派Taro我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
准备在Projucer中的添加创建一个GUI project命名为NumberBox:添加NumberBox的.h/.cpp文件:此时目录如下:
基本模型在这一章,我们将设计NumberBox最基础的部分。
自定义SliderNumberBox的本质依旧是一个Slider,通过拖拽来改变它的值,所以我们可以通过自定义juce::Slider来实现。首先我将会展示.h/.cpp中所有的代码,然后我会在后文对其做出解释。
123456789101112131415//NumberBox.h#pragma once#include <JuceHeader.h>class NumberBox ...
高级炫酷的旋钮!使用JUCE设计一个Rotary Slider(Ableton Style)!
前言阅读此教程需要一定的C++和JUCE基础,如果没有可以翻阅我的其他文章和视频教程。核心内容为UI设计,Slider样式的高阶设计技巧。Github原地址:https://github.com/szkkng/ModernDial我的Bilibili频道:香芋派Taro我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
准备打开Projucer并创建一个新项目。因为这篇教程只涉及到UI部分,所以我们选择”GUI”模版即可。
确保这些文件都在Source目录下:
至此所有的准备都已完成,让我们开始吧!
旋钮在这个章节中,我们会设计这个旋钮的基础部分。
自定义Slider首先,让我们准备一个从Slider class继承的Dial class,同时override一些函数。
1234567891011121314151617181920212223242526272829303132333435363738394041424344#pragma once#include <JuceHeader.h>class Dial : ...
混响!使用JUCE的DSP模块制作基础的混响效果器
前言阅读此教程需要一定的C++和JUCE基础,如果没有可以翻阅我的其他文章和视频教程。核心内容为JUCE的DSP模块的使用以及其基本的书写格式,Reverb模块的使用,自制旋钮的设计。Github原地址:https://github.com/szkkng/SimpleReverb我的Bilibili频道:香芋派Taro我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
建立项目打开Projucer,创建一个新的项目叫做SimpleReverb,记得对juce_dsp打上勾,以此来在项目中使用JUCE的DSP库。
DSPAPVTS我十分推荐使用APVTS(AudioProcessorValueTreeState)来管理各种参数,因为这样做会比使用传统的方法简单很多。首先如下来创建一个APVTS对象:
1234567class SimpleReverbAudioProcessor : public juce::AudioProcessor{public:・・・static juce::AudioProcessorValueT ...
使用Hexo在Github Pages上部署你的个人主页(Mac版)①
使用Hexo在Github Pages上部署你的个人主页(Mac版)①由于网络上大部分这类教程都是基于Win的,作者在Mac上部署时遇到了很多不一样的情况,踩了很多坑,故制作此教程。
一、安装Git1. 查看是否安装Git,在终端输入:1git
如果安装过则会弹出:
123456789101112131415161718192021222324252627282930313233343536373839404142434445usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tr ...