ADAU1701(含A2B)的开发详解六:调音效的常用算法补漏(21个例程)

编程入门 行业动态 更新时间:2024-10-14 04:30:11

ADAU1701(含A2B)的开发详解六:调音效的常用<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法补漏(21个例程)"/>

ADAU1701(含A2B)的开发详解六:调音效的常用算法补漏(21个例程)

作者的话

ADAU1701EVB开发板在未升级成ADAU1701EVB-A2B前,我看了一下写的例程,虽然超过了100个,但我发现还是有很多常用的算法并没有写进来,那就借着这次产品大升级,我把例程也升级一下,加一些常用的,但是没有写的例程。

开发板和仿真器哪里找

某宝搜店铺 “ADI之家”,或者搜型号:ADAU1701EVB-A2B开发板。

硬件准备

ADAU1701EVB-A2B开发板
USBi仿真器
5V2A电源适配器
USB线(MINI USB口)

软件准备

SigmaStudio4.7

用到的例程

1.USBi自检

我们在做DSP调试的时候,经常会不知道USBi知否工作正常?我的程序到底下载进去了没有?那我就帮你做一个最简单的例子来检测。

很简单的一个例程,一个波形发生器,经过一个音量调节模块,到一个电平显示模块。下载程序后,把电平显示模块ON,然后拖动音量模块,你会发现电平随之增加减少,这就证明了USBi是在正常工作,数据传输一切正常。

2.子程序设计小技巧

我们在做SigmaStudio的音频框架程序的过程中,有时候工程会用到非常多的算法模块,把整个软件屏幕都占满了,继续往下做,是不是感觉软件上的图形化编程空间很不够???

怎么办,操作上鼠标拖来拖去,而且也很不好阅读程序,有这种困惑的兄弟们可以仔细阅读一下这一段,我来教你怎么简化编程界面,让你写的程序可以轻松的被每个人阅读。

我准备做一个音量调节的子模块,首先把子模块拖出来:

改名,我为了让兄弟们能很容易的阅读我的工程,我把这个子程序改名为:音量调节

改名就跟WORD里改名一样,点一下就能改。

然后你会发现在主程序页面边上多了一个子页面:

我们点进去,把音量调节模块拖出来,然后再把节点拖出来:

把节点跟音量调节模块连起来。

回到主程序界面:

我们的音量调节子模块就有可以连接的节点啦,我们用他来调节0通道的音量。

下载程序,然后在子程序里去调节音量大小,耳机会听到两个耳朵的响度区别,实验成功!

抛砖引玉,有了这个搞法,你比如要做EQ的时候,就弄个专门的EQ子程序,要做分频的时候,再搞个专门的分频子程序,自己看这方便,其他同事读你的程序也一目了然!我贴一个别人做的工程,你看看子程序是有多么受欢迎。

这个兄弟做的工程,主程序之外还整了7个子程序,输入、滤波、混音、调音量、输出等等等等,非常好阅读,程序界面也清爽干净,点个赞!(这个程序在CODE文件夹11里)

3.增益

音量的增加,我们专业一点的说法,叫增益,要给通道加一个固定的增益怎么做,请看例程:

这个Gain就是增益模块,我在通道1加了10个DB,大家可以接耳机去听,没有加增益的,和加了增益的,两个耳朵听到的音量是明显不同的。

4.静音

很常用的算法模块,我在第二个文档里竟然没有写进去,是我的错,这里补上:

我们可以选择在信号流中加入静音模块,通过对静音模块的操作来实现静音。

下载程序后,mute点√就静音,输出到耳机上,你会听到这个耳朵被静音了。

5.带压摆的静音

在 SigmaDSP 的算法模块中,会发现很多都有带 SW 的模块,拖出来跟不带的一模一样,这个是干嘛的?注意,非常重要,这个带 SW 的就叫带压摆的模块!

以静音这个模块来讲,见下面的图示:

带SW的就是带压摆的算法,压摆什么意思?这个得从这个模块的算法来讲了:

