int OpenSLPlayer::createSource() { map<int, ContextInfo>::iterator itr = contextInfos.find(contextIndex); if( itr == contextInfos.end() ) { g2cerror( "Attempt to create source from context that doesn't exist." " index=%d\n", contextIndex); exit(0); } ContextInfo& contextInfo(itr->second); SourceInfo* sourceInfo = new SourceInfo; SLresult result; // configure audio source SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2}; SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_44_1, SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16, SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN}; SLDataSource audioSrc = {&loc_bufq, &format_pcm}; // configure audio sink SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, contextInfo.outputMixObject}; SLDataSink audioSnk = {&loc_outmix, NULL}; // create audio player const SLInterfaceID ids[3] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND, SL_IID_VOLUME}; const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; result = (*contextInfo.engine)->CreateAudioPlayer( contextInfo.engine, &(sourceInfo->bqPlayerObject), &audioSrc, &audioSnk, 3, ids, req); if( SL_RESULT_SUCCESS != result ) { g2cerror("OpenSL Failed to initialize OpenSL audio player.\n"); exit(0); } int index = 1; while( sourceInfos.find(index) != sourceInfos.end() ) index++; sourceInfos[index] = sourceInfo; sourceInfo->realize(); return index; }