Java 如何从TarsosDSP获取音频频谱

Java 如何从TarsosDSP获取音频频谱,java,fft,tarsosdsp,Java,Fft,Tarsosdsp,我试图从Android上的麦克风流中获取音频频谱。我正在用TarsosDSP做举重。但似乎无法在过程事件中获得任何有意义的结果。我试图得到8个频率,并实时显示它们的大小。我正在使用SpectrumPeakAnalyzer类,但我不知道这是否是正确的。以下是流程事件的相关代码: public static int SAMPLE_RATE = 22050; public static int BUFFER_SIZE = 1024; public static int OVER

我试图从Android上的麦克风流中获取音频频谱。我正在用TarsosDSP做举重。但似乎无法在过程事件中获得任何有意义的结果。我试图得到8个频率,并实时显示它们的大小。我正在使用SpectrumPeakAnalyzer类,但我不知道这是否是正确的。以下是流程事件的相关代码:

    public static int SAMPLE_RATE = 22050;
    public static int BUFFER_SIZE = 1024;
    public static int OVERLAP = 0; 
AudioDispatcher=AudioDispatcherFactory.fromDefaultMirror(采样率、缓冲区大小、重叠); spectralPeakFollower=新的SpectralPeakProcessor(缓冲区大小、重叠、采样率); dispatcher.AddAudioProcessor(spectralPeakFollower)

在这个过程中

        var magnitudes = spectralPeakFollower.GetMagnitudes();
        var freqencies = spectralPeakFollower.GetFrequencyEstimates();

        float[] noiseFloor = SpectralPeakProcessor.CalculateNoiseFloor(magnitudes, BUFFER_SIZE / 2, 1f);
        var localMaximaIndexes = SpectralPeakProcessor.FindLocalMaxima(magnitudes, noiseFloor);
        var peaks = SpectralPeakProcessor.FindPeaks(magnitudes, freqencies, localMaximaIndexes, 8, 80);

我似乎找不到任何适合这种情况的例子,因为我不关心峰值,我只想要实时震级。感谢您提供的任何帮助。

请注意您输入傅里叶变换api调用的数据窗口中的样本数之间的关系。。。特别是你想要的频率分辨率在那次通话的输出。。。紧紧抓住奈奎斯特极限的概念。。。请注意,api结果可能会将其答案作为一组复杂的点传递给您。。。查找公式以确定api结果中给定的一个这样的复杂点的频率幅值。。。如果您已经在时域中布置了一组玩具输入样本,并确认每个样本在转换到频域后都是好的,那么您就可以获得额外的积分。我认为您的问题与样本数量有关,这是正确的。但是我不知道该用什么。api提供了所有细节:幅度和频率,而不是复杂的点,所以这很好。缓冲区大小应该是2的幂。。。让它成为16383。。。太高的计算成本太低的频率粒度太松散。。。为了获得高频率的粒度,您可以考虑在每个重叠的地方滑动样本窗口的可能性