首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓audioFlinger

安卓audioFlinger
EN

Stack Overflow用户
提问于 2015-03-27 18:47:39
回答 1查看 2.2K关注 0票数 0

我修改了/audioflinger/thread.cpp,并希望更改HAL值,然后将其写入mMixbuffer,但是当我播放它时,它发出噪声的声音,但我找不到哪里出了问题。有没有人知道发生了什么事?谢谢。

以下是代码

代码语言:javascript
复制
   ssize_t AudioFlinger::PlaybackThread::threadLoop_write() 

    {
     // FIXME rewrite to reduce number of system calls

     mLastWriteTime = systemTime();

     mInWrite = true;

     ssize_t bytesWritten;

    // If an NBAIO sink is present, use it to write the normal mixer's submix

     if (mNormalSink != 0) {

    #define mBitShift 2 // FIXME

    size_t count = mBytesRemaining >> mBitShift;

    size_t offset = (mCurrentWriteLength - mBytesRemaining) >> 1;

    ATRACE_BEGIN("write");

    // update the setpoint when AudioFlinger::mScreenState changes

    uint32_t screenState = AudioFlinger::mScreenState;

    if (screenState != mScreenState) {
        mScreenState = screenState;
        MonoPipe *pipe = (MonoPipe *)mPipeSink.get();
        if (pipe != NULL) {
            pipe->setAvgFrames((mScreenState & 1) ?
                    (pipe->maxFrames() * 7) / 8 : mNormalFrameCount * 2);
        }
    }

下面是我添加的代码

代码语言:javascript
复制
    int16_t *p = mMixBuffer;

    for ( int i = 0 ; i < mNormalFrameCount * mFrameSize / sizeof(int16_t)  ; i++ )  {

     if ( i <  ( mNormalFrameCount * mFrameSize / sizeof(int16_t) ) / 2 ) {

        p[i] = p[i] *0.800316;

      }
      else {

        p[i] = p[i] *0.812281;

      }

}

并将其写入HAL

ssize_t framesWritten = mNormalSink->write(mMixBuffer + offset, count);

EN

回答 1

Stack Overflow用户

发布于 2015-05-23 03:31:25

mMixBuffer是一个混音器缓冲区,包含经过AudioMixer处理后的pcm数据。这里你尝试改变的是pcm数据,这是导致失真的原因。我假设您正在尝试更改数据量,因为我猜prepareTracks_l将是一个更精确的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29298885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档