atsushieee's picture
Upload folder using huggingface_hub
5e84ffc verified
raw
history blame
1.87 kB
"""Console-based piece practice view.
This module provides a console interface for visualizing
and interacting with piece practice sessions.
"""
from abc import ABC, abstractmethod
from typing import List
from improvisation_lab.domain.composition import PhraseData
from improvisation_lab.presentation.view_text_manager import ViewTextManager
from improvisation_lab.service.base_practice_service import PitchResult
class ConsolePracticeView(ABC):
"""Console-based implementation of piece practice."""
def __init__(self, text_manager: ViewTextManager):
"""Initialize the console view with a text manager and song name.
Args:
text_manager: Text manager for updating and displaying text.
song_name: Name of the song to be practiced.
"""
self.text_manager = text_manager
@abstractmethod
def launch(self):
"""Run the console interface."""
pass
def display_phrase_info(self, phrase_number: int, phrases_data: List[PhraseData]):
"""Display phrase information in console.
Args:
phrase_number: Number of the phrase.
phrases_data: List of phrase data.
"""
self.text_manager.update_phrase_text(phrase_number, phrases_data)
print("\n" + "-" * 50)
print("\n" + self.text_manager.phrase_text + "\n")
def display_pitch_result(self, pitch_result: PitchResult):
"""Display note status in console.
Args:
pitch_result: The result of the pitch detection.
"""
self.text_manager.update_pitch_result(pitch_result)
print(f"{self.text_manager.result_text:<80}", end="\r", flush=True)
def display_practice_end(self):
"""Display practice end message in console."""
self.text_manager.terminate_text()
print(self.text_manager.phrase_text)