Beispiel #1
0
def _splitBySyllables(sentence):
    ALEPH = '_'
    SHVA = '.'
    syllables = []
    if len(sentence) == 0:
        return []
    if len(sentence) == 1:
        if sentence in tones:
            return [(sentence, SHVA)]
        if sentence in vowels:
            return [(ALEPH, sentence)]
        raise SoundException(SoundError.INVALID_SENTENCE)
    if len(sentence) == 2:
        if sentence in tones:
            return [(sentence, SHVA)]
        if sentence[0] in tones and sentence[1] in vowels:
            return [(sentence[0], sentence[1])]
        return _splitBySyllables(sentence[0]) + _splitBySyllables(sentence[1])
    if sentence[0] in vowels:
        return [(ALEPH, sentence[0])] + _splitBySyllables(sentence[1:])
    if sentence[0:2] in tones:
        if sentence[2] in vowels:
            return [(sentence[0:2], sentence[2])] + _splitBySyllables(
                sentence[3:])
        return [(sentence[0:2], SHVA)] + _splitBySyllables(sentence[2:])
    if sentence[0] in tones:
        if sentence[1] in vowels:
            return [(sentence[0], sentence[1])] + _splitBySyllables(
                sentence[2:])
        return [(sentence[0], SHVA)] + _splitBySyllables(sentence[1:])
    raise SoundException(SoundError.INVALID_SENTENCE)
Beispiel #2
0
def splitSound(audio):
    try:
        chunks = split_on_silence(audio,
                                  min_silence_len=500,
                                  silence_thresh=-30)
    except Exception as e:
        print(e)
        raise SoundException(SoundError.INVALID_RECORDING_FILE)
    if len(vowels) != len(chunks):
        print(len(vowels), len(chunks))
        raise SoundException(SoundError.INVALID_RECORDING_FILE)
    for i, chunk in enumerate(chunks):
        chunk = _match_target_amplitude(chunk, -20.0)
        chunks[i] = chunk[0:300]
    return chunks
Beispiel #3
0
 def __init__(self, tone):
     found = False
     for i, letter in enumerate(tones):
         if letter == tone:
             self.letter = tone
             self.index = i
             found = True
             break
     if not found:
         raise SoundException(SoundError.TONE_DOES_NOT_EXIST)
Beispiel #4
0
 def uploadSound(self, recording, letter):
     tone = Tone(letter)
     # this is a repair of existing tone
     if tone < self.__tone:
         toneVowels = splitSound(recording)
         for i, vowelRecording in enumerate(toneVowels):
             DALRecording.uploadVowelRecording(vowelRecording, self.__name,
                                               tone.letter, vowels[i])
     elif tone == self.__tone:
         toneVowels = splitSound(recording)
         for i, vowelRecording in enumerate(toneVowels):
             DALRecording.uploadVowelRecording(vowelRecording, self.__name,
                                               tone.letter, vowels[i])
         self.__tone = self.__tone.next()
         DALMember.updateUserProgress(self.__tone.letter, self.__name)
     else:
         raise SoundException(SoundError.SENT_RECORDING_AFTER_PROGRESS)
Beispiel #5
0
 def next(self):
     if self.finished():
         raise SoundException(SoundError.TONE_DOES_NOT_EXIST)
     return Tone(tones[self.index + 1])
Beispiel #6
0
 def initializeMember(name, password):
     member = Member(name, Tone.first())
     if DALMember.usernameExists(name):
         raise SoundException(SoundError.USERNAME_TAKEN)
     DALMember.insertMember(name, password, member.__tone.letter)
     return member
Beispiel #7
0
 def getMemberByusername(username):
     if not DALMember.usernameExists(username):
         raise SoundException(SoundError.USERNAME_DOES_NOT_EXIST)
     return Member(username, Tone(DALMember.getMemberProgress(username)))
Beispiel #8
0
 def getMemberBynameAndPassword(username, password):
     if not DALMember.memberExists(username, password):
         raise SoundException(SoundError.WRONG_USERNAME_OR_PASSWORD)
     return Member(username, Tone(DALMember.getMemberProgress(username)))
Beispiel #9
0
 def generateSentence(self, sentence):
     if not self.__tone.finished():
         raise SoundException(SoundError.USER_NOT_FINISHED_REGISTERETION)
     return generateSentence(self.__name, sentence)