마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

기존의 NDK cpp파일에 접근하고싶습니다.

0 추천

기존에 만들어져있는 NDK파일 android.mk 파일을 통해서 .cpp에 접근하여 변수를 전달하고 싶은데 안됩니다....

JackSimpleClient.cpp 

#include "JackSimpleClient.h"
#include "mylog.h"

namespace android {

jack_client_t *JackSimpleClient::jackClient = NULL;
int JackSimpleClient::bufferSize = 1024;

JackSimpleClient::JackSimpleClient(){
	outPort = NULL;
	bufferSize = 1024;
}

JackSimpleClient::~JackSimpleClient(){
	jackClient = NULL;
}

int JackSimpleClient::processSine (jack_nframes_t frames, void *arg)
{
	JackSimpleClient *thiz = (JackSimpleClient*)arg;
	jack_default_audio_sample_t *out1 = (jack_default_audio_sample_t*)jack_port_get_buffer (thiz->outPort, frames);

	for(unsigned int i=0; i<frames; i++ )
	{
		out1[i] = thiz->sineTable[i%bufferSize];
	}

	return 0;
}

int JackSimpleClient::setUp (int argc, char *argv[])
{
	LOGD("setUp argc %d", argc);
	for(int i = 0;i< argc; i++){
		LOGD("setup argv %s", argv[i]);
	}

	// You have to use argv[0] as the jack client name like below.
	jackClient = jack_client_open (argv[0], JackNullOption, NULL, NULL);
	if (jackClient == NULL) {
		return APA_RETURN_ERROR;
	}

	bufferSize = jack_get_buffer_size(jackClient);

	// init the sine table
	for(int i=0; i<bufferSize; i++ )
	{
		sineTable[i] = (float) sin( ((double)i*8/(double)bufferSize) * 2. * 3.14159265 );
	}

	jack_set_process_callback (jackClient, processSine, this);

	outPort = jack_port_register (jackClient, "out",
					  JACK_DEFAULT_AUDIO_TYPE,
					  JackPortIsOutput, 0);
	if(outPort == NULL){
		return APA_RETURN_ERROR;
	}

	return APA_RETURN_SUCCESS;
}

int JackSimpleClient::tearDown(){
	jack_client_close (jackClient);
	return APA_RETURN_SUCCESS;
}

int JackSimpleClient::activate(){
	jack_activate (jackClient);
	LOGD("JackSimpleClient::activate");
	LOGE("RPM is %d", rpm);

	const char **systemInputs = jack_get_ports (jackClient, NULL, NULL,
				JackPortIsPhysical|JackPortIsInput);
	if (systemInputs == NULL) {
		LOGD("system input port is null\n");
		return APA_RETURN_ERROR;
	}

	jack_connect (jackClient, jack_port_name (outPort), systemInputs[0]);

	free (systemInputs);

	return APA_RETURN_SUCCESS;
}

int JackSimpleClient::deactivate(){
	LOGD("JackSimpleClient::deactivate");
	jack_deactivate (jackClient);
	return APA_RETURN_SUCCESS;
}

int JackSimpleClient::transport(TransportType type) {
	return APA_RETURN_SUCCESS;
}

int JackSimpleClient::sendMidi(char* midi){
	return APA_RETURN_SUCCESS;
}

};

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := libsapaclient
LOCAL_SRC_FILES := apa/lib/libsapaclient.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libjack
LOCAL_SRC_FILES := apa/lib/libjack.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := wave
LOCAL_C_INCLUDES := $(LOCAL_PATH)/apa/include
LOCAL_SRC_FILES := \
	wave.cpp \
	JackSimpleClient.cpp 
LOCAL_CPP_FEATURES := exceptions
LOCAL_MODULE_TAGS := eng optional
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := libjack
LOCAL_STATIC_LIBRARIES := libsapaclient
LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := -g
include $(BUILD_SHARED_LIBRARY)

자바 액티비티에 대하여 javah를 통해 헤더파일을 만들고 Android.mk에 LOCAL_SRC_FILES에 cpp파일에 접근하는데 

계속 오류가 나게됩니다.

.java 에서 소켓통신으로 받은 변수를 저 위에 .cpp에 전달하고 싶습니다. 쉬운 방법이 있을까요???

만듀기 (120 포인트) 님이 2015년 2월 1일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...