摘要:
之前我们看过get position,今天来看看set position。*****************************************源码************************************************* //Test case 3: setPlaybackHeadPosition() on paused track @LargeTest public void testSetPlaybackHeadPositionPaused() throws Exception { // constants for te... 阅读全文
摘要:
今天来看看playback rate相关的接口。包括set和get。*****************************************源码************************************************* //Test case 6: setPlaybackRate() accepts values twice the output sample rate @LargeTest public void testSetPlaybackRateTwiceOutputSR() throws Exception { // ... 阅读全文
摘要:
下面来看看音量设置相关的接口。*****************************************源码************************************************* //Test case 1: setStereoVolume() with max volume returns SUCCESS @LargeTest public void testSetStereoVolumeMax() throws Exception { // constants for test final String TE... 阅读全文
摘要:
play, stop, flush这几个函数,今天来看看pause函数。*****************************************源码************************************************* //Test case 4: getPlaybackHeadPosition() is > 0 after play(); pause(); @LargeTest public void testPlaybackHeadPositionAfterPause() throws Exception { // co... 阅读全文
摘要:
上次看到的testPlaybackHeadPositionIncrease函数中,先play了一会,然后获取position。今天看个复杂点的,先play,然后stop,之后在flush,此时再获取position会是什么情况呢?*****************************************源码************************************************* //Test case 3: getPlaybackHeadPosition() is 0 after flush(); @LargeTest public void... 阅读全文
摘要:
继续啃AudioTrack的测试代码。*****************************************源码*************************************************//Test case 2: getPlaybackHeadPosition() increases after play() @LargeTest public void testPlaybackHeadPositionIncrease() throws Exception { // constants for test final ... 阅读全文
摘要:
打算以测试代码中所使用的接口为点,以接口间调用关系为线,逐步撕开Android中Audio的面纱。*****************************************源码************************************************* public void testPlaybackHeadPositionAfterInit() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAf... 阅读全文
摘要:
前几天在看stream type的时候,调用函数AudioSystem::getOutput的地方并没有继续往下看。今天深入看看。*****************************************源码*************************************************status_t AudioTrack::set( int streamType, uint32_t sampleRate, int format, int channels, int frameCount, ... 阅读全文
摘要:
在看音频数据是怎么写的时候,在MixerThread的threadloop函数中,有以下代码完成了往硬件写数据:int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize);mOutput来历:函数AudioFlinger::openOutput中创建了一个MixerThread对象,并将前面调用mAudioHardware->openOutputStream得到的output作为参数传入。MixerThread继承自PlaybackThread,在PlaybackThread的构造函数中将传入的output赋值 阅读全文
摘要:
在看AudioTrack的write函数的时候,了解到,音频数据最终都写到了audio_track_cblk_t的结构体中。这个结构体是在AudioFlinger中创建的。AudioFlinger是如何来使用这些数据的呢?今天就来学习学习。我们写数据的时候,调用了audio_track_cblk_t::framesAvailable_l函数,来判断是否有可用的空间,以供写用。类audio_track_cblk_t中还有另外一个函数framesReady,看名字,应该是告诉我们已经准备好了多少东东。看样子,AudioFlinger在使用音频数据的时候,应该是先调用了framesReady函数,来 阅读全文