如何从Android Visualizer类获取非零声音数据

时间:2012-10-23 13:00:13

标签: android audio visualizer

我有以下代码:

mVisualizer = new Visualizer(0);
mVisualizer.setEnabled(false);
int capRate = Visualizer.getMaxCaptureRate();
int capSize = Visualizer.getCaptureSizeRange()[1];
mVisualizer.setCaptureSize(capSize);
Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() {
  public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
  int samplingRate) {   
    for (int i=0;i<bytes.length;i++) {
        if (bytes[i]!=-128) {
            Log.w("Morphyre", "Found Nonzero sample "+bytes[i]);
            break;
        }
    }                   
  }

  public void onFftDataCapture(Visualizer visualizer, byte[] bytes,
    int samplingRate) {
  }       
};

int status = mVisualizer.setDataCaptureListener(captureListener,
    capRate, true/*wave*/, false/*no fft needed*/);
mVisualizer.setEnabled(true);

该应用具有2个必需权限(MODIFY_AUDIO_SETTINGS和RECORD_AUDIO)

根据API文档,创建Visualizer(0)将使用'音频输出组合' - 但是我的代码似乎初始化正常(状态== 0),并且调用回调,但我从来没有得到其他数据每当我使用默认媒体播放器(在HTC Sensation XE上)时,比128(在波回调的情况下)或0(在FFT的情况下)

我在这里做了些蠢事 - 或者我的手机可能没有正确实现音频输出Mix?如果我使用其他音频播放器,那就没关系了。

1 个答案:

答案 0 :(得分:1)

HTC的媒体播放器可能正在应用自己的效果,在这种情况下,他们可能会专门应用于播放器的音频会话。如果在另一个会话上应用了任何效果,AudioFlinger将暂停OUTPUT_MIX会话上的所有效果。至少它应该如何在Jellybean和ICS上表现 - 两种都可能适用于Gingerbread。