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 будет более точным местом, я думаю.