Visualizer.GetFft(Byte[]) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回当前播放音频内容的频率捕获。
[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
参数
- fft
- Byte[]
应返回 FFT 的字节数组
返回
#SUCCESS
如果成功,#ERROR_NO_MEMORY
#ERROR_INVALID_OPERATION
或#ERROR_DEAD_OBJECT
失败。
- 属性
例外
注解
返回当前播放音频内容的频率捕获。
启用可视化工具时必须调用此方法。
捕获是一个 8 位级 FFT,其频率范围为 0(DC)到返回的 #getSamplingRate()
采样率的一半。 捕获返回多个频率点的实际和虚部分,等于捕获大小的一半加上一个。
注意:仅返回第一个点(DC)和最后一个点(采样频率/2)的实际部分。
返回字节数组中的布局如下所示:ul>li n 是 getCaptureSize()</li li><> Rfk 返回的捕获大小, Ifk 分别是 kth 频率分量</li li<>> 如果 Fs 是 getSamplingRate() 重新调整的采样频率,则 kth 频率分别为:k * Fs / n </li<>/ul<>table border=“0” cellspacing=“0” cellpadding=“0”<>tr><td Index>><<
</td><td>0 </p/td><td>1 </p></td<>td>2 </p><></td td>3 </p></td<>td td>4 </p/td<<>>5 </p><></td td><td... <>>/p/td td>n - 2 </p><></td<>td>n - 1 </p></td></tr<>tr><td>Data </p/td<>>Rf0 </p><></td>><Rf(n/2) </p></<>>td Rf1 /><p/<>>td td If1 <</p></<>>td Rf2 </p></td<>>If2 </p></td td td... <><>></p></td><td>Rf(n/2-1) </p></td td><>If(n/2-1) </p></td></tr></table>
若要获取数量级和阶段值,可以使用以下代码:
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 < 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]);
}
适用于 . 的 android.media.audiofx.Visualizer.getFft(byte[])
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。