No Slew:不带压摆的静音,启用时,可立即使信号静音,不存在增益调节。相对于压摆算法,这种算法需要较少资源;但是实时切换时,可能导致不连续现象(滴答声和爆裂声)

SW:压摆类算法,可从 0dB 增益平滑过渡至静音,并从静音过渡至 0dB 增益。这种压摆算法由软件(故称为“SW”)实现,比“无压摆”算法要求更多指令。

所以综上所述,无压摆的模块,在音效框架很复杂的时候,实时切换,有可能会出现爆破音。用带压摆的模块就可以很好的解决这个问题。

有些用户可能就要说了,那就全都用带 SW 的模块不就好了?不是这样的,DSP 的内部资源是很有限的,带压摆的算法会占用更多的资源,全都用SW,可能会导致你用不了太多的算法模块了,这里就要有一个权衡,如果用不带压摆的模块, 实测没有爆破音,那就放心大胆的用,如果发现爆破音,再换带压摆的模块来解决吧,我们还是希望 DSP 能用更多的算法模块的。

下面这个例程就是带压摆的静音,因为程序简单,跟普通静音没什么区别,但这个章节技术点一定要掌握。

下载程序后,你感觉不出任何跟例程4的不同,但是这是一个重要的知识点,你的程序做复杂之后,很有可能就出现爆破音,带压摆的器件就是解决之道!

6.分频器-直通分频

分频器,可将一个输入信号分离成两个或更多输出,最简单的就是 T,而在 SigmaDSP 的这些列表里又提供了很多种分频:

两通道输入,通过直通分频,分出4个输出,简单愉快。注意这个分频就是纯直通的,不会做高中低音分哦。

7.分频器-分频音量可调

再做一个分频,这个有点花里胡哨,就是每个通道直接给他加个音量调节,做到每个通道的音量可控。

8.分频器-高低音分频

分频可以是直通的分频,DSP 还可以支持把高低音分离出来,高音走高音通道,低音走低音通道,我们来看一下是怎么做的。

Crossover就是分频器,我把低音都分给了输出0/1,高音分给了输出2/3,下载程序后,2个输出设备发出来的声音非常明显的做了高低音分频。

怎么去调整这个高低音分频的量?点击这个分频模块,进去调:

各种参数,频点,自己试一下就知道啦。

9.分频器-高中低音分频

高中低音分频也有专门的算法模块,我把高给了2和3通道,低音给0,中音给1,动手能力强的兄弟,可以从板子上把0,1,2,3分别飞线出来接喇叭,这样就能有4个喇叭输出,就能感受高中低音喇叭的音效啦。

分频器的设置依然是点开他:

10.延时

专门的延时模块在这里,ADI是这样描述的:

“延迟”(Delay)模块(采用 Z-a 算法)向信号流中添加一个可变延迟,其范围在 1 与 DSP 的最大可用内存之间。 特定延迟模块的最大可用延迟取决于系统可用总数据 RAM,该值由 DSP 处理器数据手册规定。设置“最大”(Max)控制值,分配 DSP 中的内存并保留这些内存,专供这一特定模块使用,降低设计中所有其他延迟模块的可用内存。这是一种编译器指令,可修改汇编代码,47因此,每当更改“最大”设置时,您必须重新编译并下载程序。注意:此规则适用于可分配内存的任何模块(如压缩器模块)。最大延迟值范围局限于 RAM。

OP想说的是,就纯延时,加上自己调,如果想要更多延时,而这个模块调到最大了,那么你可以多拖出来几个,串联就好了。需要注意的是,DSP的内存是有限的,延时很占内容,你可以一直加,直到你下载工程的时候报错,那就是软件告诉你,内存溢出了,你不能这么干,要减模块。

11.移频防啸叫

ADAU1701有专门的移频算法,这个模块多用于防啸叫,我只给一个最简单的例程告诉你在 哪里,至于防啸叫就需要用户自己在自己的声乐环境下细调了。

