Как получить ненулевые звуковые данные из класса 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.