2013-03-01 66 views
0

我有一個庫,它可以記錄實時音頻並計算音頻的實時FFT數據。客戶端必須調用開始方法開始錄製,並使用停止方法結束錄製。音頻/ FFT庫設計

我的設計問題是關於將這些數據返回給客戶端的最佳方法。我已考慮以下方法:

  1. 有一種方法稱爲getData(int size),客戶端將在它們開始記錄後定期調用。它將返回到最大音頻採樣的大小,或者儘可能多的數據。我的想法是,客戶端將運行AsyncTask來定期調用更多數據。這種方法存在的問題是效率低得多,對客戶來說更加複雜,但它確實允許他們更多地控制他們收到的數據的時間和數量。
  2. 讓客戶端將一個輸出流傳遞給我的start方法,只要我有這個方法,我就會立即發送數據。這更簡單但更具限制性。
  3. 類似地,代替輸出流,客戶端會傳遞某種結構,如ArrayList,這些結構只會在我們之間共享,而我會將數據推送到該結構上。
  4. 最後,我想過讓我的啓動方法返回一個輸出流(或類似於ArrayList),客戶端只會讀取。

從客戶的角度來看,您更喜歡哪種?爲什麼?還是有其他一些我完全忽略的選擇?任何意見,將不勝感激,謝謝!

回答

1

1-通過調用getData定期檢查數據會使客戶端效率低下和更復雜,所以我不會推薦這個。

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

另一種選擇,而且可能更簡單,解決方案是一個簡單的callback對象傳遞到您的庫被稱爲每當一個新的數據是可用的,即event-driven的解決方案通訊