首页 > 编程语言 >小计划:AudioNode

小计划:AudioNode

时间:2023-07-17 23:35:35浏览次数:29  
标签:... 插件 void float 计划 AudioNode public channel

核心利用:

MonoBehaviour::OnAudioFilterRead(float[] data, int channel)

​ 这个函数会以DSP常用的形式输出声音数据,即波形构成本身。通过对这些数据的操控可以实现对音频本身的控制。

​ 基于以上信息,可以在unity内部进行DSP编程,但仅能在unity内部使用。因此可以定义一个类来在unity内专门处理DSP。

​ 缺点:优化差,未经过Burst优化的代码极其容易造成严重的延迟。


​ 基于以上信息,可以尝试制作一个基于模块进行的声音处理。

​ 在MIDI CC协议中,信息交互的控制是基于特定通道的,因此可以借鉴这一点来实现控制

public class ccMap{
    public float[] channel = new float[32];
}

​ 如果当前插件需要用外部控制信息的时候,只需在channel数组内指定一个位置并读取即可。而外部插件连线需要将控制数据输出给当前插件时仅需要找到对应channel数组位置调整即可。

其实channel数组倒也是没必要限制在32,只不过MIDI CC协议在最早的时候给的通道也就128,这128通道只要不过分基本用不干净的,更何况我这个是小项目,基于我对效果器参数的理解来说,可控参数估摸着也不会超过32个吧,又不是serum这种大头玩意(笑)

因此基于以上信息,一个模块父类将会有至少以下信息:

public class pluginBase{
    public ccMap map;
    public bool isActive;
	public float[] inData;
    public float[] outData;
    void active(){}
}

​ isActive: 用于确认该插件是否启用,如果为否则状态为bypass,将会把inData数据直接传输给outData并输出至下一个,即active()的功能。


基于模块父类上,一个模块应该具备这样子的框架:

public class plugin: pluginBase{
    public plugin audioFrom, audioTo;
    public class modulation{
        public plugin[] to;
        public float[] channel;
    }
    public void output(){}
    void Function1(){/*Implementation...*/}
    void Function2(){/*Implementation...*/}
    void Function3(){/*Implementation...*/}
	//...
}

​ audio前缀代表着音频流,通常情况下,仅允许有一个输入口和一个输出口,否则容易发生数据混合但不能确定要如何处理混合数据的情况。如果需要混合数据则需编写额外模块来处理。

​ [等待更新...]

标签:...,插件,void,float,计划,AudioNode,public,channel
From: https://www.cnblogs.com/ComputerEngine/p/17561610.html

相关文章

  • 省选计划(第一周)
    知识回顾:巩固:生成树,DP,分层图,简单数论,线段树。深入研究:网络流。简单了解/没学明白:FFT。练题:P6144[USACO20FEB]HelpYourselfP定义\(f_r\)为以\(r\)结尾的线段集合的总贡献。对于一个线段\([l,r]\)可以考虑分成\([1,l)\),\([l,r]\)和\([r+1,n]\)三种情......
  • 省选计划(第三周)
    知识回顾:巩固:概率DP,错排,组合数深入研究:组合数,后缀数组,tarjan,2-SAT简单了解/没学明白:练题:[ABC280F]PayorReceive概率DP。定义\(f_i\)为把怪物打成i滴血的期望攻击次数。令\(p=\frac{p}{100}\)。则\(f_i=f_{i+2}\cdotp+f_{i+1}\cdot(1-p)+1\)。最终......
  • 省选计划(第二周)
    知识回顾:巩固:二分,倍增,优化DP,莫队,分数规划,网络流,二分图,贪心,set/map,KMP深入研究:分治(线段树分治),后缀数组,费用流简单了解/没学明白:线性基,边分治,数位DP,博弈论练题:[SCOI2015]国旗计划直接模拟复杂度\(O(n^2)\),显然会超时,于是考虑倍增。定义\(st_{i,j}\)表示从i这条......
  • 省选计划(第五周)
    知识回顾巩固:线段树,贪心深入研究:数论,容斥,除法分块,根号分治简单了解:lucas,prufer序列,莫比乌斯反演练题P2606[ZJOI2010]排列计数可以发现这符合小根堆的性质,把它建出来。定义\(f_u\)为以u为根的子树的方案数,转移方程为:\[f_u=\dbinom{siz_u-1}{siz_{2\cdotu}}\c......
  • 省选计划(第四周)
    第四周知识回顾巩固:2-SAT深入研究:概率与期望简单了解/没学明白:练题P3825[NOI2017]游戏很麻烦的2-SAT。如果没有x,就是个传统的问题。然后我们发现d的取值很小,考虑对于每个x枚举其类型为a还是c。为什么不枚举b呢?因为a、c已经包含b了。连边的时......
  • 省选计划 (第七周)
    练了好久CF&AT的题,现在要回归省选计划了!知识回顾巩固:二维树状数组深入了解:可持久化数据结构简单了解/没学明白:练题P3567[POI2014]KUR-Couriers主席树模板题。如果左子树的个数大于右子树的个数,则递归左子树,否则右子树。最后到达单点的时候就判断一下个数是否......
  • 省选计划(第六周)
    知识回顾巩固:Lucas,网络流,二分图深入研究:背包DP,树形DP,区间DP,状压DP。简单了解/没学明白:博弈论,插头DP练题Workingroutine读完题后以为矩阵可以相邻,费了一个小时去写...(可恶直接暴力交换复杂度是\(O(nmq)\),无法接受,考虑链表。对于每个点i,定义\(right_i\)为i的......
  • 假期计划
    为表假期好好学习之决心,特此制定一份基于大尺度宏观计划和小尺度每日时间规划的假期学习计划。·每日时间规划\(7:30\)\(ard.\)起床,洗刷,吃饭。$8:30$开始上午学习具体学习内容:1:各科假期作业(语文、数学、英语、物理、化学、地理)2:学习优先级(语文\(\rightarrow\)英语\(\r......
  • 我的投票计划
    《我的投票计划》     https://tieba.baidu.com/p/8505205758      @卡西地   ,  我看到了你发的 25楼,   现在没了, 截图在下面 。 我现在回复你,  多艾特几次会给百度服务器造成过大的负担吗 ?   吧务还要操心这个 ? ......
  • 一些假期计划
    不设密码,公开寻求催卷.jpg0715-0813可能乱的如同草纸.jpgTODO:作业:每科六套卷子英语六套听力,报纸《百年孤独》语文50则名言想做的事:物理必修二+选修1的考点。然后碰到困难的章节写写必刷题。化学必修一的必刷题应该还剩半本,然后后必修二的前半。预习选修一。英语把单......