Source code for mutwo.music_parameters.lyrics.text_based_lyrics

import typing

import epitran

from mutwo import music_parameters


__all__ = ("LanguageBasedLyric", "LanguageBasedSyllable")


[docs]class LanguageBasedLyric(music_parameters.abc.Lyric): """Lyric based on a natural language. :param written_representation: The text. :type written_representation: str :param language_code: The code for the language of the text. If this is `None` the constant `mutwo.music_parameters.configurations.DEFAULT_LANGUAGE_CODE` will be used. Default to `None`. :type language_code: typing.Optional[str] """ language_code_to_epitran_dict: dict[str, epitran.Epitran] = {} def __init__( self, written_representation: str, language_code: typing.Optional[str] = None ): if language_code is None: language_code = music_parameters.configurations.DEFAULT_LANGUAGE_CODE self.written_representation = written_representation self.language_code = language_code @property def language_code(self) -> str: return self._language_code @language_code.setter def language_code(self, language_code: str): if language_code not in self.language_code_to_epitran_dict: # Epitran will raise an error (FileNotFound) in case # the language_code doesn't exist. epitran_ = epitran.Epitran(language_code) self.language_code_to_epitran_dict.update({language_code: epitran_}) self._epitran = self.language_code_to_epitran_dict[language_code] self._language_code = language_code @property def written_representation(self) -> str: return self._written_representation @written_representation.setter def written_representation(self, written_representation: str): self._written_representation = written_representation @property def phonetic_representation(self) -> str: word_tuple = self.written_representation.split(" ") return " ".join( ["".join(self._epitran.xsampa_list(word)) for word in word_tuple] )
[docs]class LanguageBasedSyllable(music_parameters.abc.Syllable, LanguageBasedLyric): """Syllable based on a natural language. :param is_last_syllable: `True` if it is the last syllable of a word and `False` if it isn't the last syllable :type is_last_syllable: bool :param written_representation: The text. :type written_representation: str :param language_code: The code for the language of the text. If this is `None` the constant `mutwo.music_parameters.configurations.DEFAULT_LANGUAGE_CODE` will be used. Default to `None`. :type language_code: typing.Optional[str] **Warning:** It is a known bug that a split word (syllables) and the word itself will return different values for :attr:`phonetic_representation`. For instance: >>> LanguageBasedLyric('hallo').phonetic_representation 'halo:' >>> # And now splitted to syllables: >>> LanguageBasedSyllable(False, 'hal').phonetic_representation 'hA:l' >>> LanguageBasedSyllable(True, 'lo').phonetic_representation 'lo:' """ def __init__(self, is_last_syllable: bool, *args, **kwargs): music_parameters.abc.Syllable.__init__(self, is_last_syllable) LanguageBasedLyric.__init__(self, *args, **kwargs)