인터넷 돌아다니다가 안드로이드용 Power Spectrum 소스를 구했음.
start 버튼 누르고 마이크에 대고 말하면 주파수 대역을 그려주는 소스인데
앱 소스 출처: http://som-itsolutions.blogspot.kr/2012/01/fft-based-simple-spectrum-analyzer.html

이걸 NDK를 써서 JNI로 옮겨보기로 했음. (기본 소스가 내 핸폰에서 느리기도 해서)

1

2

3

4

5

6

static{

    System.loadLibrary("createFFTWrapper");

    System.loadLibrary("ndkFT");

 }

private native long createFFTWrapper(int blockSize); // Void constructor

private native void ndkFT(long nativePointer, double[] c, int size);

두번째 줄에서 자꾸 에러가 나는거임 어제 하던거라 에러메세지는 기억 안남.
이런저런거 찾아보다가 OpenCV JNI 하던게 생각나서Android.mk랑  Application.mk를 찾아봄.
그리고 인터넷 검색해서 현 프로젝트에 맞춰서 수정해보고 잘 되는거 확인후 여기에 정리해둠.

1

2

3

4

5

6

7

8

9

10

LOCAL_PATH := $(call my-dir)

 

include $(CLEAR_VARS)

 

LOCAL_SRC_FILES := kr_co_linsoo_fftvoice_fftWrapper.cpp

LOCAL_LDLIBS += -llog

LOCAL_MODULE := ndkvoice

 

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

현재 작업중인 FFTVoice의 Android.mk 파일 내용.

1. LOCAL_PATH := $(call my-dir)
– android.mk 파일이 위치하고 있는 현 경로를 기본 패스로 지정함.
(그래서 jni폴더에 이 파일을 만들고 cpp파일도 같이 넣어두는거죠.)

2. include $(CLEAR_VARS)
– LOCAL_SRC_FILES, LOCAL_LDLIBS, LOCAL_MODULE 등등 LOCAL_XXXX 로 시작되는 변수들을 초기화 합니다.

3. LOCAL_SRC_FILES
– 컴파일할 소스파일을 적어줍니다. 파일 하나 하나 적어줘도 되고 파일리스트를 만들어서
해당경로 디렉토리에 있는 파일을 자동으로 입력할수도 있습니다.

LOCAL_SRC_FILES := kr_co_linsoo_fftvoice_fftWrapper.cpp 부분을 아래와 같이 바꿔도 됩니다.

1

2

FILE_LIST:= $(wildcard &(LOCAL_PATH)/*.cpp)

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

JNI 폴더에 있는 모든 cpp파일을 빌드함.

4. LOCAL_LDLIBS
– 추가 라이브러리 링크 걸때 사용.
예를 들어 Liblinsoo.so 파일이면 -llinsoo 라고 쓰면 됨
https://developer.android.com/ndk/guides/stable_apis.html <== 여기에 가면 각종 옵션 설명이 나옴.

5. LOCAL_MODULE
– 빌드해서 만들 모듈이름을 지정하는곳

6. include $(BUILD_SHARED_LIBRARY)
– 생성되는 라이브러리를 스태틱으로 할건지 공유형으로 할건지 정하는것

이 글 작성하다가 깨달았는데 굳이 Android.mk 하나로 모든걸 퉁칠 필요 없이
CPP 하나나 몇개 모아서 하나의 lib로 만들때 마다 mk파일 하나씩 만들어 넣으면 된다는걸 깨달음.
테스트로 내가 작성한 lib 생성용 mk파일 하나 만들고 android.mk파일 안에다가

1

include fftWrapper.mk

이거 한줄 넣어주니 실행 잘 됨.

아직 이해 안되는것이 좀 있긴 한데 지금 당장은 모르겠고 이것저것 해보다 보면 깨닫게 되는 날이 오겠지.

참고 사이트 : https://developer.android.com/ndk/guides/android_mk.html

번호 제목 글쓴이 날짜 조회 수
128 PC를 위한 최고의 안드로이드 에뮬레이터 황제낙엽 2023.01.18 3134
127 [Jetpack Compose UI / 상추님] GDG Jetpack compose 코드랩 수료 후기 (feat. 굿즈) 황제낙엽 2022.12.24 2372
126 [Jetpack Compose UI / kyj1991719] compose - Compose 이해 황제낙엽 2022.12.24 4025
125 [Jetpack Compose UI / 꾸준] Compose 가 뭔데...? 황제낙엽 2022.12.24 4035
124 [Jetpack Compose UI / IIVIKI] Compose 학습과 분석 황제낙엽 2022.12.24 4050
123 [Jetpack Compose UI] 스터디 시작하기 황제낙엽 2022.12.24 4001
122 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 바텀네비게이션 뷰, 네비게이션 AAC file 황제낙엽 2022.12.22 3882
121 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 뷰바인딩 file 황제낙엽 2022.12.22 3850
120 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 라이브데이터 뷰모델 file 황제낙엽 2022.12.21 3827
119 [대왕놀] ImageButton in Compose (IconButton) 황제낙엽 2022.12.20 4105
118 [대왕놀] compose instrumentation test tutorial 황제낙엽 2022.12.20 3985
117 [대왕놀] Switch in Compose 황제낙엽 2022.12.20 4106
116 [대왕놀] EditText in Compose (TextField) 황제낙엽 2022.12.20 4021
115 [대왕놀] margin in Compose 황제낙엽 2022.12.20 4105
114 [대왕놀] modifier in compose 황제낙엽 2022.12.20 4181
113 [대왕놀] Button in Compose file 황제낙엽 2022.12.20 4224
112 [대왕놀] TextView in Compose (Text) 황제낙엽 2022.12.20 4083
111 [대왕놀] ImageView in Compose (Image) 황제낙엽 2022.12.20 4017
110 [대왕놀] LinearLayout in Compose (Row, Column) 황제낙엽 2022.12.20 4114
109 [대왕놀] Introduction to Jetpack compose 황제낙엽 2022.12.20 3965