gpt4 book ai didi

安卓 : How to get the preferred (native) audio buffer size and audio sample rate in C/C++?

转载 作者:太空狗 更新时间:2023-10-29 14:06:32 25 4
gpt4 key购买 nike

要获得给定 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 操作系统的一部分。

不幸的是,我没有找到直接在 native 代码中获取这些参数的方法。我最终通过 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);

按照您的意愿添加错误处理。

关于安卓 : How to get the preferred (native) audio buffer size and audio sample rate in C/C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32028810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com