2016-11-16 3 views
0

J'ai téléchargé l'application audio-echo depuis le portail android NDK pour opensl. En raison de l'absence de documentation, je ne suis pas en mesure d'identifier comment modifier la fréquence d'échantillonnage et la taille de la mémoire tampon de l'audio.Existe-t-il un moyen d'échantillonner l'audio en utilisant des ouvertures sur android avec différents taux d'échantillonnage et tailles de mémoire tampon?

Si quelqu'un a une idée sur la façon de:

  • changement de la taille de la mémoire tampon et le taux d'échantillonnage sur OpenSL
  • Lire les tampons d'être transmis à un code C à traiter
  • Fed à la module de sortie de OpenSL à être introduit dans les enceintes

une autre alternative je me sens est lue à la cadence d'échantillonnage préférée et la taille du tampon, mais sous-échantillonner et upsample dans le code lui-même et utiliser un circu lar tampon pour obtenir les données souhaitées. Mais comment lisons-nous et alimentons-nous les données en openSL?

Répondre

1

Dans l'API OpenSL ES, il y a des appels pour créer soit un lecteur ou un enregistreur:

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 );

Notez que ces deux prennent un paramètre SLDataSource *pAudioSrc.

Pour utiliser une fréquence de lecture ou un taux d'enregistrement personnalisé, vous devez configurer correctement cette source de données.

J'utilise un taux de lecture de 11 kHz en utilisant le code suivant:

// 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;

Pour fournir des données aux haut-parleurs, une file d'attente de tampon est utilisé qui est rempli par un rappel. Pour définir ce rappel, utilisez SLAndroidSimpleBufferQueueItf, documenté dans la section 8.12 SLBufferQueueItf du OpenGL ES specification.