录制中rampVolume参数溢出问题的解决步骤

操作方法

  • 01

    学习Android培训,还有一个很重要的知识点,就是录制中rampVolume参数溢出的问题,这也是我们Android开发经常需要应用到的操作,现在我们一起来看看他的具体操作方法吧。 在录音的过程中发现在最前面的1s中总是会有“噗”的一声的噪音。一直在跟踪查找,发现是Android源码中有一处溢出造成的。stagefright中的AudioSource的void rampVolume(int32_t startFrame, int32_t rampDurationFrames, uint8_t *data, size_t bytes);函数(raise the volume from mute to the actual level linearly)。在AudioSource的read()函数将从AudioRecord读入的数据经过计算int32_t autoRampDurationFrames =(kAutoRampDurationUs * mSampleRate + 500000LL) / 1000000LL;int32_t autoRampStartFrames =(kAutoRampStartUs * mSampleRate + 500000LL) / 1000000LL;int32_t nFrames = mNumFramesReceived - autoRampStartFrames;rampVolume(nFrames, autoRampDurationFrames,(uint8_t *) buffer->data(), buffer->range_length());其中nFrames和autoRampDurationFrames的计算存在溢出,kAutoRampDurationUs和kAutoRampDurationUs都是int64_t类型的值,计算结果直接强制转换为int32_t类型。于是修改后的代码为int64_t autoRamp = kAutoRampDurationUs;autoRamp *= mSampleRate;int32_t autoRampDurationFrames = (autoRamp +500000LL) / 1000000LL;autoRamp = kAutoRampStartUs;autoRamp *= mSampleRate;int32_t autoRampStartFrames =(autoRamp + 500000LL) / 1000000LL;int32_t nFrames = mNumFramesReceived - autoRampStartFrames;rampVolume(nFrames, autoRampDurationFrames,(uint8_t *) buffer->data(), buffer->range_length());这样就解决了rampVolume函数处理的nFrames帧的数据出现爆音的问题。  举一反三,播放器的文件大小限制的问题也是由于溢出的问题引起的,文件大小使用int32_t类型的地方限制了大小只能支持到2G,因此需要将这些地方修改int64_t使得文件大小能够支持到fat32的存储文件的最大值4G。

(0)

相关推荐

  • 如何启用小米手机屏幕录制中的“关闭悬浮窗时返回主页”功能?

    相信很多小伙伴都有在使用小米手机,其中屏幕录制中的"关闭悬浮窗时返回主页"功能如何才能启用呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,打开手机上的"屏幕 ...

  • Excel打不开的症状以及解决步骤

    常见有些朋友说excel打不开。究其原因也是多种多样。本文旨在做一个excel打不开的各类问题汇集。 excel打不开症状一: Q:新建的excel文档存盘(07或03格式),可以打开,但打不开在这之 ...

  • Win7 64位纯净版宽带连接经常出错的原因和解决步骤

    Win7 64位纯净版 宽带连接经常出错的原因和解决步骤:宽带并没有很严格的定义。从一般的角度理解,它是能够满足人们感观所能感受到的各种媒体在网络上传输所需要的带宽,因此它也是一个动态的、发展的概念。 ...

  • win7系统80端口被程序进程占用详细解决步骤

    win7系统80端口被程序进程占用详细解决步骤 解决方法如下: 1.在IIS管理器中更改网站绑定端口为除80端口外的其它端口. 2.停止正在使用80端口的应用程序,然后从IIS管理器中启动网站. 3. ...

  • CAD制图后输出PDF显示不全怎么办?解决步骤分享

    为了方便浏览和阅读.我们在绘制完毕之后,会直接保存为PDF格式,但是当我们打开观看时,会发现,它会比原来的图纸小一点,这个时候应该怎么办?今天为大家分享CAD制图输出不完整的解决步骤 操作方法 01 ...

  • win10安装驱动蓝屏错误cmudaxp.sys解决步骤

    win10系统用户在安装驱动时出现蓝屏提示错误cmudaxp.sys,这是什么原因呢?接下来给大家分享win10安装驱动蓝屏错误cmudaxp.sys解决步骤. win10安装驱动蓝屏错误cmudax ...

  • Hp p1606dn局域网网络打印无法连接的解决步骤

    Hp p1606dn局域网网络打印无法连接的解决步骤问题现象:在一台新电脑上连接办公室p1606网络打印机,发现通过ip无法连接,连接提示找不到打印机,ping不通打印机ip,连接其他网络打印机正常, ...

  • Ev录屏没有声音怎么样办 如何解决录视频声音小

    我们在使用EV录屏的时候,如果声音很小,甚至没有声音怎么样办呢?下面我们就来看看怎么解决Ev录屏没有声音的方法吧. 方法/步骤1 01 首先我们在Windows10系统桌面右下角找到音量图标 02 右 ...

  • iPhone的嘿Siri录不进去设置不了的解决方法

    有些人发音正常,但是却一直说听不清,其实不是发音的事. 操作方法 01 先长按home键激活siri 02 对siri说些什么,看有没有反应,没反应的话就去看话筒有没有被挡住什么的 03 有反应的话就 ...