在OpenSL ES API,有來電創建無論是播放或記錄:
SLresult (*CreateAudioPlayer) ( SLEngineItf self, SLObjectItf * pPlayer, SLDataSource *pAudioSrc, SLDataSink *pAudioSnk, SLuint32 numInterfaces, const SLInterfaceID * pInterfaceIds, const SLboolean * pInterfaceRequired ); SLresult (*CreateAudioRecorder) ( SLEngineItf self, SLObjectItf * pRecorder, SLDataSource *pAudioSrc, SLDataSink *pAudioSnk, SLuint32 numInterfaces, const SLInterfaceID * pInterfaceIds, const SLboolean * pInterfaceRequired );
注意,這兩個需要SLDataSource *pAudioSrc
參數。
要使用自定義回放速率或記錄速率,您必須正確設置此數據源。
我用使用此代碼的11KHZ回放速率:由回調填充
// Configure data format. SLDataFormat_PCM pcm; pcm.formatType = SL_DATAFORMAT_PCM; pcm.numChannels = 1; pcm.samplesPerSec = SL_SAMPLINGRATE_11_025; pcm.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; pcm.containerSize = 16; pcm.channelMask = SL_SPEAKER_FRONT_CENTER; pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; // Configure Audio Source. SLDataSource source; source.pFormat = &pcm; source.pLocator = &bufferQueue;
要饋送數據到揚聲器,使用緩衝隊列。要設置此回調,請使用SLAndroidSimpleBufferQueueItf,請參閱OpenGL ES specification的第8.12節SLBufferQueueItf。