2

我有以下代码:

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),并且调用了回调,但我从来没有得到除 128 以外的数据(在波形回调的情况下)或 0(在 FFT 的情况下)每当我使用默认媒体播放器(在 HTC Sensation XE 上)播放时

我在这里做了什么愚蠢的事情 - 还是我的手机没有正确实现音频输出混音?如果我使用另一个音频播放器,那很好。

4

1 回答 1

1

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

于 2012-10-23T14:42:41.340 回答