我们好!我源自苏州,在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可执行程序效果一致。
发表评论