open sl java audio_android – 用OpenSL调用录音

我找到了修复Galaxy S5通话录音的解决方案.

主要是这个叫:

调用开始时循环中的status_t AudioSystem :: setParameters(audio_io_handle_t ioHandle,const String8& keyValuePairs).

首先得到所需的功能:

open_media = dlopen("/system/lib/libmedia.so", RTLD_LAZY);

set_parameters = (int (*)(int, void *)) dlsym(open_media,

"_ZN7android11AudioSystem13setParametersEiRKNS_7String8E");

接下来我们需要audio_io_handle_t和String8&宾语:

> audio_io_handle_t-音频会话ID增加1,您可以从AudioRecord.getAudioSessionId获取它

> String8&这更难:

//First inicialize function

create_string = (void (*)(void *, const char *)) dlsym(open_util,

"_ZN7android7String8C2EPKc");

//next call this function to convert string to required object

create_string(&str8, str);

当我们拥有所有需要的部件时,我们可以调用setParameters函数:

//remember to call this in loop when recording is starting

set_parameters(id + 1, &str8);

变量声明看起来如何:

int (*set_parameters)(int, void *);

void (*create_string)(void *, const char *);

void *str8 = 0;

const char *str = "input_source=4";

@ChanchalShelar

@Peter @AkshatVajpayee

这是我的.cpp文件的外观:

void *open_media;

void *open_util;

int (*set_parameters)(int, void *);

void (*create_string)(void *, const char *);

void *str8 = 0;

const char *str = "input_source=4";

extern "C" {

JNIEXPORT bool JNICALL

Java_com_sample_NativeAudio_init(JNIEnv *env, jclass);

JNIEXPORT int JNICALL

Java_com_sample_NativeAudio_setParameters(JNIEnv *env, jclass, int id);

}

void get_string8() {

create_string = (void (*)(void *, const char *)) dlsym(open_util, "_ZN7android7String8C2EPKc");

if (!create_string) {

LOGD("There is no create_string function");

} else {

LOGD("create_string function OK");

}

create_string(&str8, str);

if (!str8) {

LOGD("Filed to create str8");

} else {

LOGD("create str8 success");

}

}

JNIEXPORT int JNICALL Java_com_sample_NativeAudio_setParameters(JNIEnv *env,

jclass type, int id) {

if (set_parameters) {

return set_parameters(id + 1, &str8);

}

return 0;

}

JNIEXPORT bool JNICALL Java_com_sample_NativeAudio_init(JNIEnv *env, jclass type) {

open_util = dlopen("/system/lib/libutils.so", RTLD_LAZY);

if (open_util) {

get_string8();

} else {

return false;

}

open_media = dlopen("/system/lib/libmedia.so", RTLD_LAZY);

if (open_media) {

set_parameters = (int (*)(int, void *)) dlsym(open_media,

"_ZN7android11AudioSystem13setParametersEiRKNS_7String8E");

} else {

return false;

}

return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值