2011-04-21 8 views
1

Я искал везде, где можно найти надежный метод вычисления БПФ потока аудио байтов, полученного встроенной функцией в SDK android SDK (через eclipse IDE). Я столкнулся с libgdx fft и Jtransform. Jtransform Найдено JTransform . Я загрузил их все и добавил файлы .jar в созданную папку libs в корневой каталог проекта. Затем я связал проект с новыми .jar-файлами с помощью свойств проекта> java Build Path> Libraries.Вычисление ДПФ с помощью DoubleFFT_1D() для Jtransform для 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"); 
} 
} 

В этом примере я только использую пакеты Jtransform, однако я получаю ту же ошибку компиляции для пакетов lingdx. Компилятор говорит, что DoubleFFT_1D и complexForward не определены. Итак, есть что-то, чего я не вижу, например, неправильно связывая свои библиотеки, я не уверен. Любая помощь будет принята с благодарностью. Я хотел объявить экземпляр DoubleFFT_1D и complexForward перед onCreate или что-то еще?

Я знаю, что это вопрос о нобе, но я новичок в объектно-ориентированных языках и изучаю Java на ходу. Спасибо :)

+0

У кого-нибудь есть идея? – digiphd

+0

Вы хотите назвать эти функции или вы создаете свои собственные? – Shah

ответ

3

Сначала необходимо создать объект преобразования Фурье

DoubleFFT_1D fft = new DoubleFFT_1D(int n); 

Где п размер вашего преобразования хотеть. n, возможно, должно быть в 2 раза больше, чем вы думаете, поскольку оно ожидает, что реальные и мнимые части бок о бок в одной входной матрице.

Затем вы можете применить ваши методы FFT, например

fft.complexForward(double[]); 

Странно результат сохраняется во входной массив.

+2

Это не странно, это называется inplace fft, и это на самом деле функция (и большая, на мой взгляд). – brimborium

+0

Привет! Я попытался использовать тот же метод, который вы рекомендуете для JTransforms, но он всегда разбивал мое приложение на строке «fft.complexForward (result)». «result» является double [] и заполняется информацией о буфере. Можете ли вы мне помочь? – Sakura

0

1.In Свойства проекта -> путь сборки Java -> Заказ и экспорт, проверьте все ваши добавленные зависимости, которые будут включены в файлы классов проекта.

2.Select Android Tools> Fix Свойства проекта

Than запустить приложение

 Смежные вопросы

  • Нет связанных вопросов^_^