Spaces:
Runtime error
Runtime error
import pydub | |
from pydub import AudioSegment | |
from tqdm import tqdm | |
from pydub.playback import play | |
import os | |
from mappings import mappings, replacements | |
def bpm_to_ms(bpm): | |
return 60000 / 2 / bpm | |
def text_to_audio(text, bpm): | |
buffer_length = bpm_to_ms(bpm) | |
audio = AudioSegment.silent(duration=0) | |
notes_list = text.split(" ") | |
for i in range(len(notes_list)): | |
note = notes_list[i] | |
# deduplicate characters in note | |
note = "".join(set(note)) | |
notes_list[i] = note | |
for note in notes_list: | |
to_add = None | |
for char in note: | |
if char in mappings: | |
if not to_add: | |
to_add = AudioSegment.from_wav(mappings[char]) | |
else: | |
if char in mappings: | |
new_audio = AudioSegment.from_wav(mappings[char]) | |
# get length of new_audio | |
new_length = len(new_audio) | |
# get length of to_add | |
to_add_length = len(to_add) | |
# if new_length is longer than to_add_length | |
if new_length > to_add_length: | |
# add silence to to_add | |
to_add += AudioSegment.silent(duration=new_length - to_add_length) | |
# if to_add_length is longer than new_length | |
elif to_add_length > new_length: | |
# add silence to new_audio | |
new_audio += AudioSegment.silent(duration=to_add_length - new_length) | |
to_add = to_add.overlay(new_audio) | |
elif char == "n": | |
to_add = AudioSegment.silent(duration=buffer_length) | |
else: # everything else is a clap | |
print('could not find mapping for ' + char) | |
to_add = AudioSegment.from_wav(mappings["l"]) | |
if len(to_add) < buffer_length: | |
to_add = to_add + AudioSegment.silent(duration=buffer_length - len(to_add)) | |
elif len(to_add) > buffer_length: | |
to_add = to_add[:buffer_length] | |
audio = audio + to_add | |
return audio |