AudioTrack数据流程
2017-02-27 18:19:58 0 举报
AudioTrack是Android中用于播放音频的类,其数据流程主要包括以下步骤:首先,通过AudioTrack的构造函数创建一个AudioTrack实例,设置其参数如采样率、声道数等;然后,将音频数据写入AudioTrack的缓冲区,这些数据可以是原始的PCM数据,也可以是经过编码的数据;接着,调用AudioTrack的write方法将数据写入缓冲区,这个方法会返回实际写入的数据量;最后,通过调用AudioTrack的play方法开始播放音频。在音频播放过程中,可以通过getPosition方法获取当前播放的位置,以及通过getPlaybackHeadPos方法获取当前播放的头部位置。
作者其他创作
大纲/内容
9
getDeviceForStrategy
Threads.cpp
AudioFlinger.cpp
AudioTrack
MediaPlayerService.cpp
1
ClientProxy::obtainBuffer
android_media_AudioTrack_get_min_buff_size
out_get_format
SoundPool.cpp
TrackHandle
FastMixer
5
audioCallback
load
getMinFrameCount
openOutputStream
AudioTrackShared.cpp
getOutputForAttr
releaseBuffer
ServerProxy::obtainBuffer
*(outBuffer++) += (short)Sample;
AudioTrackThread
getOutputForDevice
android_media_SoundPool.cpp
AUDIO_OUTPUT_FLAG_FAST
3
startSource
getLatency
PatchPanel.cpp
setOutputDevice
6
_common_pcm_open
13
mSampleRate
AudioTrackClientProxy
createTrack_l
Tracks.cpp
createAudioPatch_l
start
threadLoop
WaveGenerator *lpWaveGen = lpToneGen-mWaveGens.valueFor(lFrequency);
findSample_l
writeToTrack
AudioStreamOut.cpp
set
android_media_AudioTrack_write_native_bytes
FastThread
android_media_AudioTrack.cpp
write
startOutput
run
ToneGenerator.java
latency_l
14
getOutputFrameCount
findSuitableHwDev_l
SoundPool.java
android_media_AudioTrack_setup
isCompatibleProfile
process__genericNoResampling
如AUDIO_FORMAT_DTS
out_get_channels
AudioMixer.cpp
_play
getFormat
native_setup
AUDIO_OUTPUT_FLAG_NONE
AudioHwDevice.cpp
doLoadSample
onWork
ToneGenerator.cpp
AudioTrack.cpp
audio_policy.conf
11
doLoad
play
mCblkMemorymCblkmBuffer
AudioTrackServerProxy
TRANSFER_SHARED
Native
createAudioPatch
getProfileForDirectOutput
getSamples
convertMixerFormat
TRANSFER_CALLBACK
prepareWave
Track
sendCreateAudioPatchConfigEvent
AudioSystem.cpp
createTrack
AudioPolicyManager.cpp
getChannelMask
native_start
SoundPoolThread
ToneGenerator
FastMixer.cpp
TRANSFER_DEFAULT
getOutputSamplingRate
process__validate
obtainBuffer
TrackBase
10
12
2
getSamplingRate
8
getNextBuffer
TRANSFER_SYNC
frameCount = buffSizeInBytes;
process
out_write
mUserData = user;
getNewOutputDevice
PlaybackThread
native_get_min_buff_size
RecordThread
4
out_get_sample_rate
build
IOProfile.cpp
initAudioTrack
DirectOutputThread
mCbf = cbf;
AudioTrack.java
android_media_ToneGenerator.cpp
onStateChange
startThreads
calculateMinFrameCount
alsa_open
decode
DirectOutputThread::threadLoop_mix
Thread
getMinBufferSize
readOutputParameters_l
AudioService.java
TRANSFER_OBTAIN
MediaPlayer.java
7
getSampleRate
getOutput
mNormalFrameCount
frameCount
getOutputLatency
state-mOutputSink = mOutputSink.get();
MixerThread
sendConfigEvent_l
Track::start
addTrack_l
processConfigEvents_l
callback
beginThread
audio_raw_hw.cpp
AudioGroup.cpp
AudioFlinger
openOutput
open
audio_hw.c
native_write_native_bytes
android_media_AudioTrack_start
buffer-mRaw = part1 0 ? &((char *) mBuffers)[(mIsOut ? front : rear) * mFrameSize] : NULL;
loadHwModule_l
setParameter
openOutput_l
MixerThread::threadLoop_mix
audio_hw.cpp
sampleRate
out_raw_write
audio_raw_hw.c
AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD
如AUDIO_FORMAT_PCM_16_BIT
adev_open_output_stream
frameCount = buffSizeInBytes / (channelCount * bytesPerSample);
AUDIO_OUTPUT_FLAG_DEEP_BUFFER
resume
hal
FastThread.cpp
loadSample
invalidateState
_load
onLoadSoundEffects
TrackHandle::start
buffer-mRaw = part1 0 ? &((char *) mBuffers)[(mIsOut ? rear : front) * mFrameSize] : NULL;
PlaybackThread::threadLoop_write
onPlaySoundEffect
startTone
mNormalSink = initFastMixer ? mPipeSink : mOutputSink;
android_media_MediaPlayer.cpp
DuplicatingThread
latency
getFrameCount
btif_avrcp_audio_track.cpp
OffloadThread
processAudioBuffer
JAVA
loadSoundEffects
prepareTracks_l
SoundPool
ThreadBase
frameCount * channelCount * bytesPerSample
cblk buffer
adev_create_audio_patch
playSoundEffect
initFastMixer = mFrameCount mNormalFrameCount
MediaPlayer.cpp
AUDIO_STREAM_VOICE_CALL
mNormalFrameCount = multiplier * mFrameCount;
audio_patch_mix2device
0 条评论
下一页