我有一个库,它记录实时音频并计算音频的实时 FFT 数据。客户端必须调用 start 方法开始录制,调用 stop 方法结束录制。
我的设计问题是关于将这些数据返回给客户的最佳方式。我考虑了以下方法:
- 有一个调用方法
getData(int size)
,客户端将在开始录制后定期调用。它将返回最大大小的音频样本,或尽可能多的数据。我对此的想法是客户端会运行一个AsyncTask
定期调用更多数据。这种方法的问题在于它的效率要低得多,并且对于客户端来说更复杂,但它确实允许他们更好地控制他们何时以及接收多少数据。 - 让客户端将输出流传递给我的 start 方法,我一有数据就将其发送到该方法。这更简单但更具限制性。
- 类似地,不是输出流,而是让客户端传入某种结构,如
ArrayList
,它只会在我们之间共享,我会将数据推送到上面。 - 最后,我考虑过让我的 start 方法返回
ArrayList
客户端刚刚读取的输出流(或类似的)。
从客户的角度来看,您更喜欢哪一个?为什么?还是有一些我完全忽略的其他选择?任何输入将不胜感激,谢谢!