2013-03-01 93 views
0

我有一个库,它可以记录实时音频并计算音频的实时FFT数据。客户端必须调用开始方法开始录制,并使用停止方法结束录制。音频/ FFT库设计

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

  1. 有一种方法称为getData(int size),客户端将在它们开始记录后定期调用。它将返回到最大音频采样的大小,或者尽可能多的数据。我的想法是,客户端将运行AsyncTask来定期调用更多数据。这种方法存在的问题是效率低得多,对客户来说更加复杂,但它确实允许他们更多地控制他们收到的数据的时间和数量。
  2. 让客户端将一个输出流传递给我的start方法,只要我有这个方法,我就会立即发送数据。这更简单但更具限制性。
  3. 类似地,代替输出流,客户端会传递某种结构,如ArrayList,这些结构只会在我们之间共享,而我会将数据推送到该结构上。
  4. 最后,我想过让我的启动方法返回一个输出流(或类似于ArrayList),客户端只会读取。

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

回答

1

1-通过调用getData定期检查数据会使客户端效率低下和更复杂,所以我不会推荐这个。

2-使用共享MemoryStream是可以调查

另一种选择,而且可能更简单,解决方案是一个简单的callback对象传递到您的库被称为每当一个新的数据是可用的,即event-driven的解决方案通讯