Как получить ненулевые звуковые данные из класса Android 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) будет использоваться "Audio Output Mix" - однако мой код, кажется, инициализируется очень хорошо (status==0), и вызываются обратные вызовы, но я никогда не получаю данные, отличные от 128 (в случае волнового обратного вызова) или 0 (в случае FFT) всякий раз, когда я играю с медиаплеером по умолчанию (на HTC Sensation XE)

Я делаю что-то глупое здесь - или вполне вероятно, что мой телефон не поддерживает должным образом Audio Output Mix? Если я использую другой аудиоплеер, тогда все в порядке.

1 ответ

Решение

Возможно, медиапроигрыватель HTC применяет свои собственные эффекты, и в этом случае они, вероятно, применяют его специально для аудиосеанса своего проигрывателя. AudioFlinger приостановит все эффекты в сеансе OUTPUT_MIX, если какие-либо эффекты будут применены в другом сеансе. По крайней мере, так должно быть на Jellybean и ICS - оба вида могут работать на Gingerbread.

Другие вопросы по тегам