Android audioFlinger

Я изменяю /audioflinger/thread.cpp и я хочу изменить значение mMixbuffer и затем записать его в HAL, но когда я играю его, в нем звучит шум, но я не могу найти, что не так. Итак, кто-нибудь знает, что происходит? Благодарю.

Вот код

   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);
        }
    }

Вот код, который я добавляю

    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);

1 ответ

mMixBuffer - это буфер микшера, содержащий данные PCM после обработки AudioMixer. Вот то, что вы пытаетесь изменить данные PCM, что приводит к искажению. И я предполагаю, что вы пытаетесь изменить объем данных, так как prepareTracks_l будет более точным местом, я думаю.

Другие вопросы по тегам