12.反馈

“反馈”(Feedback)算法在信号通道中生成一个延迟,并将信号重新引导至该通道中较早发生的输入。(图中所示即为这种反向信号流,这是唯一一个绿色输入位于右侧、蓝色输出位于左侧的模块。)注意,如果设计中要求反馈,则必须使用该模块。

我做一个例子,主要是要讲一下这个反馈的信号流是反的:

当然真实的音频框架设计里,肯定不会这样搞,我做的这个程序仅仅只是展示,学会他,再应用到你自己的框架中吧!

13.设置采样率

注意,很关键的技术点,ADAU1701是支持192K采样率的,而且因为codec在ADAU1701的内部,所以我们可以实时的去调采样率,怎么做看下面的详细说明吧。

我就拿一个直通的例子来改采样率。

采样率就看这里,默认的是48KHz,我们怎么把他改到192,很简单,下拉菜单,直接改:

他问你是不是要改,我们点Yes!

这样就结束了吗?并没有,我们需要让这个192KHz在整个程序框架例全局应用,于是我们还需要点这里:

点完之后,我们看一看采样率变了没有,选中一个节点,鼠标右键:

192000,也就是192KHz采样率,没问题了。这样结束了吗?NO,最后一步,你必须要点在线下载工程,才能让这个采样率生效!

14.31段EQ

31段EQ是常规操作,我们看看怎么做:

用一个EQ模块,最多只能设置成15段,那31段怎么说?那就再拖出1个EQ,设置成15段撒!还差一个,就再拖出来1个,这不就是31段了?

细节参数我就不去调了,大家自由发挥吧。

15.90段EQ

ADAU1701到底能做多少段EQ? 我也不知道,取决于你的算法框架,每一个算法都要占用内存,最后留给EQ的能有多大内存,就能搞多少段。一直加到你下载程序报错,那就说明芯片到极限了。

那我就只做EQ,来测一下ADAU1701的极限EQ段位在哪里,先做一个90段!

90段EQ不行,你看他的报错,MIPS不够啦,我们减一点,减到60段。

(这是一个错误的例程,目的就是让兄弟们了解怎么去做极限开发,如何快速的掌握DSP到底能不能达到想要的性能)

16.60段EQ

90段不行,我试试60段:

60段EQ,下载程序没有报错,正常运行!!!所以ADAU1701,在采样率48KHz的情况下,2进2出,做60段EQ是没问题的。

后面我就不继续了,方法给到兄弟们,有兴趣有需要的自己去测吧。

17.信号发生器-正弦波、方波等

DSP天然属性,他可以自发生很多的信号源,在ADAU1701的算法里,有很多信号源直接可以用,我们先搞个正弦波:

下载程序后,正弦波模块点√,就可以发出正弦波了,我接了一个输出到音箱,就会听到滴…的长鸣声,把√点掉,声音就没有了。

源有很多,有需要的直接拖出来用,参数自己设置。

18.白噪声

经典算法,DSP自发生,找出来就用。

下载程序后,点白噪声的开关,音箱中发出嘈杂的白噪声。

19.粉红噪声

输入音源,加入粉红噪声,输出耳机或音箱,听一下很明显。

20.相位

ADAU1701的算法里有专门的相位算法,找了一个做了一下程序:

当然也可以用组合算法,我在前面的文档里有写过,很复杂,坦率的讲那个逻辑算法搭的相位可调,OP自己也没完全整明白。

21.和声算法

可能有兄弟会需要,我也找出来了。

下一章预告

本章把我当下能想到的常用的算法都列了一下,后面会陆续再想到了,再新增,注意关注OP的CSDN博客。

下一步把Basic DSP和RMS限幅器找几个例子写一写吧。

更多推荐

ADAU1701(含A2B)的开发详解六:调音效的常用算法补漏(21个例程)

本文发布于:2024-02-10 22:44:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1677732.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   详解   例程   常用   A2B

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!