[移植第一天视频]啃论文俱乐部——移植speexdsp到OpenHarmony标准系统⑤原创精华

 admin   2022-09-12 22:42   491 人阅读  0 条评论

我们好!我源自苏州,在OpenHarmony高速成长方案啃学术论文俱乐部队,与等子公司一同,自学和科学研究

Roujan年1月11日重新加入OpenHarmony俱乐部队早已有吻合8个月天数了。本栏始终在思索啃学术论文给我增添了些甚么,透过啃学术论文可为OpenHarmony做些甚么。本栏借助大二升大二暑期三个月天数移殖了Speexdsp那个协力库到OpenHarmony国际标准控制系统,而有关后面的难题我或许找出了标准答案,谢鲁瓦啃学术论文和协力库移殖撷取实战经验如下表所示:

鲁托县简述:

啃学术论文俱乐部队——移殖speexdsp到OpenHarmony国际标准控制系统①

啃学术论文俱乐部队——移殖speexdsp到OpenHarmony国际标准控制系统②

啃学术论文俱乐部队——移殖speexdsp到OpenHarmony国际标准控制系统③

啃学术论文俱乐部队——移殖speexdsp到OpenHarmony国际标准控制系统④

下期为的第⑤期,主要就文本如下表所示:

@toc

speexdsp移殖后已递交至openhamrony sig库房:http://gitee.com/openharmony-sig/contest/tree/master/2022_OpenHarmony_thirdparty/speexdsp

将speexdsp重新加入openharmony校对管理体系后,能获得成功校对出程序库和试验用的DLL,并不代表者移殖协力库获得成功。更要在N53SI241SV上运转试验其机能与否恒定。

编程语言:C

原生平台:linux

除C国际标准库外,无其他第协力库依赖

根据speex官网http://speex.org/的信息,speexdsp使用的开源协议为(又称为或者,一般使用BSD 3-Clause)

OpenHamorny第协力开源软件许可证类型必须是明确定义的。

明确定义的开源许可证有:http://opensource.org/licenses/alphabetical

是明确定义的开源许可。

speexdsp的license以及版权文本如下表所示:

2022年6月16日,版本号1.2.1

linux控制系统提供了wc命令来统计文件的行数,统计当前目录下的所有文件行数,终端输入如下表所示命令:

文件名

代码行数

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原生库的libspeexdsp目录下有原生的试验源文件testresample.c、testresample2.c、testecho.c、testdenoise.c、testjitter.c。

进行机能试验需要对比pc端和N53SI241SV的运转效果,因此需要在pc端校对出试验用的DLL(N53SI241SV上的早已校对出了)。

查看源码可知,运转试验重采样率的DLL时,输入一份音频文件的同时需要指定处理后输出的音频文件。

试验重采样机能的源文件为testresample.c和testresample2.c。

testresample.c源码分析如下表所示:

可以得知:

输入音频的采样率要求为96000Hz、声道为单声道。

输出音频的采样率为44100。

运转试验回声消除的DLL时,需要输入两段音频文件,分别为一份麦克风的音频、一份speaker的音频。另外需要指定一份处理后输出的音频文件。采样率都为8000Hz

试验回声消除机能的源文件为testecho.c。

testecho.c源码分析如下表所示:

运转试验预处理机能的DLL时,输入一份音频文件的同时需要指定处理后输出的音频文件。(采样率为8000Hz)

试验源文件testdenoise.c试验的是预处理机能中的噪声抑制。

testdenoise.c源码分析如下表所示:

当透过UDP或RTP传输语音(或任何相关文本)时,包可能会丢失,以不同的延迟到达,甚至乱序。

1.抖动缓冲区的目的是重新排序数据包,并缓冲足够长的天数,以便它们可以被发送以进行解码。

2.试验源文件testjitter.c,那个去抖动试验需要接收源自udp/rtp的网络语音数据,原生试验程序没有做到真正意义上的试验,从程序上看是告诉用户如何使用接口。

testjitter.c源码分析:

校对pc端的可执行程序:

其中:

gcc后面是试验用的源文件

-L 后指定so库所在的文件夹

-l+so库的名字(除去lib和后缀)

