#include
#include
// создаем двигатель
SLObjectItf engineObject = NULL;
slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
(*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
SLEngineItf engineEngine;
(*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
// создаем микшер вывода
SLObjectItf outputMixObject = NULL;
(*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, 0, 0);
(*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
// создаем буферизованный источник аудио
SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_8,
SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};
SLDataSource audioSrc = {&loc_bufq, &format_pcm};
SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
SLDataSink audioSnk = {&loc_outmix, NULL};
const SLInterfaceID ids[1] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
const SLboolean req[1] = {SL_BOOLEAN_TRUE};
SLObjectItf playerObject = NULL;
(*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, &audioSnk,
1, ids, req);
(*playerObject)->Realize(playerObject, SL_BOOLEAN_FALSE);
SLPlayItf playerPlay;
(*playerObject)->GetInterface(playerObject, SL_IID_PLAY, &playerPlay);
// устанавливаем буферизованную очередь для источника аудио
SLAndroidSimpleBufferQueueItf playerBufferQueue;
(*playerObject)->GetInterface(playerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
&playerBufferQueue);
// начинаем воспроизведение
(*playerPlay)->SetPlayState(playerPlay, SL_PLAYSTATE_PLAYING);
// заполняем буфер данными и добавляем его в очередь
short buffer[256]; // здесь должны быть ваши данные
(*playerBufferQueue)->Enqueue(playerBufferQueue, buffer, sizeof(buffer));
Этот код создает аудиоплеер с помощью OpenSL ES и воспроизводит звук из буфера. Вы должны заполнить буфер данными для воспроизведения. Обратите внимание, что этот код не обрабатывает ошибки и не освобождает ресурсы после использования. В реальном приложении вам нужно будет добавить соответствующую обработку ошибок и управление ресурсами.
надо чтоб код был на c++ и работал для андроид