나는 eclipse IDE를 통해 안드로이드 SDK에서 네이티브 함수가받은 오디오 바이트 스트림의 FFT를 계산할 수있는 신뢰할 수있는 방법을 찾고있다. 나는 libgdx fft와 Jtransform을 보았습니다. 여기에 번역본이 있습니다. JTransform . 나는 그 (것)들을 전부 다운로드하고 프로젝트를위한 루트 디렉토리에있는 창조 된 libs 폴더에 .jar 파일을 추가했다. 그런 다음 프로젝트 속성> Java 빌드 경로> 라이브러리를 통해 프로젝트를 새로운 .jar 파일에 연결했습니다.Jtransform의 DoubleFFT_1D()로 DFT 계산하기 android
내 src java 파일은 Jtransform을 사용하려고하는 것처럼 보입니다. 이 예에서
package com.spectrum;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.view.View;
import com.badlogic.gdx.audio.analysis.*;
import edu.emory.mathcs.jtransforms.fft.*;
import edu.emory.mathcs.utils.*;
public class spectrum extends Activity {
static byte [] sin = null;
static int f = 2000;
static int fs = 44100;
double buf;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialize(new SpectrumDesktop(), false);
sin = playsin(f,fs);
buf = bytearray2double(sin);
public DoubleFFT_1D(512); //<Undefined>
public void complexForward(sin) //<Undefined>
playsound(sin);
}
public static double bytearray2double(byte[] b) {
ByteBuffer buf = ByteBuffer.wrap(b);
return buf.getDouble();
}
private void playsound(byte[] sin2){
int intSize = android.media.AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT, intSize, AudioTrack.MODE_STREAM);
at.play();
at.write(sin2, 0, sin2.length);
at.stop();
at.release();
}
@Override
protected void onDestroy() {
super.onDestroy();
// TODO Auto-generated method stub
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
public native byte[] playsin(int f,int fs);
/** Load jni .so on initialisation */
static {
System.loadLibrary("SPL");
}
}
는 난 단지 그러나 나는 lingdx 패키지 같은 컴파일 오류가 발생되었습니다 Jtransform 패키지를 사용하고 있습니다. 컴파일러에서는 DoubleFFT_1D 및 complexForward가 정의되지 않는다고 말합니다. 내 라이브러리를 올바르게 연결하지 않아서 내가 누락 된 부분이 있으므로 확실하지 않습니다. 도움을 주시면 대단히 감사하겠습니다. onCreate 또는 뭔가 전에 DoubleFFT_1D 및 complexForward의 인스턴스를 선언하겠습니까?
나는 이것이 멍청한 질문이라는 것을 알고 있지만, 나는 객체 지향 언어에 익숙하지 않고 이동 중에도 자바를 배우고있다. 감사합니다 :)
누구나 아이디어가 있으십니까? – digiphd
이 함수를 호출 하시겠습니까? 아니면 직접 함수를 생성하고 있습니까? – Shah