-o 后面是DLL的名字,

-l 后面是试验用的源文件要用到的头文件的路径

hdc工具的使用 请参考用hdc工具在OpenHarmony3.2 上安装应用中的相关文本

1.透过与ohos版本匹配的hdc_std工具,将校对生成的库以及试验用的DLL推送到N53SI241SV上

2.将压缩包push到N53SI241SV

3.解压压缩包并将库文件拷贝到对应的目录

本次移殖是基于openharmony国际标准控制系统3.2Beta1版本,是arm64位控制系统

分析试验结果需要使用到的音频处理软件是,下载地址:http://www.ocenaudio.com/en/

①执行testresampleDLL

透过分析testresample.c源码可知:执行试验程序时输入一份采样率为96000Hz并且为单声道的音频时,经过重采样输出的音频采样率为44100Hz。

在pc端运转:

输入的音频为input.pcm,把它拷贝到testresample同目录下,并且新建空白文档命名为output.pcm。

打开终端执行如下表所示命令:

使用符号指定输入文件,符号指定输出文件

输出的output.pcm采样率变为44100Hz,音频的和如下表所示:

在rk3568上运转:

这里试验testresample时,将一份与pc端同样的input.pcm和output.pcm拷贝至N53SI241SVspeexdsp目录。

在N53SI241SVspeexdsp目录执行语句如下表所示

将N53SI241SV输出的output.pcm拷贝至pc端

试验结果:经过重采样,pc端和rk3568N53SI241SV输出的output.pcm音频采样率都为44100Hz,两者运转试验程序testresample结果一致。

②执行testresample2DLL

透过分析testresample2.c源码可知,执行试验程序时需要指定一份空白的单声道音频文件output.pcm。

试验testresample2时,需要把空白的单声道音频文件output.pcm拷贝至N53SI241SVspeexdsp目录。

pc端运转:

执行语句如下表所示:

输出结果如下表所示:

终端打印信息

输出音频output.pcm波形图和声谱图如下表所示:

rk3568N53SI241SV上运转:

执行语句如下表所示:

试验结果:输出一份不为空的output.pcm音频文件,并且在终端输出文本如下表所示:

以最后一行"128000 1024 1024 2731 -> 1024 2730为例,其中128000为采样率(Hz);1024为一个编码单元采样点数(帧);1024为输入音频理论帧长;2731为输出音频理论帧长。"->"符号后的1024为经过重采样处理输入音频实际帧长,2730为输出音频实际帧长。

pc端和rk3568N53SI241SV运转testresample2可执行程序效果一致。

③执行testechoDLL

试验testecho时,需要输入两份音频文件,同时需要指定一份输出的音频文件。

输入的两份音频一份为speaker.wav(麦克风收录的说话人语音信号+在房间多径反射的语音),另一份为micin.wav(麦克风收录的房间多径反射的语音)。

speaker.wav恒定房间环境下收录说话人说话声音即可,mic2.pcm在恒定环境收录时说话人不说话即可。

同时需要指定一份testecho_output.wav输出文件。

执行语句如下表所示:

试验结果:对比输入的speaker.wav和输出testecho_output.wav的波形图和声谱图,回声早已被消除。pc端和rk3568N53SI241SV运转testecho可执行程序效果一致。

④执行testdenoiseDLL

透过分析testdenoise.c源码,执行试验程序时需要指定一份输入的不为空的8000Hz的input.pcm音频,并且需要指定一份空的输出的output.pcm音频。

rk3568上运转:

执行语句如下表所示:

试验结果:对比输入的input.pcm和输出的outpu.pcm的波形图和声谱图,噪声早已被消除。pc端和rk3568N53SI241SV运转testdenoise可执行程序效果一致。

⑤执行testjitterDLL

透过分析testjitter.c源码,试验需要接收源自udp/rtp的网络语音数据,原生试验程序没有做到真正意义上的试验,从程序上看是告诉用户如何使用接口。

执行语句如下表所示

试验结果:终端打印出语句

pc端和rk3568N53SI241SV运转testjitter可执行程序效果一致。

本文地址:http://51ac.top/post/18184.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?