2013-03-01 3 views
0

У меня есть библиотека, которая записывает аудио в реальном времени и вычисляет данные FFT реального времени для аудио. Клиент должен вызвать метод запуска для начала записи и метод остановки для завершения записи.Дизайн библиотеки аудио/FFT

Мой вопрос дизайна касается наилучшего способа вернуть эти данные клиенту. Я рассмотрел следующие подходы:

  1. Имейте метод под названием , который клиент будет вызывать периодически после начала записи. Он вернется к размерным образцам аудио, или столько же данных, сколько доступно. Моя мысль заключается в том, что клиент будет запускать AsyncTask для периодического вызова дополнительных данных. Проблемы с этим подходом - это гораздо менее эффективный и более сложный для клиента, но он позволяет им больше контролировать, когда и сколько данных они получают.
  2. Попросите клиента передать поток вывода в мой метод запуска, на который я просто отправлю данные, как только у меня получится. Это проще, но более ограничительно.
  3. Аналогично, вместо потока вывода, клиент переходит в какую-то структуру, такую ​​как ArrayList, которая будет просто разделяться между нами и что я буду вводить данные.
  4. Наконец, я подумал о том, что мой метод запуска возвращает выходной поток (или ArrayList аналогичным образом), который клиент только что прочитал.

С точки зрения клиента, который вы бы предпочли и почему? Или есть другие альтернативы, которые я полностью игнорирую? Любой вход был бы оценен, спасибо!

ответ

1

1- Проверка данных периодически путем вызова getData сделает клиент неэффективным и более сложным, поэтому я бы не рекомендовал это.

2- Использование общего MemoryStream это решение, которое может быть исследовано

Другая альтернатива, и, возможно, проще, решение просто передать callback объект в библиотеку, которая вызывается всякий раз, когда новые данные т.е. event-driven сообщение