论文部分内容阅读
一,概述
消费类的音频电子产品的一个发展趋势是小型化,而扬声器设计的尺寸也越来越受限,如何在受限的空间提供优质的音频体验,是目前带音频功能的电子产品面临的难题之一。音效增强技术可以在一定程度上弥补物理的局限性,同时也能为用户提供丰富的音频体验。传统的音效增强技术经常和音效DSP芯片绑定,一方面是技术商业化的考虑,另一方面是电子产品主芯片处理能力不足导致的。但近年来芯片技术突飞猛进,主芯片的处理能力往往是富余的,完全可以满足音效处理,通过软件的方式实现音效增强变得更加可行。同时我们也看到电子产品的软硬件平台是多样的,设计一个跨平台通用的音效增强系统可以从成本和技术上提升产品的竞争力。本文主要探讨音效增强系统设计和跨平台的实现。
二、音效增强系统的设计
常见的音效增强技术由均衡器,动态范围控制,声场扩展,低音增强等技术,结合音频产品实际需求和行业调音经验,设计了音效增强系统的框架。如下图所示:
2.1音量控制
音量控制模塊主要时实现音量曲线的控制,让用户调整音量时响度的变化是均匀的,避免出现响度步进太大或太小的情况,影响用户的体验。音量控制模块是在音效增强系统的前端,为后续模块的处理提供更加准确的信号强度和响度的估算。
2.2混音器
混音器主要针对单喇叭单元的产品,常见的音源都是立体声的,如果在音效处理前将立体声转换为单声道输出,在后续的模块处理过程中可以节省一半的运算量,从而降低CPU使用率和系统的功耗。
2.3重采样
重采样模块的主要作用是规整输入数据的采样频率和格式,为后续模块的处理提供统一的采样频率和数据格式,降低模块设计的难度。本系统中采用的是sinc-src的重采样算法[1]。
2.4声场扩展
一个立体声信号可用通过Mid/Side编码来改变声场的宽度[2]。M/S编码是指一个立体声信号可以由Mid信号和Side信号组成,它和左右声道的关系如下:
如果在处理的过程中,引入一个缩放因子ω,可以实现声场的扩展或者变窄。当ω>1时,声场变宽,当ω<1时,声场变窄,当ω=1时,声场不变。
计算到M/S信号后,对其解码就可以得到新的左右声道信号。
2.5均衡器
常用的均衡器有两种形式,一种是图示均衡器(G-EQ),有固定中心频点和Q值,即将频段划分为数十段,如31段均衡器。另外一种的参量均衡器(P-EQ),可以精细地调整Q值,中心频率,增益。由于PEQ能够提供更加精细的控制,本文采用的是二阶的参量均衡器,滤波器或频段的个数由用户设置。均衡器原理可以参考文献[3],它由一个二阶全通滤波器A(z)和特殊的滤波器结构组成,如下图所示:
其中Ω是归一化的-3dB带宽,ω0表示归一化的中心频率,K表示均衡器的增益。通过上述公式,可以精确控制均衡器的中心频率,增益和Q值(带宽)。
2.6等响曲线补偿
等响曲线是指通过对人耳声响实感的测定所得出的声音响度主观感量(响度级)相等的一簇曲线。同一声压级,不同的频率人耳主观感受到响度是不一样的。对这个响度的衡量采用响度级来表示,单位是方(phon)。以1kHz的响度作为基准,将其他频率响度相同的纯音声压级连成一条曲线就形成等响曲线,多个响度级就形成多条曲线,最终得到等响曲线图。本文根据等响曲线的特性,对各频率的响度相对进行补偿。首先对输入信号的音量和幅度做测量,并结合扬声器的输出得到对应的声压级,根据预置的滤波器进行补偿部分频段的输出,最后使声音听起来响亮和均衡,优化听音感受。
2.7动态低音增强
在小型扬声器系统中,低音的表现受限于产品结构空间和功放功率,常常不能达到很好的效果。本系统设计了动态低音增强模块,在小信号输入时,适当地增强低频输出,而在大信号输入时,则对信号做一定的压制,防止喇叭打底失真,或者造成喇叭的损坏。
2.8动态范围压缩
动态范围压缩(Dynamic Range Compression)主要用来降低大信号的音量和提升小信号幅度,从而降低或者压缩音频信号的动态范围。一般动态范围压缩器分为4种,分别是压缩器,限幅器,噪声门限器和扩展器。在本系统中主要用到压缩器。压缩器是由线性转分贝运算,增益计算,增益平滑等模块组成。如下图所示
DRC运算的过程是基于分贝来实现的,所以在DRC处理前后需要做线性数值和分贝数值的转换。增益计算块主要是用来粗略的计算当前的信号是否需要压缩,以及压缩的比例,需要Threashold和Ratio参数来实现控制;增益平滑模块采用了一个一阶的滤波器平滑快速变化的增益值,避免出现对原始信号的调制现象,需要攻击时间和释放时间参数来实现控制,详细算法和实现可以参考文献[4]。全频段的DRC控制效果很难满足需求,本文的系统设计了3段的DRC进行独立控制,包括低音,中音和高音的DRC,在进行动态压缩前先进行分频,处理完成后再合成最终的信号输出,其中分频点可在调音时设置。
三、跨平台音效增强系统的设计和实现
由于音频产品依赖的系统是多样的,有Windows,Linux和Android,一些低端的产品甚至用到了RTOS系统,为了让软件更具移植性和通用性,算法和系统的实现均采用C语言编写,调音用户界面软件采用QT技术。音频产品和调音软件的通信采用网络或串口进行通信,实现实时调音。整个系统的架构如下图所示:
音效核心模块除了本文第二节介绍的各个子模块,还有几个模块。调音配置模块,负责将调音参数转换为各个模块的参数;音效实时切换模块,实现多种音效即时切换,本文在两种音效切换期间加入混音处理,避免音频信号突变,出现噪声;音效链路管理模块负责管理各个音效处理子模块,搭建整体音效处理链路。 跨平台适配层主要是将各个平台的音效处理接口抽象出来,对音效增强处理模块和特定平台的音频系统进行解耦。
每个特定的系统都有自己的音频子系统,并且差异非常大,需要针对每个平台开发相应的插件进行适配。本文在Windows平台采用Audio Processing Object(APO)插件实现,在Linux平台采用LADSPA插件实现,在Android平台采用Audio Effect插件实现。它们大致的原理的是相同的。本节将介绍这三种音效插件的实现,以及图形化调音软件的实现。
3.1 Windows平台音效增强系统的实现
从Vista版本开始,Windows就开始支持音频处理对象APO,与文献[5]虚拟声卡方法相比,该方案需要的系统权限要少,稳定性更佳,是微软目前提供的可定制化的软件数字信号处理方案。APO作为系统音频插件,是由Windows的Audiosrv服务加载的,根据配置支持在三个位置加载,分别是SFX (Stream Effects, 流音效), MFX (Mode effects, 模式音效)和EFX (Endpoint effects, 端点音效)。考虑到我们需要实现系统级别的音效,本文实现的音效增强系统将以EFX的方式插入到系统的音频链路。这样任意的音频应用程序输出的音频都将经过音效增强系统处理。
实现APO插件最直接的方法是从CBaseAudioProcessingObject基类派生出来,这个类已经实现了APO许多基础功能特性, 只需实现少量的接口就可以完成APO的基本功能, 其中最重要的是APO处理函数,IAudioProcessingObjectRT::APOProcess,需要在该函数实现自己定义的音效处理功能。总的来说,完成以下三步就可以实现自定义的APO:
1. 创建自定义APO的COM对象来实现所期望的音频处理。
2. 创建UI界面来配置自定义的APO,这样在系统音频的配置页面实现参数配置。
3. 创建INF文件安装和注册APO,以及开发自定义的音效应用程序。
由于本系统设计了自己调音软件,只需实现步骤1和步骤3即可。
3.2 Linux平台音效增强系统的实现
Linux音频系统并没有统一的架构,但对Linux嵌入式系统来说,大部分都是支持ALSA音频驱动的,所以优先考虑在ALSA框架下实现音效处理。对于ALSA来说最简单的音效植入方式是开发一个LADSPA (Linux Audio Developer's Simple Plugin API)音频插件,然后将默认的音频设备配置成LADSPA插件虚拟出来的音频设备。这样只要所有使用ALSA默认设备的音频应用程序的音频输出都经经过LADSPA插件的处理,从而实现系统基本音效。LADSPA的接口非常简单,全部都包含在ladspa.h头文件中,插件只需要实现对应的接口,ALSA在初始化时就会加载该插件。所有的接口都定义在一个LADSPA_Descriptor结构体中,包括插件输入输出Pins,控制参数,初始函数和音频数据处理函数等。详细可在LADSPA网站查阅[6]。
3.3 Android平台音效增强系统的实现
Android的音频驱动是基于TinyALSA,是简化版本的ALSA,并不直接支持LADSPA插件,所以不能用Linux的方式实现。幸运的是,Android开发了自己一套音效处理的架构,Audio Effect,专门提供给第三方做音效处理开发使用。类似Windows和Linux,开发Audio Effect插件同样需要实现一系列的接口,包括插件的初始化,参数配置,音效处理函数等。
需要注意的是Android系统并不会默认加载AudioEffect插件,所以需要在应用开启一个音频服务App,保证系统启动的时候,能自动加载自定义的音效插件。
3.4图形化调音软件的设计和实现
音效调试往往需要边听音边调试,实时调音功能在音效增强系统尤为重要。考虑到产品平台运算量和接口受限的问题,将调音控制功能从产品中分离出来是必要的,简化设备端软件的开发,同时也能给调音师统一的调音操作界面。本音效增强系统调音功能在PC端用QT开发,不但支持各个音效模块的调试参数,还支持绘制即时的冲激响应曲线,调音操作所见即所得。此外,还实现系统扫频,扬声器声学曲线对照,音效对比,音频播放器等辅助功能,极大提升调音效率和准确度。最终设计的音效增强系统调音用户界面如下图所示:
四、测试和应用
音效增强要求能实时处理当前播放的音频数据,因此系统的实时性是必须保证。在不同平台下对系统进行性能测试,测试数据如下表所示。
测试表明音效增强系统能够满足音频实时处理的要求,对内存和CPU资源的消耗在合理范围内。
音效增强的效果方面并没有客观的标准来评价,更多的是主观的评价,目前该系统已经用于实际的产品项目中,受到客户和消费者的认可。
五、总结
本文从消费类音频产品音效方面的实际需求出发,设计并实现了一个完整的音效增强系统。该系统支持均衡器,动态范围控制,声场扩展,低音增强,等响曲线补偿等核心功能模块,并且为了将该音效增强系统应用到更广泛的产品,本文还实现了不同操作系统平台上音效增强软件移植的方案。本文的音效增强系统具有一定的通用性和扩展性,能够满足產品音效方面多变的需求,为消费者提供优质的音频产品体验。
参考文献
[1] Digital Audio Resampling Home Page [EB.OL]. [2021-05-05]. https://ccrma.stanford.edu/~jos/resample
[2] Tarr E . Hack Audio: An Introduction to Computer Programming and Digital Signal Processing in MATLAB[M]. 2018.
[3] Regalia, P., & Mitra, S. (1987). Tunable digital frequency response equalization filters. IEEE Transactions on Acoustics, Speech, and Signal Processing, 35(1), 118-120. doi:10.1109/tassp.1987.1165037
[4] Giannoulis, Dimitrios, Michael Massberg, and Joshua D. Reiss. "Digital Dynamic Range Compressor Design –– A Tutorial and Analysis." Journal of Audio Engineering Society. Vol. 60, Issue 6, 2012, pp. 399–408.
[5]闰震海,杨飞然,杨军.基于Windows平台的音效增强系统设计与实现[J].电声技术,2016,40(3):37—44.
[6] Linux Audio Developer's Simple Plugin API (LADSPA)[EB.OL]. [2021-05-05]. https://www.ladspa.org/
作者简介:
姓名:黄万章 出生年:1986-02-25 性别:男 籍贯 : 广东省广州市 民族:汉 职称:无 学历:华南理工大学硕士 研究方向:信号与信息处理
国光电器股份有限公司
消费类的音频电子产品的一个发展趋势是小型化,而扬声器设计的尺寸也越来越受限,如何在受限的空间提供优质的音频体验,是目前带音频功能的电子产品面临的难题之一。音效增强技术可以在一定程度上弥补物理的局限性,同时也能为用户提供丰富的音频体验。传统的音效增强技术经常和音效DSP芯片绑定,一方面是技术商业化的考虑,另一方面是电子产品主芯片处理能力不足导致的。但近年来芯片技术突飞猛进,主芯片的处理能力往往是富余的,完全可以满足音效处理,通过软件的方式实现音效增强变得更加可行。同时我们也看到电子产品的软硬件平台是多样的,设计一个跨平台通用的音效增强系统可以从成本和技术上提升产品的竞争力。本文主要探讨音效增强系统设计和跨平台的实现。
二、音效增强系统的设计
常见的音效增强技术由均衡器,动态范围控制,声场扩展,低音增强等技术,结合音频产品实际需求和行业调音经验,设计了音效增强系统的框架。如下图所示:
2.1音量控制
音量控制模塊主要时实现音量曲线的控制,让用户调整音量时响度的变化是均匀的,避免出现响度步进太大或太小的情况,影响用户的体验。音量控制模块是在音效增强系统的前端,为后续模块的处理提供更加准确的信号强度和响度的估算。
2.2混音器
混音器主要针对单喇叭单元的产品,常见的音源都是立体声的,如果在音效处理前将立体声转换为单声道输出,在后续的模块处理过程中可以节省一半的运算量,从而降低CPU使用率和系统的功耗。
2.3重采样
重采样模块的主要作用是规整输入数据的采样频率和格式,为后续模块的处理提供统一的采样频率和数据格式,降低模块设计的难度。本系统中采用的是sinc-src的重采样算法[1]。
2.4声场扩展
一个立体声信号可用通过Mid/Side编码来改变声场的宽度[2]。M/S编码是指一个立体声信号可以由Mid信号和Side信号组成,它和左右声道的关系如下:
如果在处理的过程中,引入一个缩放因子ω,可以实现声场的扩展或者变窄。当ω>1时,声场变宽,当ω<1时,声场变窄,当ω=1时,声场不变。
计算到M/S信号后,对其解码就可以得到新的左右声道信号。
2.5均衡器
常用的均衡器有两种形式,一种是图示均衡器(G-EQ),有固定中心频点和Q值,即将频段划分为数十段,如31段均衡器。另外一种的参量均衡器(P-EQ),可以精细地调整Q值,中心频率,增益。由于PEQ能够提供更加精细的控制,本文采用的是二阶的参量均衡器,滤波器或频段的个数由用户设置。均衡器原理可以参考文献[3],它由一个二阶全通滤波器A(z)和特殊的滤波器结构组成,如下图所示:
其中Ω是归一化的-3dB带宽,ω0表示归一化的中心频率,K表示均衡器的增益。通过上述公式,可以精确控制均衡器的中心频率,增益和Q值(带宽)。
2.6等响曲线补偿
等响曲线是指通过对人耳声响实感的测定所得出的声音响度主观感量(响度级)相等的一簇曲线。同一声压级,不同的频率人耳主观感受到响度是不一样的。对这个响度的衡量采用响度级来表示,单位是方(phon)。以1kHz的响度作为基准,将其他频率响度相同的纯音声压级连成一条曲线就形成等响曲线,多个响度级就形成多条曲线,最终得到等响曲线图。本文根据等响曲线的特性,对各频率的响度相对进行补偿。首先对输入信号的音量和幅度做测量,并结合扬声器的输出得到对应的声压级,根据预置的滤波器进行补偿部分频段的输出,最后使声音听起来响亮和均衡,优化听音感受。
2.7动态低音增强
在小型扬声器系统中,低音的表现受限于产品结构空间和功放功率,常常不能达到很好的效果。本系统设计了动态低音增强模块,在小信号输入时,适当地增强低频输出,而在大信号输入时,则对信号做一定的压制,防止喇叭打底失真,或者造成喇叭的损坏。
2.8动态范围压缩
动态范围压缩(Dynamic Range Compression)主要用来降低大信号的音量和提升小信号幅度,从而降低或者压缩音频信号的动态范围。一般动态范围压缩器分为4种,分别是压缩器,限幅器,噪声门限器和扩展器。在本系统中主要用到压缩器。压缩器是由线性转分贝运算,增益计算,增益平滑等模块组成。如下图所示
DRC运算的过程是基于分贝来实现的,所以在DRC处理前后需要做线性数值和分贝数值的转换。增益计算块主要是用来粗略的计算当前的信号是否需要压缩,以及压缩的比例,需要Threashold和Ratio参数来实现控制;增益平滑模块采用了一个一阶的滤波器平滑快速变化的增益值,避免出现对原始信号的调制现象,需要攻击时间和释放时间参数来实现控制,详细算法和实现可以参考文献[4]。全频段的DRC控制效果很难满足需求,本文的系统设计了3段的DRC进行独立控制,包括低音,中音和高音的DRC,在进行动态压缩前先进行分频,处理完成后再合成最终的信号输出,其中分频点可在调音时设置。
三、跨平台音效增强系统的设计和实现
由于音频产品依赖的系统是多样的,有Windows,Linux和Android,一些低端的产品甚至用到了RTOS系统,为了让软件更具移植性和通用性,算法和系统的实现均采用C语言编写,调音用户界面软件采用QT技术。音频产品和调音软件的通信采用网络或串口进行通信,实现实时调音。整个系统的架构如下图所示:
音效核心模块除了本文第二节介绍的各个子模块,还有几个模块。调音配置模块,负责将调音参数转换为各个模块的参数;音效实时切换模块,实现多种音效即时切换,本文在两种音效切换期间加入混音处理,避免音频信号突变,出现噪声;音效链路管理模块负责管理各个音效处理子模块,搭建整体音效处理链路。 跨平台适配层主要是将各个平台的音效处理接口抽象出来,对音效增强处理模块和特定平台的音频系统进行解耦。
每个特定的系统都有自己的音频子系统,并且差异非常大,需要针对每个平台开发相应的插件进行适配。本文在Windows平台采用Audio Processing Object(APO)插件实现,在Linux平台采用LADSPA插件实现,在Android平台采用Audio Effect插件实现。它们大致的原理的是相同的。本节将介绍这三种音效插件的实现,以及图形化调音软件的实现。
3.1 Windows平台音效增强系统的实现
从Vista版本开始,Windows就开始支持音频处理对象APO,与文献[5]虚拟声卡方法相比,该方案需要的系统权限要少,稳定性更佳,是微软目前提供的可定制化的软件数字信号处理方案。APO作为系统音频插件,是由Windows的Audiosrv服务加载的,根据配置支持在三个位置加载,分别是SFX (Stream Effects, 流音效), MFX (Mode effects, 模式音效)和EFX (Endpoint effects, 端点音效)。考虑到我们需要实现系统级别的音效,本文实现的音效增强系统将以EFX的方式插入到系统的音频链路。这样任意的音频应用程序输出的音频都将经过音效增强系统处理。
实现APO插件最直接的方法是从CBaseAudioProcessingObject基类派生出来,这个类已经实现了APO许多基础功能特性, 只需实现少量的接口就可以完成APO的基本功能, 其中最重要的是APO处理函数,IAudioProcessingObjectRT::APOProcess,需要在该函数实现自己定义的音效处理功能。总的来说,完成以下三步就可以实现自定义的APO:
1. 创建自定义APO的COM对象来实现所期望的音频处理。
2. 创建UI界面来配置自定义的APO,这样在系统音频的配置页面实现参数配置。
3. 创建INF文件安装和注册APO,以及开发自定义的音效应用程序。
由于本系统设计了自己调音软件,只需实现步骤1和步骤3即可。
3.2 Linux平台音效增强系统的实现
Linux音频系统并没有统一的架构,但对Linux嵌入式系统来说,大部分都是支持ALSA音频驱动的,所以优先考虑在ALSA框架下实现音效处理。对于ALSA来说最简单的音效植入方式是开发一个LADSPA (Linux Audio Developer's Simple Plugin API)音频插件,然后将默认的音频设备配置成LADSPA插件虚拟出来的音频设备。这样只要所有使用ALSA默认设备的音频应用程序的音频输出都经经过LADSPA插件的处理,从而实现系统基本音效。LADSPA的接口非常简单,全部都包含在ladspa.h头文件中,插件只需要实现对应的接口,ALSA在初始化时就会加载该插件。所有的接口都定义在一个LADSPA_Descriptor结构体中,包括插件输入输出Pins,控制参数,初始函数和音频数据处理函数等。详细可在LADSPA网站查阅[6]。
3.3 Android平台音效增强系统的实现
Android的音频驱动是基于TinyALSA,是简化版本的ALSA,并不直接支持LADSPA插件,所以不能用Linux的方式实现。幸运的是,Android开发了自己一套音效处理的架构,Audio Effect,专门提供给第三方做音效处理开发使用。类似Windows和Linux,开发Audio Effect插件同样需要实现一系列的接口,包括插件的初始化,参数配置,音效处理函数等。
需要注意的是Android系统并不会默认加载AudioEffect插件,所以需要在应用开启一个音频服务App,保证系统启动的时候,能自动加载自定义的音效插件。
3.4图形化调音软件的设计和实现
音效调试往往需要边听音边调试,实时调音功能在音效增强系统尤为重要。考虑到产品平台运算量和接口受限的问题,将调音控制功能从产品中分离出来是必要的,简化设备端软件的开发,同时也能给调音师统一的调音操作界面。本音效增强系统调音功能在PC端用QT开发,不但支持各个音效模块的调试参数,还支持绘制即时的冲激响应曲线,调音操作所见即所得。此外,还实现系统扫频,扬声器声学曲线对照,音效对比,音频播放器等辅助功能,极大提升调音效率和准确度。最终设计的音效增强系统调音用户界面如下图所示:
四、测试和应用
音效增强要求能实时处理当前播放的音频数据,因此系统的实时性是必须保证。在不同平台下对系统进行性能测试,测试数据如下表所示。
测试表明音效增强系统能够满足音频实时处理的要求,对内存和CPU资源的消耗在合理范围内。
音效增强的效果方面并没有客观的标准来评价,更多的是主观的评价,目前该系统已经用于实际的产品项目中,受到客户和消费者的认可。
五、总结
本文从消费类音频产品音效方面的实际需求出发,设计并实现了一个完整的音效增强系统。该系统支持均衡器,动态范围控制,声场扩展,低音增强,等响曲线补偿等核心功能模块,并且为了将该音效增强系统应用到更广泛的产品,本文还实现了不同操作系统平台上音效增强软件移植的方案。本文的音效增强系统具有一定的通用性和扩展性,能够满足產品音效方面多变的需求,为消费者提供优质的音频产品体验。
参考文献
[1] Digital Audio Resampling Home Page [EB.OL]. [2021-05-05]. https://ccrma.stanford.edu/~jos/resample
[2] Tarr E . Hack Audio: An Introduction to Computer Programming and Digital Signal Processing in MATLAB[M]. 2018.
[3] Regalia, P., & Mitra, S. (1987). Tunable digital frequency response equalization filters. IEEE Transactions on Acoustics, Speech, and Signal Processing, 35(1), 118-120. doi:10.1109/tassp.1987.1165037
[4] Giannoulis, Dimitrios, Michael Massberg, and Joshua D. Reiss. "Digital Dynamic Range Compressor Design –– A Tutorial and Analysis." Journal of Audio Engineering Society. Vol. 60, Issue 6, 2012, pp. 399–408.
[5]闰震海,杨飞然,杨军.基于Windows平台的音效增强系统设计与实现[J].电声技术,2016,40(3):37—44.
[6] Linux Audio Developer's Simple Plugin API (LADSPA)[EB.OL]. [2021-05-05]. https://www.ladspa.org/
作者简介:
姓名:黄万章 出生年:1986-02-25 性别:男 籍贯 : 广东省广州市 民族:汉 职称:无 学历:华南理工大学硕士 研究方向:信号与信息处理
国光电器股份有限公司