Я работаю над приложением Android, которое тренирует слух игрока, заставляя их воспроизводить на гитаре все, что они слышат с телефона. Я сделал часть распознавания нот (и аккордов) следующим образом: основной поток, который отображает информацию и слушает кнопки, AsyncTask
, который записывает звук и отправляет данные для анализа, и другой AsyncTask
, который анализирует и определяет, какие ноты были сыграны.
Распознавание заметок в режиме реального времени, поэтому я поместил Анализатор AsyncTask
в ViewModel
. Распознанные ноты и аккорды хранятся в полях LiveData
, поэтому, когда они меняются, основной поток (который представлен View
) уведомляется.
Сейчас я работаю над игрой, использующей это распознавание, но я также собираюсь сделать тюнер. Игра и тюнер будут использовать один и тот же алгоритм распознавания.
Мой вопрос: как мне подойти к этому? game и tuner также будут иметь свои собственные функции. Должен ли я держать Анализатор ViewModel
отдельно от отдельной игры и тюнера ViewModels
? Это будет означать, что я буду использовать два ViewModels
для каждого из этих двух Views
. Я полагаю, что не следует повторять код анализатора в обоих отдельных ViewModels
, а также я не должен писать функции для игры и для тюнера в том же ViewModel
, потому что там будет бесполезный код (игра никогда не будет использовать отдельные настройки функций).