improvisation-lab / improvisation_lab /service /interval_practice_service.py
atsushieee's picture
Upload folder using huggingface_hub
5e84ffc verified
raw
history blame
1.08 kB
"""Service for interval practice."""
from random import sample
from typing import List
from improvisation_lab.config import Config
from improvisation_lab.domain.music_theory import Notes
from improvisation_lab.service.base_practice_service import BasePracticeService
class IntervalPracticeService(BasePracticeService):
"""Service for interval practice."""
def __init__(self, config: Config):
"""Initialize IntervalPracticeService with configuration."""
super().__init__(config)
def generate_melody(
self, num_notes: int = 10, interval: int = 1
) -> List[List[Notes]]:
"""Generate a melody based on interval transitions.
Args:
num_notes: Number of base notes to generate. Default is 10.
interval: Interval to move to and back. Default is 1 (semitone).
Returns:
List of Notes objects containing the generated melodic phrases.
"""
base_notes = sample(list(Notes), num_notes)
return self.melody_composer.generate_interval_melody(base_notes, interval)