gpt4 book ai didi

java - Android:从类似于 AudioRecord 的 JNI 级别访问 AudioRecord.Builder 类

转载 作者:行者123 更新时间:2023-12-04 13:07:25 32 4
gpt4 key购买 nike

访问AudioRecord.Builder的正确方法是什么?在 JNI 级别?

类似于AudioRecord类。

(jclass)jni_env->NewGlobalRef(jni_env->FindClass("android/media/AudioRecord"));

例如:

AudioRecord recorder = new AudioRecord.Builder()
.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION)
.setAudioFormat(new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(32000)
.setChannelMask(AudioFormat.CHANNEL_IN_MONO)
.build())
.setBufferSizeInBytes(2*minBuffSize)
.build();

最佳答案

除了我上面的评论,你可以很容易地找到这些类型的东西,因为 android 是开源的。

所以先来看看android AudioRecord源代码。在那里您会注意到 AudioRecord 构造函数调用一个名为 native_start 的方法以及其他本地方法来通过 JNI 设置音频。

enter image description here

进一步浏览,您将看到引用 AudioRecord.cpp 文件的注释。

可以找到cpp文件here您可能需要确保查看与您的 Android 版本相匹配的版本,我只是从 Google 搜索中挑选了任何人。在那里你当然会看到 AudioRecord 类是如何在本地运行的,以及它向 JNI 等公开的方法

enter image description here

通过上面你可以从本质上看到AudioRecord java类本质上与本地代码交互,这就是你想要实现的

更新:

因此,根据您的评论,您完全可以做到这一点。问题是我只是使用了随机链接,所以很抱歉,这可能是我的错。

如果您查看 master 分支源代码,您会找到您要找的东西。

AudioRecord.java在 master 分支中,您会发现它在构造函数中接受一个 AudioAttributes 类,该类会进一步向下过滤,然后最终使用这些过滤后的音频属性调用 native_setup mAudioAttributes:

enter image description here

您可以进一步了解如何在 native 代码中应用这些属性 AudioRecord.cpp跟踪通过 AudioRecord.java 传递到 native_setupjaa 变量,它映射到本地方法 android_media_AudioRecord_setup :

enter image description here

enter image description here

关于java - Android:从类似于 AudioRecord 的 JNI 级别访问 AudioRecord.Builder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68761033/

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