Visualizer.GetFft(Byte[]) Método

Definição

Retorna uma captura de frequência do conteúdo de áudio em reprodução no momento.

[Android.Runtime.Register("getFft", "([B)I", "GetGetFft_arrayBHandler")]
public virtual Android.Media.Audiofx.VisualizerStatus GetFft (byte[]? fft);
[<Android.Runtime.Register("getFft", "([B)I", "GetGetFft_arrayBHandler")>]
abstract member GetFft : byte[] -> Android.Media.Audiofx.VisualizerStatus
override this.GetFft : byte[] -> Android.Media.Audiofx.VisualizerStatus

Parâmetros

fft
Byte[]

matriz de bytes onde o FFT deve ser retornado

Retornos

#SUCCESSem caso de sucesso, #ERROR_NO_MEMORY#ERROR_INVALID_OPERATION ou #ERROR_DEAD_OBJECT em caso de fracasso.

Atributos

Exceções

Comentários

Retorna uma captura de frequência do conteúdo de áudio em reprodução no momento.

Esse método deve ser chamado quando o visualizador está habilitado.

A captura é uma FFT de magnitude de 8 bits, sendo a faixa de frequência coberta de 0 (DC) a metade da taxa de amostragem retornada pela #getSamplingRate(). A captura retorna as partes reais e imaginárias de um número de pontos de frequência igual à metade do tamanho da captura mais um.

Nota: apenas a parte real é devolvida para o primeiro ponto (DC) e o último ponto (frequência de amostragem / 2).

O layout na matriz de bytes retornada é o seguinte: <ul><li> n é o tamanho de captura retornado por getCaptureSize()</li><li> Rfk, Ifk são respectivamente as partes reais e imaginárias do k-ésimo componente< de frequência/li><li> Se Fs é a frequência de amostragem resintonizada por getSamplingRate() a k-ésima frequência é: k * Fs / n </li<>/ul<>table border="0" cellspacing="0" cellpadding="0"<>tr><td Índice>

</td><td>0 </p></td<>td>1 </p></td<>td>2 </p></td<>td>3 </p></td<>td>4 </p></td><td <>5 /p></td<>td>... </p></td><td>n - 2 </p></td td>><n - 1 </p></td></tr<>tr><td>Dados </p></td<>td>Rf0 </p></td><td>Rf(n/2) </p></td><td>Rf1 </p></td><td>If1 </p></td<>td>Rf2 </p></td><td>If2 </p></td<>td... <>/p></td><td>Rf(n/2-1) </p></td><td>If(n/2-1) </p></td></tr></table>

Para obter valores de magnitude e fase, o seguinte código pode ser usado:

int n = fft.size();
                  float[] magnitudes = new float[n / 2 + 1];
                  float[] phases = new float[n / 2 + 1];
                  magnitudes[0] = (float)Math.abs(fft[0]);      // DC
                  magnitudes[n / 2] = (float)Math.abs(fft[1]);  // Nyquist
                  phases[0] = phases[n / 2] = 0;
                  for (int k = 1; k &lt; n / 2; k++) {
                      int i = k * 2;
                      magnitudes[k] = (float)Math.hypot(fft[i], fft[i + 1]);
                      phases[k] = (float)Math.atan2(fft[i + 1], fft[i]);
                  }

Documentação Java para android.media.audiofx.Visualizer.getFft(byte[]).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Aplica-se a