硬件准备
1.ADSP-21569EVB开发板
产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.17.778d60fezn1w9T&id=721683997705
2.AD-ICE2000仿真器(或者AD-HP530ICE,我觉得530的ICE1000 5M主频编译速度有点慢,所以我后面用的都是47M主频的ICE-2000)
产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.25.17704901MmP2bl&id=753233120844
3.模拟音源输入设备(手机或电脑声卡的模拟音源)
4.模拟音源输出设备(耳机或音箱)
硬件链接示意图
1.在开发板、AD-ICE2000仿真器、USBi调试器都断电的情况下,分别和开发板接好线;
2.开发板上电,AD-ICE2000仿真器上电;(注意,USBi此刻只连在板子上,不上电)
3.CCES运行图形化编程的工程,让他RUN起来;
4.再把USBi上电接PC;
这些前置条件都达成之后,我们就可以专心的在SigmaStudio软件下做图形化编程了。
作者的话
本章写基础音效算法。
1.音量调节
最基础的算法,调节音量大小:
SigmaStudio里有一个版块,专门的音量调节模块,我们选一个常用的:
0/1输入,0/1输出,中间加一个音量控制模块。我们再把这个音量模块的节点多加一个:
左键选中模块,右键新增节点:
逻辑连线:
在线下载程序后,耳机听到音乐,鼠标调节这个音量模块,耳朵里听到的音乐声音随之变大变小。
2.多通道音量调节
2个音量调节模块,分别控制每个耳朵的音量:
下载程序后,鼠标分别拖动2个调音量模块,两个耳朵分别感受到音量的大小变化。
3.单通道静音
静音也是音频调试中最常见的功能,如果实现静音?
很简单,我们加一个静音模块就行啦:
下载程序后,鼠标把静音模块打钩,就会有一个耳朵被静音,只有另外一只耳朵听得到音乐。
4.立体声双声道静音
同样是把静音模块鼠标右键,新增一个输入输出,再逻辑连线,这个静音模块就把2个输出声道都控制了。
下载程序后,把静音模块打钩,2个耳朵都被静音。
特别注意,这个程序你会发现,耳机中明显出现了爆破音,不要慌,下一个程序帮你解决,兄弟们继续跟着我的节奏往下走。
5.带压摆的静音
在 SigmaDSP 的算法模块中,会发现很多都有带 SW 的模块,拖出来跟不带的一模一样,这 个是干嘛的?注意,非常重要,这个带 SW 的就叫带压摆的模块!
以静音这个模块来讲,见下面的图示:
压摆什么意思?这个得从这个模块的算法来讲了:
No Slew:不带压摆的静音,启用时,可立即使信号静音,不存在增益调节。相对于压摆算法, 这种算法需要较少资源;但是实时切换时,可能导致不连续现象(滴答声和爆裂声)
SW:压摆类算法,可从 0dB 增益平滑过渡至静音,并从静音过渡至 0dB 增益。这种压摆算法由软件(故称为“SW”)实现,比“无压摆”算法要求更多指令。
所以综上所述,无压摆的模块,在音效框架很复杂的时候,实时切换,有可能会出现爆破音。用带压摆的模块就可以很好的解决这个问题。有些用户可能就要说了,那就全都用带 SW 的模块不就好了?不是这样的,DSP 的内部资源是很有限的,带压摆的算法会占用更多的资源,全都用SW,可能会导致你用不了太多的算法模块了,这里就要有一个权衡,如果用不带压摆的模块,实测没有爆破音,那就放心大胆的用,如果发现爆破音,再换带压摆的模块来解决吧,我们还是希望 DSP 能用更多的算法模块的。
下面这个例程就是带压摆的静音,因为程序简单,跟普通静音没什么区别,但这个章节技术点一定要掌握。
用了这个带压摆的静音模块,你再下载程序,会发现明显的爆破音没啦,声音又清澈了。
实用小技巧,务必掌握。
6.2进4出-路由功能-开关选择声道输出
开关选择通道输出,在SigmaStudio里有一个专门的大模块:
这里都是,我们选一个:
简单说一说这个程序,0/1输入,经过一个MIX做混音后,进通道选择模块,出来2个T,分别送到0/1输出和2/3输出;
下载程序后,0/1输入送给O/1输出,2/3输出这个时候听不到音乐;我们用鼠标选择一下通道:
这个时候0/1输出通道就听不到音乐,而2/3输出通道则听到了音乐。
这个路由功能很常用,兄弟们需要掌握。至于更多通道的路由,道理跟这个一样,我就不浪费笔墨了,有兴趣的兄弟自己做做程序,玩一下。
7.4进2出-路由功能-开关选择声道输入
程序很容易理解,0/1和2/3输入,经过一个路由后,输出到0/1;选上面的时候是0/1输入,路由选下面的时候是2/3输入。
8.分频器-高低音分频
分频可以是直通的分频,DSP 还可以支持把高低音分离出来,高音走高音通道,低音走低音通道,我们来看一下是怎么做的。
0/1输入,经过高低音分频后,L0低音我都给送到0/1输出,Hi高音我都给送到2/3输出,这样就把0/1输入过来的音频做了高低音分频。
点开这个分频模块:
各种参数可以设置,大家自己去试一下吧。
下载程序后,0/1输出听到的就是低音,2/3输出听到的就是高音啦。
9.分频器-高中低音分频
将左右声道的立体声进行高中低音分频输出,例程如下:
0/1输入音源,经过高中低音分频模块,低音L0送给0/1输出,中音MID送给2/3输出,高音HI送给4/5输出。
这个分频器还有更详细的设置,我们点击分频器中间的这个按钮:
就可以对这些参数进行详细的配置了。
10.线性增益
“线性增益”(Linear Gain)模块以文本字段中指定的值对信号进行缩放。在例程里,我假定一下, 感觉低音输出的音量太小,我要对他进行放大,于是我就在这个通道上加上限行增益算法进行响度的补偿!
手动填入数字,感受一下声音放大、缩小的效果吧!
11.延时
延时是音频处理中最常见的一种算法,“延迟”(Delay)模块(采用 Z-a 算法)向信号流中添加一个可变延迟,其范围在 1 与 DSP 的最大可用内存之间。
用户可以用耳机听,然后把两个耳朵的延时设置不同,听一下效果。
12.多个延时
有兄弟问想要多个延时怎么办,很简单,就多加几个延时模块,把延时串起来,只要你的内存够,就能加。怎么样才叫内存够了?你下载程序不报错,可以运行,那就说明内存够,下载报错了,那就内存溢出了,我们就要减量啦。
13.反馈
“反馈”(Feedback)算法在信号通道中生成一个延迟,并将信号重新引导至该通道中较早发生的输入。(图中所示即为这种反向信号流,这是唯一一个绿色输入位于右侧、蓝色输出位于左侧的模块。)注意,如果设计中要求反馈,则必须使用该模块。
我做一个例子,主要是要讲一下这个反馈的信号流是反的:
有兄弟可能会说,OP老师你这做的程序跟实际音频开发没一点关系,我们做音频的是怎么都不会这么设计程序的。
你说的没错,我这里写的这些基础程序,全部都是把我想到的,常用的模块都拉出来,随便做了个程序,让兄弟们知道这些算法再哪里,怎么用?回到真正的音频开发中,你们就可以很方便的把他嵌入到你们的音频框架中去发挥!
14.电平实时显示
我们来加个电平显示的模块,直观的看看声音的情况;这里有很多电平显示模块,我就随便选了一个,用户都可以试试看。
0/1输入音源,0通道我加了电平显示模块,就会看到电平随着音量而变化。
15.相位
打钩一下模块,感受一下吧。
结束语
最基础的开发,简单的写了15个程序,后面的文档会再深化的讲一讲其他的算法模块使用。