Я играю звук с ресурса WAV (загруженного с QT) с помощью OpenSLES на Android с типичным кодом:
SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 2, SL_SAMPLINGRATE_44_1,
SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT, SL_BYTEORDER_LITTLEENDIAN};
SLDataSource audioSrc = {&loc_bufq, &format_pcm};
// configure audio sink
SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, oslContext.GetOutputMixObject()};
SLDataSink audioSnk = {&loc_outmix, nullptr};
//create audio player: fast audio does not support when SL_IID_EFFECTSEND is required, skip it for fast audio case
const SLInterfaceID ids[2] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE, SL_IID_VOLUME};
const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
auto engine = oslContext.GetEngine();
CheckOsl((*engine)->CreateAudioPlayer(engine, &playerObj, &audioSrc, &audioSnk, 2, ids, req));
// realize the player
CheckOsl((*playerObj)->Realize(playerObj, SL_BOOLEAN_FALSE));
// get the play interface
CheckOsl((*playerObj)->GetInterface(playerObj, SL_IID_PLAY, &playI));
// get the buffer queue interface
CheckOsl((*playerObj)->GetInterface(playerObj, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &bufferQueueI));
// get the volume interface
CheckOsl((*playerObj)->GetInterface(playerObj, SL_IID_VOLUME, &volumeI));
// register callback on the buffer queue
CheckOsl((*bufferQueueI)->RegisterCallback(bufferQueueI, OnBufferQueueEvent, this));
, а затем я звоню
CheckOsl((*bufferQueueI)->Enqueue(bufferQueueI, GetBuffer() , GetSize()));
Как изменитьскорость воспроизведения звука, чтобы звук «ggggg» воспроизводился как «gggggggggggg» или «gg», но не «zzzzz» или «ssssss» (без искажений)?