原创 Audio筆記之AudioTrack

        播放聲音可以用MediaPlayer和AudioTrack,兩者都提供了java API供應用開發者使用。雖然都可以播放聲音,但兩者

原创 Audio筆記之MediaPlayerService啓動

int main(int argc, char** argv) { signal(SIGPIPE, SIG_IGN); char value[PROPERTY_VALUE_MAX]; bool doLog = (p

原创 Audio筆記之AudioTrack::play

public void play() throws IllegalStateException { if (mState != STATE_INITIALIZED) { throw

原创 Audio筆記之AudioTrack::write

public int write(byte[] audioData, int offsetInBytes, int sizeInBytes) { if (mState == STATE_UNINITIALIZED) {

原创 Audio筆記之PlaybackThread::threadLoop

bool AudioFlinger::PlaybackThread::threadLoop() { Vector< sp<Track> > tracksToRemove; standbyTime = systemTime

原创 Audio筆記之MediaPlayerService:setDataSource

//下面是一個典型的播放序列: MediaPlayer player=new MediaPlayer() player->setDataSource(url,header); player->prepare(); player->star

原创 Audio筆記之ServiceManager

    在使用各種Server的時候經常會需要調用ServiceManager對象來獲取該Server對應的BpServer,這個過程需要使用Binder機制來進行通信。下面是獲得MediaPlayerService時的調用過程,其中獲取

原创 Audio筆記之AudioTrackThread

static jint android_media_AudioTrack_native_setup( JNIEnv *env, jobjectthiz, jobject weak_this,       

原创 Audio筆記之FastMixer

// FastMixer線程,負責進行mix fast track,從MonoPipe中獲取數據, // 經過mix運算,輸出到AudioStreamOutSink中 bool FastMixer::threadLoop() {

原创 Audio筆記之MixerThread

AudioFlinger::ThreadBase::ThreadBase(const sp<AudioFlinger>& audioFlinger, audio_io_handle_t id,         audio_devices_

原创 Audio筆記之MediaPlayerService:prepare

status_t MediaPlayer::prepare() { ALOGV("prepare"); Mutex::Autolock _l(mLock); mLockThreadId = getThreadId

原创 Audio筆記之AudioEffect

//總結一下effect和track的關聯: //1、全局類型的effect和track的創建無關,可以根據固定的規則查找線程,然後構造effect // 當需要使用時,可以根據全局sessionId進行查找,然後將其移到track所

原创 Audio筆記之Track::attachAuxEffect

status_t AudioTrack::createTrack_l(){ .....     //調用Flinger構造Track對象,關聯track和NormChain,並返回TrackHand的句柄     sp<IAu

原创 Audio筆記之AudioMixer

bool AudioMixer::isMultichannelCapable = false;//是否支持大於兩路的音頻 //downmix effect,用於處理大於兩路音頻的特效,主要是做向下變換 effect_descriptor_

原创 Audio筆記之MixerThread::prepareTracks_l

// prepareTracks_l() must be called with ThreadBase::mLock held AudioFlinger::PlaybackThread::mixer_state AudioFlinger: