将WAV文件分成多个块进行FFT

时间:2019-05-30 15:36:40

标签: java signal-processing fft wav

我正在编写一个程序来检测给定wav文件(最好是歌曲)中的频率。我需要将wav文件分成多个块,以将其馈送到FFT,但是我不知道如何执行此分离。我相信这些被称为框架,但是对于所有这些我都是新手。

我不知道从哪里真正开始-我只是在网上看而未找到我想要的。我有一个预感,这与将FileInputStream分成多个块有关,但是我不知道如何做到这一点。

    FileInputStream input = new FileInputStream(filelocation);


    //Number of samples to take (higher number more accurate but slower
    int numsamples = Constants.numsamples;
    //Sample rate of the file (total frequency range is 1/samplerate)
    int samplerate = Constants.samplerate;
    //Puts the audio file into something readable by the FFT
    WaveDecoder decoder = new WaveDecoder(input);
    //Contains all the samples within the entire file
    ArrayList<Float> allSamples = new ArrayList<Float>( );
    //Contains the aformentioned samples, but in a format that FFT will take
    float[] samples = new float[numsamples];
    //Actual instance of the transform
    FFT fft = new FFT(numsamples, samplerate );


    //number of samples = 441000/filelength

    //Copies the contents of the WaveDecoder into an array
    while( decoder.readSamples( samples ) > 0 )
    {
        for( int i = 0; i < samples.length; i++ )
            allSamples.add( samples[i] );
    }

这是我正在使用的FFT库的链接:

https://github.com/Uriopass/audio-analysis

最理想的是,将代码分成多个块(无论是在WaveDecoder阶段还是之前,将其分离)以馈入FFT。我需要某种方法来告知数据块到音频文件的距离(以秒为单位),以便我可以知道每个特定频率的播放时间。

最后,此FFT将是程序的后端,该程序提供音频文件中正在播放的内容的图形表示;如果有任何一种更简单的方法来对这种类型的程序进行频率检测,那么我将不胜枚举。这是一个高中项目,因此对过多的评论表示歉意。

0 个答案:

没有答案