0

我有一个库,它记录实时音频并计算音频的实时 FFT 数据。客户端必须调用 start 方法开始录制,调用 stop 方法结束录制。

我的设计问题是关于将这些数据返回给客户的最佳方式。我考虑了以下方法:

  1. 有一个调用方法getData(int size),客户端将在开始录制后定期调用。它将返回最大大小的音频样本,或尽可能多的数据。我对此的想法是客户端会运行一个AsyncTask定期调用更多数据。这种方法的问题在于它的效率要低得多,并且对于客户端来说更复杂,但它确实允许他们更好地控制他们何时以及接收多少数据。
  2. 让客户端将输出流传递给我的 start 方法,我一有数据就将其发送到该方法。这更简单但更具限制性。
  3. 类似地,不是输出流,而是让客户端传入某种结构,如ArrayList,它只会在我们之间共享,我会将数据推送到上面。
  4. 最后,我考虑过让我的 start 方法返回ArrayList客户端刚刚读取的输出流(或类似的)。

从客户的角度来看,您更喜欢哪一个?为什么?还是有一些我完全忽略的其他选择?任何输入将不胜感激,谢谢!

4

1 回答 1

1

1-通过调用定期检查数据getData会使客户端效率低下且更复杂,因此我不建议这样做。

2-使用共享MemoryStream是一种可以调查的解决方案

另一种选择,可能更简单,解决方案是简单地将一个callback对象传递给您的库,只要有新数据可用即调用该库,即event-driven通信

于 2013-03-01T20:07:15.020 回答