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

RealDoubleFFT 에러

0 추천
import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import ca.uol.aig.fftpack.RealDoubleFFT;

public class AudioProcessing extends Activity implements OnClickListener{

    // AudioRecord 객체에서 주파수는 8kHz, 오디오 채널은 하나, 샘플은 16비트를 사용

    int frequency = 8000;

    int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;

    int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

    private RealDoubleFFT transformer;

    int blockSize = 256;

 

    Button startStopButton;

    boolean started = false;

 

 
    RecordAudio recordTask;

 

   ImageView imageView;

    Bitmap bitmap;

    Canvas canvas;

    Paint paint;

 

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        startStopButton = (Button)findViewById(R.id.StartStopButton);

        startStopButton.setOnClickListener(this);

        transformer = new RealDoubleFFT(blockSize);

        imageView = (ImageView)findViewById(R.id.ImageView01);

        bitmap = Bitmap.createBitmap((int)256, (int)100, Bitmap.Config.ARGB_8888);

        canvas = new Canvas(bitmap);

        paint = new Paint();

        paint.setColor(Color.GREEN);

        imageView.setImageBitmap(bitmap);

    }

    private class RecordAudio extends AsyncTask<Void, double[], Void>{

        @Override

        protected Void doInBackground(Void... params) {

            try{

            

                int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);

 

                AudioRecord audioRecord = new AudioRecord(

                        MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);

 

            
                short[] buffer = new short[blockSize];

                double[] toTransform = new double[blockSize];

 

                audioRecord.startRecording();

 

                while(started){

                    int bufferReadResult = audioRecord.read(buffer, 0, blockSize);

 

                  
                    for(int i = 0; i < blockSize && i < bufferReadResult; i++){

                        toTransform[i] = (double)buffer[i] / Short.MAX_VALUE; // 부호 있는 16비트

                    }

 

                    transformer.ft(toTransform);

    

                    publishProgress(toTransform);

                }

 

                audioRecord.stop();

            }catch(Throwable t){

                Log.e("AudioRecord", "Recording Failed");

            }

 

            return null;

        }

 

        @Override

        protected void onProgressUpdate(double[]... toTransform) {

            canvas.drawColor(Color.BLACK);

 

            for(int i = 0; i < toTransform[0].length; i++){

                int x = i;

                int downy = (int) (100 - (toTransform[0][i] * 10));

                int upy = 100;

 

                canvas.drawLine(x, downy, x, upy, paint);

            }

            imageView.invalidate();

        }

    }

 

    @Override

    public void onClick(View arg0) {

        if(started){

            started = false;

            startStopButton.setText("Start");

            recordTask.cancel(true);

        }else{

            started = true;

            startStopButton.setText("Stop");

            recordTask = new RecordAudio();

            recordTask.execute();

        }

    }

}
익명사용자 님이 2015년 12월 3일 질문
글쓴이입니다.ㅠㅠㅠ여기서 에러 나는부분이
import ca.uol.aig.fftpack.RealDoubleFFT;
   private RealDoubleFFT transformer;
      transformer = new RealDoubleFFT(blockSize);
  transformer.ft(toTransform);


이것인데 왜이러는걸까요?ㅠㅠㅠㅠㅠㅠㅠㅠ

2개의 답변

+1 추천
fftpack 을 설치 or 설정 했고, RealDoubleFFT.java 파일을 가지고 계시죠?

저기.. 혹시.. 친구집에서 스타크래프트 단축 아이콘만 복사해 와서 실행이 안된다고 하는...
JINASYS (5,630 포인트) 님이 2015년 12월 8일 답변
0 추천
에러나는 부분이라고만 하시지마시고
제발 오류 로그를 보여주세요.

시간이 남아돌지 않는 이상
여기서 코드 일일히 분석해서 답변해주시는
천사분들 드물겁니다.
Jinthree (8,980 포인트) 님이 2015년 12월 8일 답변
...