簡體   English   中英

Android:如何在C / C ++中獲得首選(本機)音頻緩沖區大小和音頻采樣率?

[英]Android : How to get the preferred (native) audio buffer size and audio sample rate in C/C++?

要獲得給定Android設備的首選音頻緩沖區大小和音頻采樣率,您可以執行以下Java代碼:

// To get preferred buffer size and sampling rate.
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
String rate = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
String size = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
Log.d("Buffer Size and sample rate", "Size :" + size + " & Rate: " + rate);

是否可以在C / C ++中執行此操作?

如果是這樣,怎么樣?

openSLES API似乎沒有提供此功能。 我注意到openSLES.h定義了一個SLAudioInputDescriptor結構以及一個SLAudioOutputDescriptor,但如果這在Android上可用,我不知道如何獲得支持的麥克風和揚聲器采樣率。 此外,該結構不包含有關首選緩沖區大小的信息。

當然,這不是OpenSL ES API的一部分,這些參數是特定於Android的,並且是Android OS的一部分。

不幸的是,我發現無法直接在本機代碼中獲取這些參數。 我最終通過JNI調用Java函數。

這里有偽代碼:

    jclass audioSystem = env->FindClass("android/media/AudioSystem");
    jmethodID method = env->GetStaticMethodID(audioSystem, "getPrimaryOutputSamplingRate", "()I");
    jint nativeOutputSampleRate = env->CallStaticIntMethod(audioSystem, method);
    method = env->GetStaticMethodID(audioSystem, "getPrimaryOutputFrameCount", "()I");
    jint nativeBufferLength = env->CallStaticIntMethod(audioSystem, method);

按照您的意願添加錯誤處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM