双簧管音频流格式:int16_t格式会消失吗?

时间:2018-11-02 15:22:40

标签: android audio android-ndk

在我的Android应用中,我正在使用Oboe library将音频样本重定向到音频输出。

根据我的测试,在oboe::AudioStreamCallback::onAudioReady()函数中,似乎大多数时候float格式用于音频流格式。但有时会使用int16_t格式。

由于float格式比int16_t格式更方便使用,因此我对此有一些疑问:

  • 什么时候使用floatint16_t格式?是否取决于设备?还是在Android版本上?
  • int16_t格式是否仍在最近的设备上使用,还是趋于消失并且仅用于追溯兼容目的?
  • 如果格式取决于Android版本,那么仅使用float格式的最小Android API版本是什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果未在AudioStreamBuilder中指定格式,则可能会得到float或int16_t。 Oboe和AAudio将选择最适合该平台的格式。通常,浮子是优选的。但是,例如,在某些平台上,如果使用int16_t,则只能获得LOW_LATENCY输入流。因此它将选择int16_t。

您可以通过调用AudioStream :: getFormat()确定格式。

如果您确实指定了格式,则在支持流的情况下打开流时将获得该格式。 L(21)之前的OpenSL ES不支持浮点,因此pre-L设备上的Oboe不会打开浮点格式的流。

int16_t格式不会消失。我们将继续支持它。