小编ram*_*age的帖子

Android 的 FFT 输出(可视化工具)的频谱不好?

我有一些关于 FFT 的问题(实际上我相信这更多是关于 Visualizer.getFFT() 的 Android FFT 输出)。

我为 Android 创建了一个带有自己的库功能的音乐播放器,其中包括很多东西(如流派、动态播放列表和可视化)。目前,在渲染当前音频流的频谱时,我创建的可视化遇到了一些问题。

我已经阅读了以下问题(和答案)来了解 Android 的 FFT:

我应该从 getFft 看到什么样的输出?

Android 2.3 Visualizer - 无法理解 getFft()

现在我的问题是:我从 getFFTs 系数获得的频谱似乎有些“奇怪”。我注意到,在播放歌曲时,我渲染的频谱似乎显示出很多“噪音”,因此我尝试使用一些测试声音。其中之一是简单的 8khz 声音,它应该只在图表中产生一个峰值。不幸的是,结果如下所示:

http://img4.imageshack.us/img4/4181/spectrum8khz.png

底部出现的噪声在图表的整个宽度上闪烁。高条保持在原位,仅在幅度上轻微闪烁。

当我使用从 1kHz 缓慢移动到 20kHz 的测试声音时,它看起来如下(大约 2-3kHz):

http://img846.imageshack.us/img846/7373/spectrum3khz1khz20khz.png

峰从左向右移动,每个峰的移动速度都快一点,因此随着时间的推移,峰之间的距离会逐渐增大。不可见的是,一旦峰值离开右侧屏幕(但幅度较小),它们就会返回并从右向左移动。此外,所有峰都在略大于屏幕 0.5 的位置处连接到一个大峰。

这是我用来检索数据的代码:

for (int i = 1; i < n / 2; i++) {           
        byte rfk = mRawSpecData[2*i];
        byte ifk = mRawSpecData[2*i+1];
        float magnitude = (float)Math.sqrt(rfk * rfk + ifk * ifk);

        mFormattedSpecData[i-1] = magnitude / 128f;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我的 mRawSpecData …

android fft spectrum android-sdk-2.3

5
推荐指数
1
解决办法
6615
查看次数

标签 统计

android ×1

android-sdk-2.3 ×1

fft ×1

spectrum ×1