Spaces:
Running
Running
| import os | |
| import sys | |
| import time | |
| import torch | |
| import warnings | |
| import requests | |
| import subprocess | |
| import modelscope | |
| import huggingface_hub | |
| from tqdm import tqdm | |
| warnings.filterwarnings("ignore") | |
| TEMP_DIR = "./__pycache__" | |
| EN_US = os.getenv("LANG") != "zh_CN.UTF-8" | |
| WEIGHTS_DIR = ( | |
| huggingface_hub.snapshot_download("monetjoe/EMelodyGen", cache_dir=TEMP_DIR) | |
| if EN_US | |
| else modelscope.snapshot_download("monetjoe/EMelodyGen", cache_dir=TEMP_DIR) | |
| ) | |
| DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| PATCH_LENGTH = 128 # Patch Length | |
| PATCH_SIZE = 32 # Patch Size | |
| PATCH_NUM_LAYERS = 9 # Number of layers in the encoder | |
| CHAR_NUM_LAYERS = 3 # Number of layers in the decoder | |
| PATCH_SAMPLING_BATCH_SIZE = 0 # Batch size for training patch, 0 for full context | |
| LOAD_FROM_CHECKPOINT = True # Whether to load weights from a checkpoint | |
| SHARE_WEIGHTS = False # Whether to share weights between the encoder and decoder | |
| EN2ZH = { | |
| "Low": "低", | |
| "High": "高", | |
| "Cite": "引用", | |
| "Save": "保存", | |
| "Audio": "音频", | |
| "Minor": "小调", | |
| "Major": "大调", | |
| "Mode": "大小调", | |
| "Submit": "提交", | |
| "Staff": "五线谱", | |
| "Status": "状态栏", | |
| "Feedback": "反馈", | |
| "Generate": "生成", | |
| "Dataset": "数据集", | |
| "BPM tempo": "BPM 速度", | |
| "Pitch SD": "音高标准差", | |
| "Video demo": "视频教程", | |
| "ABC notation": "ABC 记谱", | |
| "Download MXL": "下载 MXL", | |
| "Save template": "保存模板", | |
| "Download MIDI": "下载 MIDI", | |
| "By template": "通过模板生成", | |
| "Volume in dB": "dB 音量调节", | |
| "±12 octave": "±12 八度上下移", | |
| "Download template": "下载模板", | |
| "Download MusicXML": "下载 MusicXML", | |
| "Download PDF score": "下载 PDF 乐谱", | |
| "By feature control": "通过特征控制生成", | |
| "Additional info & option": "附加信息及选项", | |
| "Generate chords coming soon": "生成和声控制暂不可用", | |
| "The emotion to which the current template belongs": "当前模板所属情感", | |
| "Valence: reflects negative-positive levels of emotion": "愉悦度 反映情绪的 消极-积极 程度", | |
| "Arousal: reflects the calmness-intensity of the emotion": "唤醒度 反映情绪的 平静-激烈 程度", | |
| "The emotion you believe the generated result should belong to": "您所认为生成结果应该所属的情感", | |
| } | |
| def _L(en_txt: str): | |
| return en_txt if EN_US else f"{en_txt} ({EN2ZH[en_txt]})" | |
| def download(filename: str, url: str): | |
| try: | |
| response = requests.get(url, stream=True) | |
| total_size = int(response.headers.get("content-length", 0)) | |
| chunk_size = 1024 | |
| with open(filename, "wb") as file, tqdm( | |
| desc=f"Downloading {filename} from {url}...", | |
| total=total_size, | |
| unit="B", | |
| unit_scale=True, | |
| unit_divisor=1024, | |
| ) as bar: | |
| for data in response.iter_content(chunk_size=chunk_size): | |
| size = file.write(data) | |
| bar.update(size) | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| time.sleep(10) | |
| download(filename, url) | |
| if sys.platform.startswith("linux"): | |
| apkname = "MuseScore.AppImage" | |
| extra_dir = "squashfs-root" | |
| download(filename=apkname, url=os.getenv("mscore")) | |
| if not os.path.exists(extra_dir): | |
| subprocess.run(["chmod", "+x", f"./{apkname}"]) | |
| subprocess.run([f"./{apkname}", "--appimage-extract"]) | |
| MSCORE = f"./{extra_dir}/AppRun" | |
| os.environ["QT_QPA_PLATFORM"] = "offscreen" | |
| else: | |
| MSCORE = os.getenv("mscore") | |