LeetCode | 1. 两数之和
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
题解123456789101112131415161718class Solution{public: vector<int> twoSum(vector<int> &nums, int target) { unordered_map<int, int> hashtable; for (int i = 0; i < nums.size(); i++) { auto it = hashtable.find(target - nums[i]); if (it != hashtable.end()) { return {it-&g ...
CSS知识点
Flexbox按照两个轴进行排列设置display: flex中就会生成主轴和垂轴
123456div{ display: flex; justify-content: center //在主轴方向居中 align-items: center //在垂轴方向居中 flex-direction: row; //主轴默认为水平方向,可以修改为垂直方向column}
有导航栏nav和内容div123456789101112div.main{ display: flex; flex-wrap: wrap; //宽度不足的时候实现垂直方向两栏布局}div.main nav{ flex: 0 0 300px;}div.main div.content{ flex: 1 0 0}
搜索框12345678form{ display: flex;}input[type = "text]: focus{ background: white; f ...
JavaScript知识点
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
基本数据类型
Number
BigInt
String
Boolean
Undefined
Null
Object
Symbol
作用域1234567function a() { if (true) { let b = 1 } console.log(b)}a()
ES6新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。let作为一个定义块级作用域的方法感觉更符合之前学的其它语言造成的直觉…可以简单地理解为在只在最近的{}中有效,比如我们在循环中常用来计数的i。所以以上的代码是会报错的,因为这个b在if里,外面是拿不到的。
闭包
每一个函数在声明时都通过一个叫做 [[Scopes]] 的对象收集外部变量,这个 Scopes 对象内部有一个叫做 Cl ...
计网知识点
GET和POST的区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
三次握手四次挥手3-4
React Hooks(未完)
前言我的Bilibili频道:香芋派Taro我的博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
什么是Hooks?React Hooks的意思是,组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码”钩”进来。以下是React为我们提供的默认的四种最常用的钩子:
useState()
userContext()
userReducer()
useEffect()
useState(): 状态勾子123456789101112131415import React, {useState} from 'react'const AddCount = () => { const [ count, setCount ] = useState(0) const addcount = () => { let newCount = count setCount(newCount+=1) ...
聊聊常用的物理建模声音合成算法——Karplus-Strong
前言我的Bilibili频道:香芋派Taro我的博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
(阅读此文章最好有一点点的DSP基础
你会算复利吗?大家的初中数学老师应该都教过银行的复利怎么计算吧?复利的一个特征呢就是当年的利息 = 上一年的本金 + 上一年的利息(图中的公式还计算了当年的新存款/取款,即**x[n]**),与单利最大的不同就是每年都会把上一年产生的利息重新加入总额再计算利息。
现在我们来换一种理财方式假设小明觉得银行的活期利率太拉了,于是跟风在2006年1月1日购买了一款三年封闭管理的基金(自动续期),然后基金经理全仓梭哈了中石油,结果喜闻乐见地遇上了股灾,基金以每年-30%的情况在亏损。非常幸运的是,小明只买了1块钱,那么每年1月1日他账户里的钱就是这样的(账户存款为0即为钱都在基金里拿不出来)。
把他画成系统框图又是什么样子如果有一些DSP基础的同学应该很容易发现这其实就是一个循环,如果我们代入一下实际数值,得到的结果就是小明的账户发生的变化。这里的x[n ...
同时拥有自然的原声和需要的染色——聊聊平行压缩
前言我的Bilibili频道:香芋派Taro我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
最近可能要准备一个面试,所以需要喜闻乐见地再整理一下自己的知识库,近期可能会更新的比较频繁。今天我们来聊聊“平行压缩”以及一些骚操作,平行压缩相比于串联压缩(用一个接一个的压缩来处理人声去控制它的动态)有些不一样,它并不是以控制动态为目的,而是通过叠加多层声音的方式来达到一些音色上的效果。使用的方式呢就是把原声轨道发送到多个压缩器轨道上,然后把这些处理过的音轨再叠加到一起。通过把这样多轨不一样音色、风格、律动的声音按照一定比例混合后得到一个你想要的效果。它的优点就是能够保留原声那种自然的感觉。所以平行压缩经常用来对鼓组进行混音来保留鼓组本身的动态律动和打击感。所以你可以这样理解串联压缩为了控制动态,平行压缩为了取得音色。
实战一下首先我们在调音台把原声轨分别发送到两个压缩器轨道。比如第一个压缩我用一个CLA-2A,一个经典的OPTP光电压缩,较为平缓和温暖,准备把它作为主体。第二个压缩呢用一个FET场效应管压缩CLA-76,来给声音带 ...
JUCE合成器设计-②ADSR
前言阅读此教程需要一定的C++和JUCE基础。我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
上次我们搭完了合成器的基本框架,这一章我们讲ADSR的搭建。
来到SynthVoice.h中的private,添加如下:
123456...private: juce::dsp::Oscillator<float> osc { [](float x) {return std::sin(x);} }; juce::dsp::Gain<float> gain;};...
在SynthVoice的renderNextBlock前补充prepareToPlay函数同时补充isPrepared用于判断:
12345678910111213141516//SynthVoice.hclass SynthVoice : public juce::SynthesiserV ...
JUCE合成器设计-①认识Synthesiser Class
前言阅读此教程需要一定的C++和JUCE基础。我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
最近学生的合成器设计课要结课了,为了帮他更好地梳理一遍(也为了帮我自己更好地梳理一遍…),所以还是开了这个坑…从零到一来聊聊怎么去搭建一个合成器。当然在这之前我还是希望你有一定的C++基础,最好知道什么指针什么是虚函数balabala的,否则可能阅读起来还是比较痛苦的。
创建项目创建一个叫做synthTutorial的Plugin项目:
如下创建SynthVoice.h/.cpp:
如下创建SynthSound.h:
确保勾选了这些选项:
记得添加dsp module:
完成SynthSound和SynthVoice的基本框架SynthSound参考官方doc:https://docs.juce.com/master/classSynthesiserSound.html代码如下:
123456789101112//SynthSound.h ...
如何在宿主保存工程的时候同时保存你的插件状态?
前言阅读此教程需要一定的C++和JUCE基础。我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
最近有人私聊我问了我这个问题,不得不让我再吐槽一遍官方的turotial,官网的教程目前还是这个样子的,emmm,依然没有更新:
那咋办?所以很多已经开始使用apvts的小伙伴就很迷惑了?那我怎么保存自己的插件状态?来到PluginProcessor.cpp中的getStateInformation()和setStateInformation() 这两个函数中,添加上如下这些:
1234567891011121314void yourPluginsAudioProcessor::getStateInformation (juce::MemoryBlock& destData){ juce::MemoryOutputStream stream(destData, false); apvts.state.writ ...