def produce_speech(sentence, output_path="", playback=True, by_sentence=False, sentence_number='1'): try: return_message = "" if not os.path.exists(temp_dir): os.mkdir(temp_dir) filename = "temp" + sentence_number + ".wav" temp_filename = os.path.join(temp_dir, filename) doc = ScoreDraft.Document() doc.setTempo(120) sn = 24 #Short note ln = 48 #Long note singer = ScoreDraft.Yami_UTAU() ScoreDraft.UtauDraftSetLyricConverter( singer, VCCVEnglishConverter.VCCVEnglishConverter) singer.tune('CZMode') sequence = [] for word in sentence: subsequence = () for syllable in word: if syllable[0] == 'rest': if len(subsequence) != 0: sequence.append(subsequence) subsequence = () if syllable[1] == -3: #Long pause sequence.append(BL(ln)) elif syllable[1] == -2: #Short pause sequence.append(BL(sn)) elif syllable[0] != '': if syllable[1] == 0: #Unstressed syllable subsequence += (syllable[0], mi(5, sn)) elif syllable[1] == 2: #Secondary stressed syllable subsequence += (syllable[0], fa(5, sn)) elif syllable[1] == 1: #Primary stressed syllable subsequence += (syllable[0], so(5, sn)) if len(subsequence) != 0: sequence.append(subsequence) doc.sing(sequence, singer) doc.mixDown(temp_filename) rendered_filename = temp_filename if output_path != "": try: if not "." in os.path.basename( output_path) or os.path.basename( output_path).startswith("."): if not os.path.exists(os.path.abspath(output_path)): os.mkdir(os.path.abspath(output_path)) filename = 'sentence' + sentence_number + '-on-{}.wav'.format( str(datetime.now()).replace(':', '-')) output_filename = os.path.join(output_path, filename) else: if not os.path.exists(os.path.dirname(output_path)): os.mkdir(os.path.dirname(output_path)) output_filename = output_path if not output_path.endswith(".wav"): output_filename += sentence_number * by_sentence + ".wav" shutil.copy(temp_filename, output_filename) rendered_filename = output_filename return_message += "----Rendered .wav file is available at " + rendered_filename + "\n" except: pass return_message += "!!!-An error occured during saving rendered file at output path\n" except: return_message += "!!!-An error occured during rendering process\n" try: if playback: chunk = 1024 file = wave.open(rendered_filename, "rb") player = pyaudio.PyAudio() stream = player.open(format=player.get_format_from_width( file.getsampwidth()), channels=file.getnchannels(), rate=file.getframerate(), output=True) data = file.readframes(chunk) while len(data) > 0: stream.write(data) data = file.readframes(chunk) stream.stop_stream() stream.close() player.terminate() # playsound(rendered_filename) pass except: pass shutil.rmtree(temp_dir, ignore_errors=True) return return_message
doc.setTempo(100) #seq = [ ('la', do(5,48), 'la', do(5,48), 'la', so(5,48), 'la', so(5,48), 'la',la(5,48), 'la',la(5,48), 'la',so(5,96))] #seq = [ ("g6d", mi(5,24), "bI", so(5,24), "zhO", so(5,12), la(5,36) )] #seq += [ ("mi", mi(5,24), "gat", so(5,16), "t6", so(5,8), "gO", so(5,12), la(5,36))] #seq += [ ("mi", so(5,36), "yO", mi(5,12), "mI", so(5,24), "O", re(5,72)), BL(48)] #seq = [ ('sk0r', 36, 1.0, 0.7, 'dr@ft', 36, 1.0, 0.6)] #seq = [ ('pI', 24, 2.0, 2.0, 'dhan', 24, 1.5, 1.0)] seq = [("ma", mi(5, 24), "ma", re(5, 24), mi(5, 48)), BL(24)] seq += [("do", mi(5, 24), "yO", so(5, 24), "ri", la(5, 24), "mem", mi(5, 12), re(5, 12), "b3", re(5, 72)), BL(24)] seq += [("dhx", do(5, 12), re(5, 12), "Od", mi(5, 24), "str0l", so(5, 24), "h@t", so(5, 72)), BL(24)] seq += [("yO", mi(5, 12), ti(5, 36)), BL(12), ("gAv", la(5, 24), "t6", so(5, 12), "mE", mi(5, 96))] # link to voicebank: https://docs.google.com/uc?id=0B8k4SxZamGmvbXc2NEExTG5rUnM&export=download singer = ScoreDraft.Yami_UTAU() singer.setLyricConverter(ScoreDraft.VCCVEnglishConverter) singer.setCZMode() doc.sing(seq, singer) doc.mixDown('vccv.wav')
#!/usr/bin/python3 import sys sys.path += ['../'] import ScoreDraft from ScoreDraftNotes import * import VCCVEnglishConverter doc = ScoreDraft.Document() doc.setTempo(100) seq = [('twin', do(5, 48), 'k9l', do(5, 48), 'twin', so(5, 48), 'k9l', so(5, 48), 'li', la(5, 48), 't9l', la(5, 48), 'sta', so(5, 96))] Yami = ScoreDraft.Yami_UTAU() ScoreDraft.UtauDraftSetLyricConverter( Yami, VCCVEnglishConverter.VCCVEnglishConverter) doc.sing(seq, Yami) doc.mixDown('vccv.wav')