音频/ FFT库设计
问题描述:
我有一个库,它可以记录实时音频并计算音频的实时FFT数据。客户端必须调用开始方法开始录制,并使用停止方法结束录制。音频/ FFT库设计
我的设计问题是关于将这些数据返回给客户端的最佳方法。我已考虑以下方法:
- 有一种方法称为
getData(int size)
,客户端将在它们开始记录后定期调用。它将返回到最大音频采样的大小,或者尽可能多的数据。我的想法是,客户端将运行AsyncTask
来定期调用更多数据。这种方法存在的问题是效率低得多,对客户来说更加复杂,但它确实允许他们更多地控制他们收到的数据的时间和数量。 - 让客户端将一个输出流传递给我的start方法,只要我有这个方法,我就会立即发送数据。这更简单但更具限制性。
- 类似地,代替输出流,客户端会传递某种结构,如
ArrayList
,这些结构只会在我们之间共享,而我会将数据推送到该结构上。 - 最后,我想过让我的启动方法返回一个输出流(或类似于
ArrayList
),客户端只会读取。
从客户的角度来看,您更喜欢哪种?为什么?还是有其他一些我完全忽略的选择?任何意见,将不胜感激,谢谢!
答
1-通过调用getData
定期检查数据会使客户端效率低下和更复杂,所以我不会推荐这个。
2-使用共享MemoryStream
是可以调查
另一种选择,而且可能更简单,解决方案是一个简单的callback
对象传递到您的库被称为每当一个新的数据是可用的,即event-driven
的解决方案通讯