0

我正在将 JUCE 制作的 iOS 应用程序移植到 Android(目前处于 Beta 版)。我有一些奇怪的行为,我得到音频故障和 GUI 帧丢失,只有在不触摸屏幕时才会出现。

该应用程序使用带有 JUCE 5.4.0 的 OBOE,并且仅针对 Android 8.0 及更高版本进行编译。奇怪的是,这个问题只发生在 Galaxy S9 上(在 Note 8、Note 9、小米 mi A1 和其他一些设备上测试正常)。我已经尝试在 Galaxy S9 上进行全新的出厂重置。

我是 Android 开发的新手。

4

1 回答 1

0

您遇到的可能是 Galaxy S9 上的 CPU 频率缩放器,它在不触摸屏幕时积极地降低 CPU 频率。这会导致计算带宽不足,从而导致您的应用在音频回调中花费太长时间,从而导致欠载/故障。

要验证这一点,请使用 systrace 和 Android Studio profiler。systrace 将向您显示音频欠载和 CPU 频率。

在跟踪期间点击屏幕,您应该会看到 CPU 频率增加,然后很快下降。

如果是这种情况,您可以尝试以下几种方法:

  1. 确保您使用的是最优化的编译器标志-Ofast-O3
  2. 使用最近发布的 OboeStabilizedCallback,该类正是为此目的而设计的——它将尝试保持 CPU 旋转以避免它被缩小。
  3. 监控欠载(可通过 获得AudioStream::getUnderruns())并缩减您的计算负载,直到您停止获取它们。

如果您仍然遇到问题,请在 github 上发布您的代码,或者至少有足够的代码重现该问题,我会尝试看看。

CPU 频率扩展对于具有显着 CPU 带宽要求的实时应用程序来说是一个难题。

于 2018-12-20T18:49:53.493 回答