Spaces:
Sleeping
Sleeping
"""Console application for interval practice.""" | |
from typing import List | |
from improvisation_lab.application.base_console_app import \ | |
ConsoleBasePracticeApp | |
from improvisation_lab.config import Config | |
from improvisation_lab.domain.music_theory import Notes | |
from improvisation_lab.presentation.interval_practice import ( | |
ConsoleIntervalPracticeView, IntervalViewTextManager) | |
from improvisation_lab.service import IntervalPracticeService | |
class ConsoleIntervalPracticeApp(ConsoleBasePracticeApp): | |
"""Console application class for interval practice.""" | |
def __init__(self, service: IntervalPracticeService, config: Config): | |
"""Initialize the application using console UI. | |
Args: | |
service: IntervalPracticeService instance. | |
config: Config instance. | |
""" | |
super().__init__(service, config) | |
self.text_manager = IntervalViewTextManager() | |
self.ui = ConsoleIntervalPracticeView(self.text_manager) | |
def _get_current_note(self) -> str: | |
"""Return the current note to be processed. | |
Returns: | |
The current note to be processed. | |
""" | |
if self.phrases is None: | |
raise ValueError("Phrases are not initialized.") | |
return self.phrases[self.current_phrase_idx][self.current_note_idx].value | |
def _get_current_phrase(self) -> List[Notes]: | |
"""Return the current phrase to be processed.""" | |
if self.phrases is None: | |
raise ValueError("Phrases are not initialized.") | |
return self.phrases[self.current_phrase_idx] | |
def _generate_melody(self) -> List[List[Notes]]: | |
"""Generate melody specific to the practice type. | |
Returns: | |
The generated melody. | |
""" | |
return self.service.generate_melody( | |
num_notes=self.config.interval_practice.num_problems, | |
interval=self.config.interval_practice.interval, | |
) | |