2016-11-16 3 views
0

Я загрузил приложение аудио-эха с портала Android NDK для opensl. Из-за отсутствия документации я не могу определить, как изменить частоту дискретизации и размер буфера аудио входа и выхода.Есть ли способ опробовать аудио с помощью open android с различными частотами выборки и размерами буфера?

Если кто-нибудь имеет какие-либо идеи о том, как:

  • Изменить размер буфера и частоту дискретизации на OpenSL
  • Read буферы, которые будут подаваться в код C, чтобы быть обработаны
  • подаваемом в выходной модуль OpenSL для подачи на громкоговорители

Еще одна альтернатива, которую я чувствую, читается с предпочтительной частотой дискретизации и размером буфера, но уменьшает и уменьшает размер самого кода и использует цикл lar буфера для получения желаемых данных. Но как мы читаем и подаем данные в openSL?

ответ

1

В API OpenSL ES, есть вызовы, чтобы создать либо плеер или рекордер:

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, задокументированный в разделе 8.12 SLBufferQueueItf для OpenGL ES specification.

Смежные вопросы