德斯软件资讯9月14日消息,音频软件开发和其他软件开发一样,需求调试。音频调试和其他软件调试办法有相反点也有不同点。同时还需求一些特殊的工具实行调试。有了这些办法和工具,可以疾速定位和处理成绩。先说这些办法和工具。
1.办法
1)日志
这是软件调试中最常用的办法,音频调试也不例外。写代码的时分添加一定的日志,出成绩的时分翻开这些日志,经过日志剖析成绩出在哪里。好的日志表现在以下几点:
a)有工夫和日期。有时分工夫戳关于剖析成绩很重要。
b)应在函数的入口和出口添加日志。有了这个,就可以疾速看到函数调用进程了。
c)呈现成绩时应打印出相关变量值,这对剖析成绩十分重要。
d)应对日志实行分级。罕见的级别有错误/正告/调试/信息等。有时过多的日志打印会招致很大的负载,不同的后果会影响剖析。
2)二分法
以后版本有成绩,之前的一个版本没有成绩,阐明是最近一次改动形成的。这时分就需求用二分法疾速找出哪个版本开端有成绩了。先把如今的版本和好的版本一分为二,取两头的版本看看有没有成绩。假如有成绩,阐明这个两头版本之前有成绩。假如没有,阐明这个两头版本之后的改动曾经推出了。范围减少到一半了。这分两局部持续,直到最终找到有成绩的原始版本。找到版本后,再看这个版本加几个改动,剖析哪些改动最有例如招致这个成绩,直到最终找到基本缘由处理成绩。
3)3)碰撞的剖析办法
写代码解体是不可防止的。关键是解体后要迅速找到缘由,当前最好不要犯这个错误。通常死机次要有这几个缘由:空指针、被零除、越界、有限循环,当然还有其他缘由。Linux下有很好的工具,很好查。一些利基操作系统没有任何工具来反省解体成绩。假如他们是底层,他们可以运用JTAG工具,否则他们必需依托日志。日志是实时的,所以很容易做到。多打印总能发现解体在哪里。日志恐怕不是实时的,只能详细成绩详细剖析。我记得在一个OS下,日志不是实时的,一个模块是绝对独立的,所以我只能把函数调用关系和输出参数值保管在一个文件里。我在Linux下做一个使用读取保管的文件模仿事先的进程,然后借助Linux工具找到解体的中央。最初这个使用成为一个工具,当前相似的成绩可以很快处理。
4)最小系统法
做软件系统的时分,一开端就是最小的系统,也就是没有任何模块,系统就无法运用。后来添加了一个功用,完善了系统。在编写代码时,我们可以添加一些标志位来启用或禁用这些添加的功用。这有助于处理当前的成绩。下图是语音通讯的软件框图。最小的系统是采集、回放、编解码网络、发送和接纳等。没有这些,就谈不上。但是,一些预处置模块(AEC/ANS/AGC等。)都不在最小系统里,只是后来一步一步加出来的。假定系统出了成绩。我们先禁用预处置模块组成一个最小系统,看看有没有成绩。假如有成绩,我们会持续调查。假如没有,首先启用AEC以检查能否有任何成绩。阐明成绩出在AEC,而不是ANS或许AGC。假如没有成绩,持续启用ANS,看能否有成绩。假如有成绩,阐明成绩出在ans,而不是AGC。经过这几个步骤,根本定位成绩出在哪个模块,再结合其他办法,直到找到基本缘由。
开发音频的时分,不论是语音还是音乐,很多成绩都是音频听起来不对劲。这时,应该运用音频的共同调试办法。
5)转储音频数据
转储音频数据就是把音频数据转储出来,用工具(比方CoolEdit,前面会详细引见)播放,或许看波形或许频谱看能否正确。普通是找几个例如的转储点,一个在模块前,一个在模块后。假如进入模块前来自dump的数据是好的,但是加入模块后的音频数据是坏的,那么成绩就出在这个模块,然后一步一步,最初找到音频数据写坏的中央。以下面的语音通讯软件框图为例。在AEC之前设置一个转储点,在AEC之后设置另一个转储点。假如AEC之前的音频数据是好的,AEC之后的音频数据是坏的,那么成绩一定出在AEC。
转储音频数据也有几种不同的办法,不同的办法用在不同的场所。
a)将音频数据写入指定文件,成绩再次呈现后,导出该文件用于工具剖析。
b)将音频数据放入RTP包中发送到指定的IP地址,运用包捕捉工具(如wireshark,前面会引见)捕捉这些包。由于是PCM数据,所以可以间接在wireshark上收听或观看波形。这多用于语音通讯场景。
c)有时分有些模块对本身来说是黑盒。比方linux下内核空间的音频驱动,关于运用空间的人来说就是黑箱。调查运用空间的音频数据没有成绩,最初从扬声器或许耳机出来的音频有成绩。这时可以用一根音频线,一端衔接毛病设备的耳机,另一端衔接电脑,重现成绩。呈现成绩时,运用CoolEdit录制音频。先听确认成绩出在这个黑匣子模块,再看波形。假如是正轨的,很容易查一些。假如不是规律,详细成绩详细剖析。
6)回送音频数据
环回音频数据是为了构成一个环路来扫除毛病。以下面的语音通讯软件框图为例。环回有几种不同的级别,如下图所示:
1)采集和报答构成一个回环,即采集到的音频数据立刻被报答。假如听起来不错,阐明音频驱动没有成绩。假如没有,阐明成绩出在音频驱动上。
2)将预处置后的数据构成回放成环回,即间接播放ANS后的PCM数据。假如听起来不错,阐明预处置没成绩;假如没有,阐明成绩出在预处置上。
3)编解码构成loopback,行将编码后的码流立刻放入解码器失掉pcm数据,然后回放。阐明成绩出在网络端听起来不错,阐明成绩出在编解码器就不好了。
经过下面的循环,根本可以定位成绩出在哪个模块,然后在这个模块里细心排查,直到找到基本缘由。
2.工具
下面的办法提到了几个工具,比方CoolEdit,上面会详细引见。
1)酷编辑/试听
这应该算是音频开发的必备工具。以前叫CoolEdit,后来被Adobe收买,重新包装构成Audition。我团体还是习气用CoolEdit,由于习气了。其次,CoolEdit可以保管为PCM文件,而Audition不能。保管为PCM文件最方便音频开发。
有了CoolEdit,可以听音频能否正常,看波形,出成绩时看波形能否规律,看频谱。同时可以生成一些特定的音频文件实行调试。比方调试音频算法需求比拟长的工夫(>:1)秒的音频文件会很不方便,次要是日志比拟多,不方便剖析。通常算法的一帧是10ms或许20ms,所以调试算法需求几帧。这时分用CoolEdit做一个几十ms的PCM文件实行算法调试。比方用CoolEdit做一个20HZ到20000HZ的扫频文件作为算法或系统的输出,看看算法或系统的频率呼应如何。
CoolEdit的详细用法可以在协助文件或许网上文章中找到,这里就不赘述了。
2)Wireshark
Wireshark次要用于语音通讯场景,捕获网络上的语音数据包。当然也可以捕获其他类型的包,就是做音频开发时和语音相关的RTP/RTCP包。抓到一个包后,可以看看详细包的RTP/RTCP属性,比方序列号/工夫戳等。,从而剖析定位成绩。Wireshark还可以剖析丢包率等。,还可以用编解码器g711播放语音包。当然还有其他用处,这里就不说了。假如需求,可以在网上阅读详细文章。
3)mediainfo
Mediainfo次要用于音乐场景。有了它,你可以看到一个音乐文件(如MP3)的属性,如采样率/声道数/编解码器类型/码率等。假如日志中看到的打印值与mediainfo中显示的值不婚配,则读取音乐文件属性的代码有成绩。
4)金波
GoldWave也次要用于音乐场景,用于转换采样率/编解码器/比特率等。支持很多采样率,编解码器,比特率,有助于调试。比方一个系统需求支持11025HZ采样率的音乐文件,但是市面上的音乐文件普通都是44.1KHZ或许48KHZ,需求专门的工具实行转换,才干失掉想要的文件。然后拿这个文件去调试测试,看系统能否支持采样率为11025HZ的音乐文件。
先暂时说说音频调试的办法和工具。当前假如想起遗忘的和新的,会及时补充。也欢送大家补充,构成一个好的调试办法和工具集对大家都会有益处。谢谢你