啃论文俱乐部——移植Speexdsp到OpenHarmony标准系统(五)
啃论文俱乐部——移植Speexdsp到OpenHarmony标准系统(五)
作者:离北况归 2022-09-15 15:21:22系统 OpenHarmony 将Speexdsp加入Openharmony编译体系后,能成功编译出来动态链接库和测试用的可执行文件,并不代表移植三方库成功。还要在开发板上运行测试其功能是否正常。想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
大家好!我来自南京,在OpenHarmony成长计划啃论文俱乐部,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究操作系统技术从今年1月11日加入OpenHarmony俱乐部已经有接近8个月时间了。笔者一直在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三暑假两个月时间移植了Speexdsp这个三方库到OpenHarmony标准系统,而关于前面的问题我似乎找到了答案,现将啃论文和三方库移植分享经验如下:七、Speexdsp功能分析
将speexdsp加入openharmony编译体系后,能成功编译出来动态链接库和测试用的可执行文件,并不代表移植三方库成功。还要在开发板上运行测试其功能是否正常。speexdsp核心库分析
1、库实现方式
编程语言:C原生平台:linux2、依赖分析
除C标准库外,无其他第三方库依赖3、license以及版权
根据speex官网https://speex.org/的信息,speexdsp使用的开源协议为revised BSD license(revised BSD license又称为3-clause BSD License或者BSD 3-Clause License,一般使用BSD 3-Clause)。ps://speex.org/的信息,speexdsp使用的开源协议为revised BSD license(revised BSD license又称为3-clause BSD License或者BSD 3-Clause License,一般使用BSD 3-Clause)。OpenHamorny第三方开源软件许可证类型必须是OSI明确定义的。OSI明确定义的开源许可证有:https://opensource.org/licenses/alphabetical。BSD 3-Clause License是OSI明确定义的开源许可。如下类型许可证可以引入到OpenHarmony项目中:
Apache License 2.0Mulan Permissive Software License, Version 2BSD 2-clauseBSD 3-clauseDOM4J LicensePostgreSQL LicenseEclipse Distribution License 1.0MITISCICUUniversity of Illinois/NCSAW3C Software Licensezlib/libpngAcademic Free License 3.0Python Software Foundation LicensePython Imaging Library Software LicenseBoost Software License Version 1.0WTF Public LicenseUNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWAREZope Public License 2.0如下类型许可证不建议引入到OpenHarmony项目中:
GNU GPL 1, 2, 3GNU Affero GPL 3GNU LGPL 2, 2.1, 3QPLSleepycat LicenseServer Side Public License (SSPL) version 1Code Project Open License (CPOL)BSD-4-Clause/BSD-4-Clause (University of California-Specific)Facebook BSD+Patents licenseNPL 1.0/NPL 1.1The Solipsistic Eclipse Public LicenseThe "Don't Be A Dick" Public LicenseJSON LicenseBinary Code License (BCL)Intel Simplified Software LicenseJSR-275 LicenseMicrosoft Limited Public LicenseAmazon Software License (ASL)Java SDK for Satori RTM licenseRedis Source Available License (RSAL)Booz Allen Public LicenseCreative Commons Non-CommercialSun Community Source License 3.0Common Development and Distribution Licenses: CDDL 1.0 and CDDL 1.1Common Public License: CPL 1.0Eclipse Public License: EPL 1.0IBM Public License: IPL 1.0Mozilla Public Licenses: MPL 1.0, MPL 1.1, and MPL 2.0Sun Public License: SPL 1.0Open Software License 3.0Erlang Public LicenseUnRAR LicenseSIL Open Font LicenseUbuntu Font License Version 1.0IPA Font License Agreement v1.0Ruby LicenseEclipse Public License 2.0: EPL 2.0speexdsp的license以及版权内容如下:
Copyright 2002-2008 Xiph.org FoundationCopyright 2002-2008 Jean-Marc ValinCopyright 2005-2007 Analog Devices Inc.Copyright 2005-2008 Commonwealth Scientific and Industrial Research Organisation (CSIRO)Copyright 1993, 2002, 2006 David RoweCopyright 2003EpicGamesCopyright 1992-1994 Jutta Degener, Carsten BormannRedistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:- Redistributions of source code must retain the above copyrightnotice, this list of conditions and the following disclaimer.- Redistributions in binary form must reproduce the above copyrightnotice, this list of conditions and the following disclaimer in thedocumentation and/or other materials provided with the distribution.- Neither the name of the Xiph.org Foundation nor the names of itscontributors may be used to endorse or promote products derived fromthis software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FORA PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE FOUNDATION ORCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, ORPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDINGNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.4、最新一次版本
2022年6月16日,版本号1.2.1。5、代码规模
linux系统提供了wc命令来统计文件的行数,统计当前目录下的所有文件行数,终端输入如下命令:
wc -l *文件名
代码行数
arch.h
232
bfin.h
15
buffer.c
176
fftwrap.c
448
fftwrap.h
58
filterbank.c
227
filterbank.h
66
fixed_arm4.h
135
fixed_arm5e.h
160
fixed_bfin.h
141
fixed_debug.h
497
fixed_generic.h
106
jitter.c
839
kiss_fft.c
523
_kiss_fft_guts.h
160
kiss_fft.h
108
kiss_fftr.c
297
kiss_fftr.h
51
math_approx.h
332
mdf.c
1279
misc_bfin.h
56
os_support.h
169
preprocess.c
1215
pseudofloat.h
379
resample.c
1239
resample_neon.h
339
resample_sse.h
128
scal.c
293
smallft.c
1261
smallft.h
46
vorbis_psy.h
97
speex_buffer.h
68
speexdsp_config_types.h
12
speexdsp_types.h
126
speex_echo.h
170
speex_jitter.h
197
speex_preprocess.h
219
speex_resampler.h
343
总行数
12207
功能分析
可以参考speexdsp提供的文档分析功能。
预处理器
预处理器被设计为在运行编码器之前在音频上使用。预处理器提供三个主要功能:
噪声抑制自动增益控制(AGC)语音活动检测(V AD)自适应抖动缓冲区
当通过UDP或RTP传输语音(或任何相关内容)时,包可能会丢失,以不同的延迟到达,甚至乱序。抖动缓冲区的目的是重新排序数据包,并缓冲足够长的时间,以便它们可以被发送以进行解码。声学回声消除器
回声消除是为了提高远端质量。
在任何免提通信系统中,远端语音通过本地扬声器播放。音频在房间内传播,并被麦克风捕获。如果从麦克风捕获的音频被直接发送到远端,那么用户就会听到远端语音的回声。声学回声消除器设计用于在声学回声发送到远端之前消除它。重采样器
这个重采样器可以用于在任意两个速率之间进行转换(比率必须是有理数),并且可以控制质量/复杂性的权衡。
重采样器在某些情况下将音频从一个采样率转换到另一个采样率。它可以用于混合具有不同采样率的流、用于支持声卡不支持的采样率、用于转码等。八、Speexdsp功能测试
测试逻辑
在speexdsp原生库的libspeexdsp目录下有原生的测试源文件testresample.c、testresample2.c、testecho.c、testdenoise.c、testjitter.c。进行功能测试需要对比pc端和开发板的运行效果,因此需要在pc端编译出测试用的可执行文件(开发板上的已经编译出来了)。重采样功能
查看源码可知,运行测试重采样率的可执行文件时,输入一份音频文件的同时需要指定处理后输出的音频文件。测试重采样功能的源文件为testresample.c和testresample2.c。testresample.c源码分析如下:
#ifdef HAVE_CONFIG_H#include "config.h"#endif//要使用重采样器,必须包含它的头文件speex_resampler.h:#include "speex/speex_resampler.h"//基本输入输出函数的声明#include回声消除功能
运行测试回声消除的可执行文件时,需要输入两段音频文件,分别为一份麦克风的音频、一份speaker的音频。另外需要指定一份处理后输出的音频文件。采样率都为8000Hz测试回声消除功能的源文件为testecho.c。testecho.c源码分析如下:#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "speex/speex_echo.h"#include "speex/speex_preprocess.h"#include预处理功能
运行测试预处理功能的可执行文件时,输入一份音频文件的同时需要指定处理后输出的音频文件。(采样率为8000Hz)测试源文件testdenoise.c测试的是预处理功能中的噪声抑制。testdenoise.c源码分析如下:
#ifdef HAVE_CONFIG_H#include "config.h"#endif//使用预处理功能先#include "speex/speex_preprocess.h"#include "speex/speex_preprocess.h"#include抖动缓冲功能
当通过UDP或RTP传输语音(或任何相关内容)时,包可能会丢失,以不同的延迟到达,甚至乱序。
1.抖动缓冲区的目的是重新排序数据包,并缓冲足够长的时间,以便它们可以被发送以进行解码。
2.测试源文件testjitter.c,这个去抖动测试需要接收来自udp/rtp的网络语音数据,原生测试程序没有做到真正意义上的测试,从程序上看是告诉用户如何使用接口。
testjitter.c源码分析:
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "speex/speex_jitter.h"#include测试步骤
编译pc端上的测试用的可执行程序
编译pc端的可执行程序:
gcc testdenoise.c -L /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib -o testdenoise -I /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include -lm -lspeexdsp其中:
gcc后面是测试用的源文件。-L 后指定so库所在的文件夹。-l+so库的名字(除去lib和后缀)。-o 后面是可执行文件的名字。-l 后面是测试用的源文件要用到的头文件的路径。将编译生成的库以及测试用的可执行文件推送到开发板上
hdc工具的使用 请参考用hdc工具在OpenHarmony3.2 上安装应用中的相关内容。
1.通过与ohos版本匹配的hdc_std工具,将编译生成的库以及测试用的可执行文件推送到开发板上。
hdc_std shell mount -o remount,rw / ## 重新加载系统为可读写mkdir speexdsp## 创建speexdsp目录存放测试用例exit## 退出开发板系统2.将压缩包push到开发板。
hdc_std file speexdsp.tar /speexdsp3.解压压缩包并将库文件拷贝到对应的目录
本次移植是基于openharmony标准系统3.2Beta1版本,是arm64位系统。
hdc_std shell## 进入开发板系统cd speexdsptar -xvf speexdsp.tarcp libspeexdsp_share.z.so /system/lib64/ ## 将库文件拷贝系统目录执行测试程序、分析测试结果
分析测试结果需要使用到的音频处理软件是ocenaudio,下载地址:https://www.ocenaudio.com/en/。
①执行testresample可执行文件。
通过分析testresample.c源码可知:执行测试程序时输入一份采样率为96000Hz并且为单声道的音频时,经过重采样输出的音频采样率为44100Hz。
在pc端运行:
输入的音频为input.pcm,把它拷贝到testresample同目录下,并且新建空白文档命名为output.pcm。
打开终端执行如下命令:
chmod 777 testresample./testresample < input.pcm >output.pcm使用<符号指定输入文件,>符号指定输出文件。
输出的output.pcm采样率变为44100Hz,音频的波形图和声谱图如下:
在rk3568上运行:
这里测试testresample时,将一份与pc端同样的input.pcm和output.pcm拷贝至开发板speexdsp目录。
在开发板speexdsp目录执行语句如下:
chmod 777 testresample## 添加可执行权限./testresample < input.pcm >output.pcm将开发板输出的output.pcm拷贝至pc端。
hdc_std file recv /speexdsp/output.pcm C:\Users\jjh\Desktop\测试结果:经过重采样,pc端和rk3568开发板输出的output.pcm音频采样率都为44100Hz,两者运行测试程序testresample结果一致。
②执行testresample2可执行文件。
通过分析testresample2.c源码可知,执行测试程序时需要指定一份空白的单声道音频文件output.pcm。
测试testresample2时,需要把空白的单声道音频文件output.pcm拷贝至开发板speexdsp目录。
pc端运行:
执行语句如下:
./testresample2 >output.pcm输出结果如下:
终端打印信息:
输出音频output.pcm波形图和声谱图如下:
rk3568开发板上运行:
执行语句如下:
./testresample2 >output.pcm测试结果:输出一份不为空的output.pcm音频文件,并且在终端输出文本如下:
1000 0 1024 22 -> 1024 01100 0 1024 24 -> 1024 151200 0 1024 26 -> 926 261300 926 1122 31 -> 1048 311400 950 1098 33 -> 1032 33.........127600 1024 1024 2723 -> 1024 2723......127900 1024 1024 2729 -> 1024 2729128000 1024 1024 2731 -> 1024 2730以最后一行"128000 1024 1024 2731 -> 1024 2730“”为例,其中128000为采样率(Hz);1024为一个编码单元采样点数(帧);1024为输入音频理论帧长;2731为输出音频理论帧长。"->"符号后的1024为经过重采样处理输入音频实际帧长,2730为输出音频实际帧长。
pc端和rk3568开发板运行testresample2可执行程序效果一致。③执行testecho可执行文件。
测试testecho时,需要输入两份音频文件,同时需要指定一份输出的音频文件。
输入的两份音频一份为speaker.wav(麦克风收录的说话人语音信号+在房间多径反射的语音),另一份为micin.wav(麦克风收录的房间多径反射的语音)。
speaker.wav正常房间环境下收录说话人说话声音即可,mic2.pcm在正常环境收录时说话人不说话即可。同时需要指定一份testecho_output.wav输出文件。执行语句如下:
./testecho speaker.wav micin.wav testecho_output.wav测试结果:对比输入的speaker.wav和输出testecho_output.wav的波形图和声谱图,回声已经被消除。pc端和rk3568开发板运行testecho可执行程序效果一致。
④执行testdenoise可执行文件。
通过分析testdenoise.c源码,执行测试程序时需要指定一份输入的不为空的8000Hz的input.pcm音频,并且需要指定一份空的输出的output.pcm音频。
rk3568上运行:
执行语句如下:
./testdenoise< input.pcm >output.pcm测试结果:对比输入的input.pcm和输出的outpu.pcm的波形图和声谱图,噪声已经被消除。pc端和rk3568开发板运行testdenoise可执行程序效果一致。
⑤执行testjitter可执行文件。
通过分析testjitter.c源码,测试需要接收来自udp/rtp的网络语音数据,原生测试程序没有做到真正意义上的测试,从程序上看是告诉用户如何使用接口。
执行语句如下:
./testjitter测试结果:终端打印出语句。
Frozen sender: Jitter 0pc端和rk3568开发板运行testjitter可执行程序效果一致。
想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com。
责任编辑:jianghua 来源:51CTO开源基础软件社区 操作系统鸿蒙推荐系统
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
相关文章
- win7纯净版下载csdn
- office2010激活工具toolkit,本文教您激活office2010的方
- WinXP系统文件删不掉的处理办法
- Win7系统电脑怎么一键还原系统?
- Win11如何添加常用文件夹?Win11添加常用文件夹的方法
- 雨林木风w7镜像最新系统推荐
- Win10专业版系统电脑找不到音频设备怎么办?
- win7系统下设置WPS文档文字颜色的办法
- Win8屏幕键盘没有词汇联想技巧的处理方案
- mswin7 msvcr90.dllvcp90.dll下载
- 抖音app怎么拍小怪兽特效?抖音app拍摄小怪兽特效的方法
- Win8打开图片提示在禁用UAC时无法激活此应用的处理办法
- Win8如何关闭网络防火墙?关闭网络防火墙的方法
- u盘变成文件夹怎样办,本文教您如何处理
- 怎样安装原版xp系统?U盘安装原版winxp系统办法
- 总体有点失望!Windows 11 22H2来了:新增功能盘点
- 给大家整理的win10 1809怎样解锁注册表编辑器的办法
- Win8打开文件关闭安全警告的方法
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1深度技术 GHOST WIN10 X64 装机专业版 V2019.01 下载
- 2雨林木风系统 Ghost XP SP3 新春特别 装机版 YN2021年2月 ISO镜像高速下载
- 3深度技术 GHOST WIN7 SP1 X64 稳定安全版 V2018.01(64位) 下载
- 4lopatkin Win7下载_lopatkin Win7旗舰版下载
- 5番茄花园Ghost Win10 x64 多驱动专业版 v2023.03免费最新下载
- 6电脑公司 GHOST XP SP3 暑假装机版 V2015.07 下载
- 7电脑公司 GHOST WIN10 X64 装机旗舰版 V2019.10 下载
- 8萝卜家园Win11官方镜像下载_Win11 Ghost纯净专业版64位镜像下载
- 9番茄花园Ghost Win10 全新纯净版X64 v2023.06最新下载
- 10风林火山 WIN7 64位经典旗舰版 V2023.11 下载