Upload folder using huggingface_hub
Browse files- .gitattributes +10 -0
- lyric-generator-ja/.gitattributes +33 -0
- lyric-generator-ja/.gitignore +116 -0
- lyric-generator-ja/README.md +13 -0
- lyric-generator-ja/app.py +111 -0
- lyric-generator-ja/frontend/README.md +2 -0
- lyric-generator-ja/frontend/babel.config.js +5 -0
- lyric-generator-ja/frontend/dist/css/chunk-vendors.db3e6b3f.css +0 -0
- lyric-generator-ja/frontend/dist/favicon.ico +0 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.eot +3 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.ttf +3 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff +3 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff2 +3 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont_ie.eot +3 -0
- lyric-generator-ja/frontend/dist/font/materialdesignicons.min.css +0 -0
- lyric-generator-ja/frontend/dist/font/roboto.css +336 -0
- lyric-generator-ja/frontend/dist/index.html +1 -0
- lyric-generator-ja/frontend/dist/js/app.413041e4.js +1 -0
- lyric-generator-ja/frontend/dist/js/chunk-vendors.f5ab6a81.js +0 -0
- lyric-generator-ja/frontend/package.json +51 -0
- lyric-generator-ja/frontend/public/favicon.ico +0 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.eot +3 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.ttf +3 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff +3 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff2 +3 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons-webfont_ie.eot +3 -0
- lyric-generator-ja/frontend/public/font/materialdesignicons.min.css +0 -0
- lyric-generator-ja/frontend/public/font/roboto.css +336 -0
- lyric-generator-ja/frontend/public/index.html +20 -0
- lyric-generator-ja/frontend/src/App.vue +355 -0
- lyric-generator-ja/frontend/src/main.js +12 -0
- lyric-generator-ja/frontend/src/plugins/vuetify.js +7 -0
- lyric-generator-ja/frontend/src/router/index.js +18 -0
- lyric-generator-ja/frontend/vue.config.js +7 -0
- lyric-generator-ja/frontend/yarn.lock +0 -0
- lyric-generator-ja/requirements.txt +6 -0
.gitattributes
CHANGED
|
@@ -50,3 +50,13 @@ moe-tts/saved_model/20/cover.jpeg filter=lfs diff=lfs merge=lfs -text
|
|
| 50 |
moe-tts/saved_model/4/cover.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
moe-tts/saved_model/6/cover.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
anime-remove-background/examples/03.jpg filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
moe-tts/saved_model/4/cover.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
moe-tts/saved_model/6/cover.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
anime-remove-background/examples/03.jpg filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.eot filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.ttf filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont_ie.eot filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.eot filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.ttf filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff2 filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont_ie.eot filter=lfs diff=lfs merge=lfs -text
|
lyric-generator-ja/.gitattributes
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
*.zstandard filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
datgz filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
eot filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
ttf filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.ttf filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.datgz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.eot filter=lfs diff=lfs merge=lfs -text
|
lyric-generator-ja/.gitignore
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Byte-compiled / optimized / DLL files
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[cod]
|
| 4 |
+
*$py.class
|
| 5 |
+
|
| 6 |
+
# C extensions
|
| 7 |
+
*.so
|
| 8 |
+
|
| 9 |
+
# Distribution / packaging
|
| 10 |
+
.Python
|
| 11 |
+
build/
|
| 12 |
+
develop-eggs/
|
| 13 |
+
downloads/
|
| 14 |
+
eggs/
|
| 15 |
+
.eggs/
|
| 16 |
+
lib/
|
| 17 |
+
lib64/
|
| 18 |
+
parts/
|
| 19 |
+
sdist/
|
| 20 |
+
var/
|
| 21 |
+
wheels/
|
| 22 |
+
*.egg-info/
|
| 23 |
+
.installed.cfg
|
| 24 |
+
*.egg
|
| 25 |
+
MANIFEST
|
| 26 |
+
|
| 27 |
+
# PyInstaller
|
| 28 |
+
# Usually these files are written by a python script from a template
|
| 29 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
| 30 |
+
*.manifest
|
| 31 |
+
*.spec
|
| 32 |
+
|
| 33 |
+
# Installer logs
|
| 34 |
+
pip-log.txt
|
| 35 |
+
pip-delete-this-directory.txt
|
| 36 |
+
|
| 37 |
+
# Unit test / coverage reports
|
| 38 |
+
htmlcov/
|
| 39 |
+
.tox/
|
| 40 |
+
.nox/
|
| 41 |
+
.coverage
|
| 42 |
+
.coverage.*
|
| 43 |
+
.cache
|
| 44 |
+
nosetests.xml
|
| 45 |
+
coverage.xml
|
| 46 |
+
*.cover
|
| 47 |
+
.hypothesis/
|
| 48 |
+
.pytest_cache/
|
| 49 |
+
|
| 50 |
+
# Translations
|
| 51 |
+
*.mo
|
| 52 |
+
*.pot
|
| 53 |
+
|
| 54 |
+
# Django stuff:
|
| 55 |
+
*.log
|
| 56 |
+
local_settings.py
|
| 57 |
+
db.sqlite3
|
| 58 |
+
|
| 59 |
+
# Flask stuff:
|
| 60 |
+
instance/
|
| 61 |
+
.webassets-cache
|
| 62 |
+
|
| 63 |
+
# Scrapy stuff:
|
| 64 |
+
.scrapy
|
| 65 |
+
|
| 66 |
+
# Sphinx documentation
|
| 67 |
+
docs/_build/
|
| 68 |
+
|
| 69 |
+
# PyBuilder
|
| 70 |
+
target/
|
| 71 |
+
|
| 72 |
+
# Jupyter Notebook
|
| 73 |
+
.ipynb_checkpoints
|
| 74 |
+
|
| 75 |
+
# IPython
|
| 76 |
+
profile_default/
|
| 77 |
+
ipython_config.py
|
| 78 |
+
|
| 79 |
+
# pyenv
|
| 80 |
+
.python-version
|
| 81 |
+
|
| 82 |
+
# celery beat schedule file
|
| 83 |
+
celerybeat-schedule
|
| 84 |
+
|
| 85 |
+
# SageMath parsed files
|
| 86 |
+
*.sage.py
|
| 87 |
+
|
| 88 |
+
# Environments
|
| 89 |
+
.env
|
| 90 |
+
.venv
|
| 91 |
+
env/
|
| 92 |
+
venv/
|
| 93 |
+
ENV/
|
| 94 |
+
env.bak/
|
| 95 |
+
venv.bak/
|
| 96 |
+
|
| 97 |
+
# Spyder project settings
|
| 98 |
+
.spyderproject
|
| 99 |
+
.spyproject
|
| 100 |
+
|
| 101 |
+
# Rope project settings
|
| 102 |
+
.ropeproject
|
| 103 |
+
|
| 104 |
+
# mkdocs documentation
|
| 105 |
+
/site
|
| 106 |
+
|
| 107 |
+
# mypy
|
| 108 |
+
.mypy_cache/
|
| 109 |
+
.dmypy.json
|
| 110 |
+
dmypy.json
|
| 111 |
+
|
| 112 |
+
# Pyre type checker
|
| 113 |
+
.pyre/
|
| 114 |
+
|
| 115 |
+
.idea/
|
| 116 |
+
node_modules/
|
lyric-generator-ja/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Japanese Lyric Generator
|
| 3 |
+
emoji: 🎼
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: purple
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 4.36.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
license: apache-2.0
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
lyric-generator-ja/app.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from transformers import T5Tokenizer, GPT2LMHeadModel
|
| 3 |
+
from flask import Flask, request, jsonify
|
| 4 |
+
import cutlet
|
| 5 |
+
|
| 6 |
+
convertors = {}
|
| 7 |
+
for romaji_sys in ["hepburn", "kunrei", "nippon"]:
|
| 8 |
+
convertors[romaji_sys] = cutlet.Cutlet(romaji_sys)
|
| 9 |
+
|
| 10 |
+
device = torch.device("cpu")
|
| 11 |
+
if torch.cuda.is_available():
|
| 12 |
+
device = torch.device("cuda")
|
| 13 |
+
|
| 14 |
+
tokenizer = T5Tokenizer.from_pretrained("skytnt/gpt2-japanese-lyric-medium")
|
| 15 |
+
model = GPT2LMHeadModel.from_pretrained("skytnt/gpt2-japanese-lyric-medium")
|
| 16 |
+
model = model.to(device)
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def gen_lyric(title: str, prompt_text: str):
|
| 20 |
+
if len(title) != 0 or len(prompt_text) != 0:
|
| 21 |
+
prompt_text = "<s>" + title + "[CLS]" + prompt_text
|
| 22 |
+
prompt_text = prompt_text.replace("\n", "\\n ")
|
| 23 |
+
prompt_tokens = tokenizer.tokenize(prompt_text)
|
| 24 |
+
prompt_token_ids = tokenizer.convert_tokens_to_ids(prompt_tokens)
|
| 25 |
+
prompt_tensor = torch.LongTensor(prompt_token_ids)
|
| 26 |
+
prompt_tensor = prompt_tensor.view(1, -1).to(device)
|
| 27 |
+
else:
|
| 28 |
+
prompt_tensor = None
|
| 29 |
+
# model forward
|
| 30 |
+
output_sequences = model.generate(
|
| 31 |
+
input_ids=prompt_tensor,
|
| 32 |
+
max_length=512,
|
| 33 |
+
top_p=0.95,
|
| 34 |
+
top_k=40,
|
| 35 |
+
temperature=1.0,
|
| 36 |
+
do_sample=True,
|
| 37 |
+
early_stopping=True,
|
| 38 |
+
bos_token_id=tokenizer.bos_token_id,
|
| 39 |
+
eos_token_id=tokenizer.eos_token_id,
|
| 40 |
+
pad_token_id=tokenizer.pad_token_id,
|
| 41 |
+
num_return_sequences=1
|
| 42 |
+
)
|
| 43 |
+
|
| 44 |
+
# convert model outputs to readable sentence
|
| 45 |
+
generated_sequence = output_sequences.tolist()[0]
|
| 46 |
+
generated_tokens = tokenizer.convert_ids_to_tokens(generated_sequence)
|
| 47 |
+
generated_text = tokenizer.convert_tokens_to_string(generated_tokens)
|
| 48 |
+
generated_text = "\n".join([s.strip() for s in generated_text.split('\\n')]).replace(' ', '\u3000').replace('<s>',
|
| 49 |
+
'').replace(
|
| 50 |
+
'</s>', '\n\n---end---')
|
| 51 |
+
title_and_lyric = generated_text.split("[CLS]", 1)
|
| 52 |
+
if len(title_and_lyric) == 1:
|
| 53 |
+
title, lyric = "", title_and_lyric[0].strip()
|
| 54 |
+
else:
|
| 55 |
+
title, lyric = title_and_lyric[0].strip(), title_and_lyric[1].strip()
|
| 56 |
+
return title, lyric
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
app = Flask(__name__, static_url_path="", static_folder="frontend/dist")
|
| 60 |
+
|
| 61 |
+
@app.route('/')
|
| 62 |
+
def index_page():
|
| 63 |
+
return app.send_static_file("index.html")
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
@app.route('/gen', methods=["POST"])
|
| 67 |
+
def generate():
|
| 68 |
+
if request.method == "POST":
|
| 69 |
+
try:
|
| 70 |
+
data = request.get_json()
|
| 71 |
+
title = data['title']
|
| 72 |
+
text = data['text']
|
| 73 |
+
title, lyric = gen_lyric(title, text)
|
| 74 |
+
result = {
|
| 75 |
+
"state": 200,
|
| 76 |
+
"title": title,
|
| 77 |
+
"lyric": lyric
|
| 78 |
+
}
|
| 79 |
+
except Exception as e:
|
| 80 |
+
result = {
|
| 81 |
+
"state": 400,
|
| 82 |
+
"msg": f"{e}"
|
| 83 |
+
}
|
| 84 |
+
return jsonify(result), result["state"]
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
@app.route('/romaji', methods=["POST"])
|
| 88 |
+
def romaji():
|
| 89 |
+
if request.method == "POST":
|
| 90 |
+
try:
|
| 91 |
+
data = request.get_json()
|
| 92 |
+
text = data['text']
|
| 93 |
+
system = data['system']
|
| 94 |
+
lines = []
|
| 95 |
+
# 不支持带换行符的直接转换
|
| 96 |
+
for line in text.split("\n"):
|
| 97 |
+
lines.append(convertors[system].romaji(line))
|
| 98 |
+
result = {
|
| 99 |
+
"state": 200,
|
| 100 |
+
"romaji": "\n".join(lines),
|
| 101 |
+
}
|
| 102 |
+
except Exception as e:
|
| 103 |
+
result = {
|
| 104 |
+
"state": 400,
|
| 105 |
+
"msg": f"{e}"
|
| 106 |
+
}
|
| 107 |
+
return jsonify(result), result["state"]
|
| 108 |
+
|
| 109 |
+
|
| 110 |
+
if __name__ == '__main__':
|
| 111 |
+
app.run(host="0.0.0.0", port=7860, debug=False, use_reloader=False)
|
lyric-generator-ja/frontend/README.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# lyric-generator
|
| 2 |
+
歌词生成器网站
|
lyric-generator-ja/frontend/babel.config.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
module.exports = {
|
| 2 |
+
presets: [
|
| 3 |
+
'@vue/cli-plugin-babel/preset'
|
| 4 |
+
]
|
| 5 |
+
}
|
lyric-generator-ja/frontend/dist/css/chunk-vendors.db3e6b3f.css
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lyric-generator-ja/frontend/dist/favicon.ico
ADDED
|
|
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.eot
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:55c35c20bedf831352d92854c2c41863b5736eecb1bcec91c965713388d0c14b
|
| 3 |
+
size 1187136
|
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.ttf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5e9b23f9dacd79641485a9a3e9d07035b8b22f13e8a15b25544ca9debf618f0f
|
| 3 |
+
size 1186916
|
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d87b64d83211b941a1e104b2a245b31cc96a9454532335dc8d637a41efcae505
|
| 3 |
+
size 538776
|
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont.woff2
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:12845dec7187730a27e1fd1e6ef53d92602730f83483af55895beeb9667c9333
|
| 3 |
+
size 372752
|
lyric-generator-ja/frontend/dist/font/materialdesignicons-webfont_ie.eot
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:55c35c20bedf831352d92854c2c41863b5736eecb1bcec91c965713388d0c14b
|
| 3 |
+
size 1187136
|
lyric-generator-ja/frontend/dist/font/materialdesignicons.min.css
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lyric-generator-ja/frontend/dist/font/roboto.css
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* cyrillic-ext */
|
| 2 |
+
@font-face {
|
| 3 |
+
font-family: 'Roboto';
|
| 4 |
+
font-style: normal;
|
| 5 |
+
font-weight: 100;
|
| 6 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2');
|
| 7 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 8 |
+
}
|
| 9 |
+
/* cyrillic */
|
| 10 |
+
@font-face {
|
| 11 |
+
font-family: 'Roboto';
|
| 12 |
+
font-style: normal;
|
| 13 |
+
font-weight: 100;
|
| 14 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2');
|
| 15 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 16 |
+
}
|
| 17 |
+
/* greek-ext */
|
| 18 |
+
@font-face {
|
| 19 |
+
font-family: 'Roboto';
|
| 20 |
+
font-style: normal;
|
| 21 |
+
font-weight: 100;
|
| 22 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2');
|
| 23 |
+
unicode-range: U+1F00-1FFF;
|
| 24 |
+
}
|
| 25 |
+
/* greek */
|
| 26 |
+
@font-face {
|
| 27 |
+
font-family: 'Roboto';
|
| 28 |
+
font-style: normal;
|
| 29 |
+
font-weight: 100;
|
| 30 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2');
|
| 31 |
+
unicode-range: U+0370-03FF;
|
| 32 |
+
}
|
| 33 |
+
/* vietnamese */
|
| 34 |
+
@font-face {
|
| 35 |
+
font-family: 'Roboto';
|
| 36 |
+
font-style: normal;
|
| 37 |
+
font-weight: 100;
|
| 38 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2');
|
| 39 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 40 |
+
}
|
| 41 |
+
/* latin-ext */
|
| 42 |
+
@font-face {
|
| 43 |
+
font-family: 'Roboto';
|
| 44 |
+
font-style: normal;
|
| 45 |
+
font-weight: 100;
|
| 46 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2');
|
| 47 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 48 |
+
}
|
| 49 |
+
/* latin */
|
| 50 |
+
@font-face {
|
| 51 |
+
font-family: 'Roboto';
|
| 52 |
+
font-style: normal;
|
| 53 |
+
font-weight: 100;
|
| 54 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2');
|
| 55 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 56 |
+
}
|
| 57 |
+
/* cyrillic-ext */
|
| 58 |
+
@font-face {
|
| 59 |
+
font-family: 'Roboto';
|
| 60 |
+
font-style: normal;
|
| 61 |
+
font-weight: 300;
|
| 62 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2');
|
| 63 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 64 |
+
}
|
| 65 |
+
/* cyrillic */
|
| 66 |
+
@font-face {
|
| 67 |
+
font-family: 'Roboto';
|
| 68 |
+
font-style: normal;
|
| 69 |
+
font-weight: 300;
|
| 70 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2');
|
| 71 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 72 |
+
}
|
| 73 |
+
/* greek-ext */
|
| 74 |
+
@font-face {
|
| 75 |
+
font-family: 'Roboto';
|
| 76 |
+
font-style: normal;
|
| 77 |
+
font-weight: 300;
|
| 78 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2');
|
| 79 |
+
unicode-range: U+1F00-1FFF;
|
| 80 |
+
}
|
| 81 |
+
/* greek */
|
| 82 |
+
@font-face {
|
| 83 |
+
font-family: 'Roboto';
|
| 84 |
+
font-style: normal;
|
| 85 |
+
font-weight: 300;
|
| 86 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2');
|
| 87 |
+
unicode-range: U+0370-03FF;
|
| 88 |
+
}
|
| 89 |
+
/* vietnamese */
|
| 90 |
+
@font-face {
|
| 91 |
+
font-family: 'Roboto';
|
| 92 |
+
font-style: normal;
|
| 93 |
+
font-weight: 300;
|
| 94 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2');
|
| 95 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 96 |
+
}
|
| 97 |
+
/* latin-ext */
|
| 98 |
+
@font-face {
|
| 99 |
+
font-family: 'Roboto';
|
| 100 |
+
font-style: normal;
|
| 101 |
+
font-weight: 300;
|
| 102 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');
|
| 103 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 104 |
+
}
|
| 105 |
+
/* latin */
|
| 106 |
+
@font-face {
|
| 107 |
+
font-family: 'Roboto';
|
| 108 |
+
font-style: normal;
|
| 109 |
+
font-weight: 300;
|
| 110 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');
|
| 111 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 112 |
+
}
|
| 113 |
+
/* cyrillic-ext */
|
| 114 |
+
@font-face {
|
| 115 |
+
font-family: 'Roboto';
|
| 116 |
+
font-style: normal;
|
| 117 |
+
font-weight: 400;
|
| 118 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
|
| 119 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 120 |
+
}
|
| 121 |
+
/* cyrillic */
|
| 122 |
+
@font-face {
|
| 123 |
+
font-family: 'Roboto';
|
| 124 |
+
font-style: normal;
|
| 125 |
+
font-weight: 400;
|
| 126 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
|
| 127 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 128 |
+
}
|
| 129 |
+
/* greek-ext */
|
| 130 |
+
@font-face {
|
| 131 |
+
font-family: 'Roboto';
|
| 132 |
+
font-style: normal;
|
| 133 |
+
font-weight: 400;
|
| 134 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
|
| 135 |
+
unicode-range: U+1F00-1FFF;
|
| 136 |
+
}
|
| 137 |
+
/* greek */
|
| 138 |
+
@font-face {
|
| 139 |
+
font-family: 'Roboto';
|
| 140 |
+
font-style: normal;
|
| 141 |
+
font-weight: 400;
|
| 142 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
|
| 143 |
+
unicode-range: U+0370-03FF;
|
| 144 |
+
}
|
| 145 |
+
/* vietnamese */
|
| 146 |
+
@font-face {
|
| 147 |
+
font-family: 'Roboto';
|
| 148 |
+
font-style: normal;
|
| 149 |
+
font-weight: 400;
|
| 150 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
|
| 151 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 152 |
+
}
|
| 153 |
+
/* latin-ext */
|
| 154 |
+
@font-face {
|
| 155 |
+
font-family: 'Roboto';
|
| 156 |
+
font-style: normal;
|
| 157 |
+
font-weight: 400;
|
| 158 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
|
| 159 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 160 |
+
}
|
| 161 |
+
/* latin */
|
| 162 |
+
@font-face {
|
| 163 |
+
font-family: 'Roboto';
|
| 164 |
+
font-style: normal;
|
| 165 |
+
font-weight: 400;
|
| 166 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
|
| 167 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 168 |
+
}
|
| 169 |
+
/* cyrillic-ext */
|
| 170 |
+
@font-face {
|
| 171 |
+
font-family: 'Roboto';
|
| 172 |
+
font-style: normal;
|
| 173 |
+
font-weight: 500;
|
| 174 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2');
|
| 175 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 176 |
+
}
|
| 177 |
+
/* cyrillic */
|
| 178 |
+
@font-face {
|
| 179 |
+
font-family: 'Roboto';
|
| 180 |
+
font-style: normal;
|
| 181 |
+
font-weight: 500;
|
| 182 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2');
|
| 183 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 184 |
+
}
|
| 185 |
+
/* greek-ext */
|
| 186 |
+
@font-face {
|
| 187 |
+
font-family: 'Roboto';
|
| 188 |
+
font-style: normal;
|
| 189 |
+
font-weight: 500;
|
| 190 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2');
|
| 191 |
+
unicode-range: U+1F00-1FFF;
|
| 192 |
+
}
|
| 193 |
+
/* greek */
|
| 194 |
+
@font-face {
|
| 195 |
+
font-family: 'Roboto';
|
| 196 |
+
font-style: normal;
|
| 197 |
+
font-weight: 500;
|
| 198 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2');
|
| 199 |
+
unicode-range: U+0370-03FF;
|
| 200 |
+
}
|
| 201 |
+
/* vietnamese */
|
| 202 |
+
@font-face {
|
| 203 |
+
font-family: 'Roboto';
|
| 204 |
+
font-style: normal;
|
| 205 |
+
font-weight: 500;
|
| 206 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2');
|
| 207 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 208 |
+
}
|
| 209 |
+
/* latin-ext */
|
| 210 |
+
@font-face {
|
| 211 |
+
font-family: 'Roboto';
|
| 212 |
+
font-style: normal;
|
| 213 |
+
font-weight: 500;
|
| 214 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2');
|
| 215 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 216 |
+
}
|
| 217 |
+
/* latin */
|
| 218 |
+
@font-face {
|
| 219 |
+
font-family: 'Roboto';
|
| 220 |
+
font-style: normal;
|
| 221 |
+
font-weight: 500;
|
| 222 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2');
|
| 223 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 224 |
+
}
|
| 225 |
+
/* cyrillic-ext */
|
| 226 |
+
@font-face {
|
| 227 |
+
font-family: 'Roboto';
|
| 228 |
+
font-style: normal;
|
| 229 |
+
font-weight: 700;
|
| 230 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');
|
| 231 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 232 |
+
}
|
| 233 |
+
/* cyrillic */
|
| 234 |
+
@font-face {
|
| 235 |
+
font-family: 'Roboto';
|
| 236 |
+
font-style: normal;
|
| 237 |
+
font-weight: 700;
|
| 238 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');
|
| 239 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 240 |
+
}
|
| 241 |
+
/* greek-ext */
|
| 242 |
+
@font-face {
|
| 243 |
+
font-family: 'Roboto';
|
| 244 |
+
font-style: normal;
|
| 245 |
+
font-weight: 700;
|
| 246 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');
|
| 247 |
+
unicode-range: U+1F00-1FFF;
|
| 248 |
+
}
|
| 249 |
+
/* greek */
|
| 250 |
+
@font-face {
|
| 251 |
+
font-family: 'Roboto';
|
| 252 |
+
font-style: normal;
|
| 253 |
+
font-weight: 700;
|
| 254 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');
|
| 255 |
+
unicode-range: U+0370-03FF;
|
| 256 |
+
}
|
| 257 |
+
/* vietnamese */
|
| 258 |
+
@font-face {
|
| 259 |
+
font-family: 'Roboto';
|
| 260 |
+
font-style: normal;
|
| 261 |
+
font-weight: 700;
|
| 262 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');
|
| 263 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 264 |
+
}
|
| 265 |
+
/* latin-ext */
|
| 266 |
+
@font-face {
|
| 267 |
+
font-family: 'Roboto';
|
| 268 |
+
font-style: normal;
|
| 269 |
+
font-weight: 700;
|
| 270 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');
|
| 271 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 272 |
+
}
|
| 273 |
+
/* latin */
|
| 274 |
+
@font-face {
|
| 275 |
+
font-family: 'Roboto';
|
| 276 |
+
font-style: normal;
|
| 277 |
+
font-weight: 700;
|
| 278 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');
|
| 279 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 280 |
+
}
|
| 281 |
+
/* cyrillic-ext */
|
| 282 |
+
@font-face {
|
| 283 |
+
font-family: 'Roboto';
|
| 284 |
+
font-style: normal;
|
| 285 |
+
font-weight: 900;
|
| 286 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2');
|
| 287 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 288 |
+
}
|
| 289 |
+
/* cyrillic */
|
| 290 |
+
@font-face {
|
| 291 |
+
font-family: 'Roboto';
|
| 292 |
+
font-style: normal;
|
| 293 |
+
font-weight: 900;
|
| 294 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2');
|
| 295 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 296 |
+
}
|
| 297 |
+
/* greek-ext */
|
| 298 |
+
@font-face {
|
| 299 |
+
font-family: 'Roboto';
|
| 300 |
+
font-style: normal;
|
| 301 |
+
font-weight: 900;
|
| 302 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2');
|
| 303 |
+
unicode-range: U+1F00-1FFF;
|
| 304 |
+
}
|
| 305 |
+
/* greek */
|
| 306 |
+
@font-face {
|
| 307 |
+
font-family: 'Roboto';
|
| 308 |
+
font-style: normal;
|
| 309 |
+
font-weight: 900;
|
| 310 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2');
|
| 311 |
+
unicode-range: U+0370-03FF;
|
| 312 |
+
}
|
| 313 |
+
/* vietnamese */
|
| 314 |
+
@font-face {
|
| 315 |
+
font-family: 'Roboto';
|
| 316 |
+
font-style: normal;
|
| 317 |
+
font-weight: 900;
|
| 318 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2');
|
| 319 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 320 |
+
}
|
| 321 |
+
/* latin-ext */
|
| 322 |
+
@font-face {
|
| 323 |
+
font-family: 'Roboto';
|
| 324 |
+
font-style: normal;
|
| 325 |
+
font-weight: 900;
|
| 326 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2');
|
| 327 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 328 |
+
}
|
| 329 |
+
/* latin */
|
| 330 |
+
@font-face {
|
| 331 |
+
font-family: 'Roboto';
|
| 332 |
+
font-style: normal;
|
| 333 |
+
font-weight: 900;
|
| 334 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2');
|
| 335 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 336 |
+
}
|
lyric-generator-ja/frontend/dist/index.html
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html><html lang="en" style="overflow-y: auto"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>日语歌词生成器</title><link rel="stylesheet" href="font/roboto.css"><link rel="stylesheet" href="font/materialdesignicons.min.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js" integrity="sha512-qw2bX9KUhi7HLuUloyRsvxRlWJvj0u0JWVegc5tf7qsw47T0pwXZIk1Kyc0utTH3NlrpHtLa4HYTVUyHBr9Ufg==" crossorigin="anonymous"></script><link href="css/chunk-vendors.db3e6b3f.css" rel="preload" as="style"><link href="js/app.413041e4.js" rel="preload" as="script"><link href="js/chunk-vendors.f5ab6a81.js" rel="preload" as="script"><link href="css/chunk-vendors.db3e6b3f.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but lyric-generator doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.f5ab6a81.js"></script><script src="js/app.413041e4.js"></script></body></html>
|
lyric-generator-ja/frontend/dist/js/app.413041e4.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
(function(t){function e(e){for(var r,o,i=e[0],l=e[1],c=e[2],p=0,_=[];p<i.length;p++)o=i[p],Object.prototype.hasOwnProperty.call(n,o)&&n[o]&&_.push(n[o][0]),n[o]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(t[r]=l[r]);u&&u(e);while(_.length)_.shift()();return s.push.apply(s,c||[]),a()}function a(){for(var t,e=0;e<s.length;e++){for(var a=s[e],r=!0,i=1;i<a.length;i++){var l=a[i];0!==n[l]&&(r=!1)}r&&(s.splice(e--,1),t=o(o.s=a[0]))}return t}var r={},n={app:0},s=[];function o(e){if(r[e])return r[e].exports;var a=r[e]={i:e,l:!1,exports:{}};return t[e].call(a.exports,a,a.exports,o),a.l=!0,a.exports}o.m=t,o.c=r,o.d=function(t,e,a){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},o.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(a,r,function(e){return t[e]}.bind(null,r));return a},o.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="";var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=e,i=i.slice();for(var c=0;c<i.length;c++)e(i[c]);var u=l;s.push([0,"chunk-vendors"]),a()})({0:function(t,e,a){t.exports=a("56d7")},"56d7":function(t,e,a){"use strict";a.r(e);a("e260"),a("e6cf"),a("cca6"),a("a79d");var r=a("2b0e"),n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-app",[a("v-app-bar",{attrs:{app:"",dark:"",color:"primary"}},[a("v-toolbar-title",[t._v(t._s(t.i18n.title))]),a("v-spacer"),a("v-select",{staticStyle:{"max-width":"10rem"},attrs:{items:["English","Chinese"],"prepend-icon":"mdi-web","hide-details":""},on:{change:function(e){return t.set_locale(t.locale_name)}},model:{value:t.locale_name,callback:function(e){t.locale_name=e},expression:"locale_name"}})],1),a("v-main",[a("v-row",{staticClass:"mx-3"},[a("div",{staticClass:"col-12 offset-0 col-sm-8 offset-sm-2 col-md-8 offset-md-2 col-lg-6 offset-lg-3 col-xl-6 offset-xl-3 mt-8"},[a("v-textarea",{attrs:{label:t.i18n.input_title_label,disabled:t.loading,rows:"1","prepend-icon":"mdi-comment",hint:t.i18n.input_title_hint,"no-resize":""},model:{value:t.prompt_title,callback:function(e){t.prompt_title=e},expression:"prompt_title"}}),a("v-textarea",{attrs:{label:t.i18n.input_text_label,disabled:t.loading,rows:"2","prepend-icon":"mdi-comment",hint:t.i18n.input_text_hint,"no-resize":""},model:{value:t.prompt_text,callback:function(e){t.prompt_text=e},expression:"prompt_text"}}),a("v-row",[a("v-checkbox",{staticClass:"col-6",attrs:{disabled:t.loading,label:t.i18n.show_romaji},on:{change:function(e){t.show_type=t.show_romaji?0:1}},model:{value:t.show_romaji,callback:function(e){t.show_romaji=e},expression:"show_romaji"}}),a("v-scroll-x-transition",[t.show_romaji?a("v-select",{staticClass:"col-6",attrs:{disabled:t.loading,items:t.romaji_systems,hint:t.i18n.romaji_system},model:{value:t.romaji_system,callback:function(e){t.romaji_system=e},expression:"romaji_system"}}):t._e()],1)],1),a("v-row",{staticClass:"mt-n8"},[a("v-checkbox",{staticClass:"col-6",attrs:{disabled:t.loading,label:t.i18n.use_translate},on:{change:function(e){t.show_type=t.use_trans?1:0}},model:{value:t.use_trans,callback:function(e){t.use_trans=e},expression:"use_trans"}}),a("v-scroll-x-transition",[t.use_trans?a("v-select",{staticClass:"col-6",attrs:{disabled:t.loading,items:t.google_supported_languages,hint:t.i18n.target_lang},model:{value:t.trans_target_lang,callback:function(e){t.trans_target_lang=e},expression:"trans_target_lang"}}):t._e()],1)],1),a("v-btn",{staticClass:"mb-10",attrs:{color:"primary",elevation:"5",loading:t.loading,text:"",block:"",large:"",tile:""},on:{click:function(e){return t.do_gen()}}},[t._v(t._s(t.i18n.generate))]),a("v-expand-transition",[0!==t.lyric.length?a("v-simple-table",{staticClass:"py-5",attrs:{dense:""},scopedSlots:t._u([{key:"default",fn:function(){return[a("thead",[a("tr",[a("th",[t._v(t._s(t.i18n.lyric)),a("v-btn",{staticClass:"ml-2",attrs:{elevation:"0",fab:"","x-small":""},on:{click:function(e){return t.copy_lyric("s")}}},[a("v-icon",[t._v("mdi-content-copy")])],1)],1),a("v-scroll-x-transition",[t.use_trans||t.show_romaji?a("th",[t.show_romaji&&!t.use_trans?a("span",[t._v(t._s(t.i18n.romaji))]):t._e(),!t.show_romaji&&t.use_trans?a("span",[t._v(t._s(t.i18n.translation))]):t._e(),t.use_trans&&t.show_romaji?a("v-btn",{staticClass:"mr-n2",attrs:{elevation:"0",text:"",small:""},on:{click:function(e){t.show_type=0===t.show_type?1:0}}},[t.show_romaji?a("span",{class:{"grey--text":1===t.show_type}},[t._v(t._s(t.i18n.romaji_s))]):t._e(),t._v("/"),t.use_trans?a("span",{class:{"grey--text":0===t.show_type}},[t._v(t._s(t.i18n.translation_s))]):t._e()]):t._e(),a("v-btn",{staticClass:"ml-2",attrs:{elevation:"0",fab:"","x-small":""},on:{click:function(e){return t.copy_lyric(0===t.show_type?"r":"t")}}},[a("v-icon",[t._v("mdi-content-copy")])],1)],1):t._e()])],1)]),a("tbody",{staticStyle:{"word-break":"break-word","word-wrap":"break-word"}},t._l(t.lyric,(function(e,r){return a("tr",{key:r,on:{mouseenter:function(e){t.hover=r},mouseleave:function(e){t.hover=-1}}},[a("td",{class:{"text-h6":0===r,"text-center":!e.is_lyric}},[t._v(" "+t._s(e.s)+" "),t.tts_support?a("v-scroll-x-transition",[t.tts_loading||""===e.s||t.speaking!==r&&(-1!==t.speaking||t.hover!==r)?t._e():a("v-btn",{class:{"mr-n9":!0,"blue--text":t.speaking===r},attrs:{icon:"",small:""},on:{click:function(e){return t.ja_tts(r)}}},[a("v-icon",[t._v("mdi-volume-high")])],1)],1):t._e(),t.tts_support&&t.speaking===r&&t.tts_loading?a("v-progress-circular",{staticClass:"mr-n9",attrs:{indeterminate:"",size:"20",width:"2",color:"primary"}}):t._e()],1),a("v-scroll-x-transition",[t.use_trans||t.show_romaji?a("td",{class:{"text-center":!e.is_lyric}},[t._v(t._s(0===t.show_type?e.r:e.t))]):t._e()])],1)})),0)]},proxy:!0}],null,!1,3397400449)}):t._e()],1)],1)]),a("v-snackbar",{attrs:{dark:"",timeout:2e3},scopedSlots:t._u([{key:"action",fn:function(e){var r=e.attrs;return[a("v-btn",t._b({attrs:{color:"blue",text:""},on:{click:function(e){t.snackbar=!1}}},"v-btn",r,!1),[t._v(" Close ")])]}}]),model:{value:t.snackbar,callback:function(e){t.snackbar=e},expression:"snackbar"}},[t._v(" "+t._s(t.snackbar_msg)+" ")])],1),a("v-footer",[a("v-row",{staticClass:"ma-0"},[a("div",{staticClass:"text-center caption col-12 pa-0"},[t._v(t._s(t.i18n.footer))]),a("div",{staticClass:"text-center caption col-12 pa-0"},[t._v("© 2022 SkyTNT")])])],1)],1)},s=[],o=a("1da1"),i=(a("96cf"),a("498a"),a("ac1f"),a("5319"),a("00b4"),a("99af"),a("1276"),a("d3b7"),a("bc3a")),l=a.n(i);function c(){return/(iPhone|iPad|iPod|iOS|Android|Windows Phone)/i.test(navigator.userAgent)}String.prototype.trim||(String.prototype.trim=function(){return this.triml().trimr()},String.prototype.triml=function(){return this.replace(/^[\s\n\t]+/g,"")},String.prototype.trimr=function(){return this.replace(/[\s\n\t]+$/g,"")});var u={name:"App",data:function(){return{locale_name:"English",i18n:{},use_trans:!1,google_supported_languages:["af","sq","am","ar","hy","az","eu","be","bn","bs","bg","my","ca","ca","ceb","co","cs","da","nl","nl","en","eo","et","fi","fr","fy","ka","de","gd","gd","ga","gl","el","gu","ht","ht","ha","haw","he","hi","hr","hu","ig","is","id","it","jw","ja","kn","kk","km","ky","ky","ko","ku","lo","la","lv","lt","lb","lb","mk","ml","mi","mr","ms","mg","mt","mn","ne","no","ny","ny","ny","or","pa","pa","fa","pl","pt","ps","ps","ro","ro","ro","ru","si","si","sk","sl","sm","sn","sd","so","st","es","es","sr","su","sw","sv","ta","te","tg","tl","th","tr","ug","ug","uk","ur","uz","vi","cy","xh","yi","yo","zu","zh-CN","zh-TW"],trans_target_lang:"zh-CN",show_romaji:!1,show_type:0,romaji_systems:["hepburn","kunrei","nippon"],romaji_system:"hepburn",prompt_title:"桜",prompt_text:"",loading:!1,lyric:[],tts_cache:{},tts_loading:!1,tts_support:!1,speaking:-1,hover:-1,snackbar:!1,snackbar_msg:""}},mounted:function(){this.locale_name="zh-CN"===(navigator.language||navigator.userLanguage)?"Chinese":"English","English"===this.locale_name&&(this.trans_target_lang="en"),this.set_locale(this.locale_name),this.loads()},methods:{set_locale:function(t){var e="English"===t?"en":"zh",a={en:{title:"Japanese Lyric Generator",loading:"Loading",input_title_label:"Title (can be empty)",input_text_label:"Beginning (can be empty)",input_title_hint:"Generate lyric for a given title",input_text_hint:"The generator continues with this text",show_romaji:"Show romaji",romaji_system:"Romaji system",use_translate:"Translate",target_lang:"Target language",generate:"Generate!",lyric:"Lyric",romaji:"Romaji",romaji_s:"R",translation:"Translation",translation_s:"T",footer:"The generated content can be used as you like, please share this site if you like.",copy_successful:"Copy successful",error:"Error",error_network:"Network error",error_failed_load_kuromoji:"Failed to load romaji converter",error_failed_covert_romaji:"Failed to convert lyric to romaji",error_failed_translate:"Failed to translate lyric",error_copy:"Copy failed, browser does not support"},zh:{title:"日语歌词生成器",loading:"加载中",input_title_label:"歌词标题(可不填)",input_text_label:"歌词开头(可不填)",input_title_hint:"给定标题生成歌词",input_text_hint:"生成器以这段文本进行续写",show_romaji:"显示罗马音",romaji_system:"罗马音系统",use_translate:"是否进行翻译",target_lang:"目标语言",generate:"生成!",lyric:"歌词",romaji:"罗马音",romaji_s:"音",translation:"翻译",translation_s:"译",footer:"生成的内容可以随意使用,喜欢的话就请分享本网站",copy_successful:"复制成功",error:"错误",error_network:"网络错误",error_failed_load_kuromoji:"罗马音转换器加载失败",error_failed_covert_romaji:"转换罗马音错误",error_failed_translate:"翻译出错",error_copy:"复制失败,浏览器不支持"}};this.i18n=a[e]},loads:function(){return Object(o["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(c()){t.next=6;break}return t.t0=eval,t.next=4,l.a.get("https://l2d.fab.moe/js/autoload.js");case 4:t.t1=t.sent.data,(0,t.t0)(t.t1);case 6:case"end":return t.stop()}}),t)})))()},do_gen:function(){var t=this;return Object(o["a"])(regeneratorRuntime.mark((function e(){var a,r,n,s,o,i,c,u,p,_,m;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=t.prompt_title.trim(),r=t.prompt_text.trim(),t.loading=!0,t.lyric=[],t.tts_cache={},e.prev=5,e.next=8,l.a.post("gen",{title:a,text:r});case 8:for(i in n=e.sent,s="".concat(n.data.title,"\n\n").concat(n.data.lyric),o=s.split("\n"),o)c=o[i].trim().replace(/ /g," "),t.lyric.push({s:c,r:"",t:"",is_lyric:"---end---"!==c});return t.lyric[0].is_lyric=!1,e.prev=13,e.next=16,l.a.post("romaji",{system:t.romaji_system,text:s});case 16:for(p in u=e.sent.data.romaji,u=u.split("\n"),u)t.lyric[p].r=u[p];e.next=24;break;case 21:e.prev=21,e.t0=e["catch"](13),t.show_snackbar(t.i18n.error_failed_covert_romaji+":"+e.t0.message);case 24:if(!t.use_trans){e.next=29;break}return e.next=27,t.google_translate(s);case 27:if(_=e.sent,""!==_)for(m in _=_.split("\n"),_)t.lyric[m].t=_[m].trim().replace(/ /g," ");case 29:t.loading=!1,e.next=37;break;case 32:e.prev=32,e.t1=e["catch"](5),console.log(e.t1),t.show_snackbar(t.i18n.error+":"+e.t1.message),t.loading=!1;case 37:case"end":return e.stop()}}),e,null,[[5,32],[13,21]])})))()},google_translate:function(t){var e=this;return Object(o["a"])(regeneratorRuntime.mark((function a(){var r,n,s,o,i;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return r={client:"gtx",dt:"t",sl:"ja",tl:e.trans_target_lang,q:t},a.prev=1,a.next=4,l.a.get("https://translate.googleapis.com/translate_a/single",{params:r});case 4:for(i in n=a.sent,s="",o=n.data[0],o)s+=o[i][0];return a.abrupt("return",s);case 11:a.prev=11,a.t0=a["catch"](1),e.show_snackbar(e.i18n.error_failed_translate+":"+a.t0.message);case 14:return a.abrupt("return","");case 15:case"end":return a.stop()}}),a,null,[[1,11]])})))()},ja_tts:function(t){var e=this;return Object(o["a"])(regeneratorRuntime.mark((function a(){var r,n,s,o,i,c;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:if(r=e.lyric[t].s,-1===e.speaking&&""!==r){a.next=3;break}return a.abrupt("return");case 3:if(e.speaking=t,a.prev=4,n=new AudioContext,s=n.createGain(),s.gain.value=2,void 0!==e.tts_cache[r]){a.next=20;break}return e.tts_loading=!0,a.next=12,l.a.post("https://voicevox-skytnt.cloud.okteto.net/audio_query",null,{params:{speaker:4,text:r}});case 12:return o=a.sent.data,a.next=15,l.a.post("https://voicevox-skytnt.cloud.okteto.net/synthesis",o,{params:{speaker:4},responseType:"arraybuffer"});case 15:return i=a.sent.data,e.tts_loading=!1,a.next=19,n.decodeAudioData(i);case 19:e.tts_cache[r]=a.sent;case 20:return c=n.createBufferSource(),c.buffer=e.tts_cache[r],c.loop=!1,c.connect(s),s.connect(n.destination),a.next=27,new Promise((function(t){c.onended=function(){t()},c.start(0)}));case 27:a.next=32;break;case 29:a.prev=29,a.t0=a["catch"](4),e.show_snackbar(e.i18n.error+":"+a.t0.message);case 32:e.speaking=-1,e.tts_loading=!1;case 34:case"end":return a.stop()}}),a,null,[[4,29]])})))()},copy_lyric:function(t){var e="";for(var a in this.lyric)e+=this.lyric[a][t]+"\n";e=e.trim(),this.copy(e)},copy:function(t){var e=this;return Object(o["a"])(regeneratorRuntime.mark((function a(){var r,n;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return a.prev=0,a.next=3,navigator.clipboard.writeText(t);case 3:e.show_snackbar(e.i18n.copy_successful),a.next=18;break;case 6:a.prev=6,a.t0=a["catch"](0),r=document.createElement("textarea"),r.style.position="fixed",r.style.top="-10000px",r.style.zIndex="-999",document.body.appendChild(r),console.log("input",r),r.value=t,r.focus(),r.select();try{n=document.execCommand("copy"),n&&"unsuccessful"!==n?e.show_snackbar(e.i18n.copy_successful):e.show_snackbar(e.i18n.error_copy)}catch(s){e.show_snackbar(e.i18n.error_copy)}finally{document.body.removeChild(r)}case 18:case"end":return a.stop()}}),a,null,[[0,6]])})))()},show_snackbar:function(t){this.snackbar=!0,this.snackbar_msg=t}}},p=u,_=a("2877"),m=a("6544"),d=a.n(m),h=a("7496"),f=a("40dc"),g=a("8336"),v=a("ac7c"),b=a("0789"),y=a("553a"),k=a("132d"),x=a("f6c4"),w=a("490a"),j=a("0fd9"),C=a("b974"),S=a("1f4f"),T=a("2db4"),O=a("2fa4"),V=a("a844"),R=a("2a7f"),z=Object(_["a"])(p,n,s,!1,null,null,null),P=z.exports;d()(z,{VApp:h["a"],VAppBar:f["a"],VBtn:g["a"],VCheckbox:v["a"],VExpandTransition:b["a"],VFooter:y["a"],VIcon:k["a"],VMain:x["a"],VProgressCircular:w["a"],VRow:j["a"],VScrollXTransition:b["d"],VSelect:C["a"],VSimpleTable:S["a"],VSnackbar:T["a"],VSpacer:O["a"],VTextarea:V["a"],VToolbarTitle:R["a"]});var E=a("f309");r["a"].use(E["a"]);var A=new E["a"]({}),M=a("8c4f");r["a"].use(M["a"]);var N=[],B=new M["a"]({routes:N}),F=B;r["a"].config.productionTip=!1,new r["a"]({vuetify:A,router:F,render:function(t){return t(P)}}).$mount("#app")}});
|
lyric-generator-ja/frontend/dist/js/chunk-vendors.f5ab6a81.js
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lyric-generator-ja/frontend/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "lyric-generator",
|
| 3 |
+
"version": "0.1.0",
|
| 4 |
+
"private": true,
|
| 5 |
+
"scripts": {
|
| 6 |
+
"serve": "vue-cli-service serve",
|
| 7 |
+
"build": "vue-cli-service build",
|
| 8 |
+
"lint": "vue-cli-service lint"
|
| 9 |
+
},
|
| 10 |
+
"dependencies": {
|
| 11 |
+
"core-js": "^3.6.5",
|
| 12 |
+
"vue": "^2.6.11",
|
| 13 |
+
"vue-router": "^3.2.0",
|
| 14 |
+
"vuetify": "^2.6.0"
|
| 15 |
+
},
|
| 16 |
+
"devDependencies": {
|
| 17 |
+
"@vue/cli-plugin-babel": "~4.5.9",
|
| 18 |
+
"@vue/cli-plugin-eslint": "~4.5.9",
|
| 19 |
+
"@vue/cli-plugin-router": "~4.5.9",
|
| 20 |
+
"@vue/cli-service": "~4.5.9",
|
| 21 |
+
"axios": "^0.18.0",
|
| 22 |
+
"babel-eslint": "^10.1.0",
|
| 23 |
+
"eslint": "^6.7.2",
|
| 24 |
+
"eslint-plugin-vue": "^6.2.2",
|
| 25 |
+
"sass": "~1.32.0",
|
| 26 |
+
"sass-loader": "^10.0.0",
|
| 27 |
+
"vue-cli-plugin-axios": "~0.0.4",
|
| 28 |
+
"vue-cli-plugin-vuetify": "~2.4.8",
|
| 29 |
+
"vue-template-compiler": "^2.6.11",
|
| 30 |
+
"vuetify-loader": "^1.7.0"
|
| 31 |
+
},
|
| 32 |
+
"eslintConfig": {
|
| 33 |
+
"root": true,
|
| 34 |
+
"env": {
|
| 35 |
+
"node": true
|
| 36 |
+
},
|
| 37 |
+
"extends": [
|
| 38 |
+
"plugin:vue/essential",
|
| 39 |
+
"eslint:recommended"
|
| 40 |
+
],
|
| 41 |
+
"parserOptions": {
|
| 42 |
+
"parser": "babel-eslint"
|
| 43 |
+
},
|
| 44 |
+
"rules": {}
|
| 45 |
+
},
|
| 46 |
+
"browserslist": [
|
| 47 |
+
"> 1%",
|
| 48 |
+
"last 2 versions",
|
| 49 |
+
"not dead"
|
| 50 |
+
]
|
| 51 |
+
}
|
lyric-generator-ja/frontend/public/favicon.ico
ADDED
|
|
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.eot
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:55c35c20bedf831352d92854c2c41863b5736eecb1bcec91c965713388d0c14b
|
| 3 |
+
size 1187136
|
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.ttf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5e9b23f9dacd79641485a9a3e9d07035b8b22f13e8a15b25544ca9debf618f0f
|
| 3 |
+
size 1186916
|
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d87b64d83211b941a1e104b2a245b31cc96a9454532335dc8d637a41efcae505
|
| 3 |
+
size 538776
|
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont.woff2
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:12845dec7187730a27e1fd1e6ef53d92602730f83483af55895beeb9667c9333
|
| 3 |
+
size 372752
|
lyric-generator-ja/frontend/public/font/materialdesignicons-webfont_ie.eot
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:55c35c20bedf831352d92854c2c41863b5736eecb1bcec91c965713388d0c14b
|
| 3 |
+
size 1187136
|
lyric-generator-ja/frontend/public/font/materialdesignicons.min.css
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lyric-generator-ja/frontend/public/font/roboto.css
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* cyrillic-ext */
|
| 2 |
+
@font-face {
|
| 3 |
+
font-family: 'Roboto';
|
| 4 |
+
font-style: normal;
|
| 5 |
+
font-weight: 100;
|
| 6 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2');
|
| 7 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 8 |
+
}
|
| 9 |
+
/* cyrillic */
|
| 10 |
+
@font-face {
|
| 11 |
+
font-family: 'Roboto';
|
| 12 |
+
font-style: normal;
|
| 13 |
+
font-weight: 100;
|
| 14 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2');
|
| 15 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 16 |
+
}
|
| 17 |
+
/* greek-ext */
|
| 18 |
+
@font-face {
|
| 19 |
+
font-family: 'Roboto';
|
| 20 |
+
font-style: normal;
|
| 21 |
+
font-weight: 100;
|
| 22 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2');
|
| 23 |
+
unicode-range: U+1F00-1FFF;
|
| 24 |
+
}
|
| 25 |
+
/* greek */
|
| 26 |
+
@font-face {
|
| 27 |
+
font-family: 'Roboto';
|
| 28 |
+
font-style: normal;
|
| 29 |
+
font-weight: 100;
|
| 30 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2');
|
| 31 |
+
unicode-range: U+0370-03FF;
|
| 32 |
+
}
|
| 33 |
+
/* vietnamese */
|
| 34 |
+
@font-face {
|
| 35 |
+
font-family: 'Roboto';
|
| 36 |
+
font-style: normal;
|
| 37 |
+
font-weight: 100;
|
| 38 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2');
|
| 39 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 40 |
+
}
|
| 41 |
+
/* latin-ext */
|
| 42 |
+
@font-face {
|
| 43 |
+
font-family: 'Roboto';
|
| 44 |
+
font-style: normal;
|
| 45 |
+
font-weight: 100;
|
| 46 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2');
|
| 47 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 48 |
+
}
|
| 49 |
+
/* latin */
|
| 50 |
+
@font-face {
|
| 51 |
+
font-family: 'Roboto';
|
| 52 |
+
font-style: normal;
|
| 53 |
+
font-weight: 100;
|
| 54 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2');
|
| 55 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 56 |
+
}
|
| 57 |
+
/* cyrillic-ext */
|
| 58 |
+
@font-face {
|
| 59 |
+
font-family: 'Roboto';
|
| 60 |
+
font-style: normal;
|
| 61 |
+
font-weight: 300;
|
| 62 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2');
|
| 63 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 64 |
+
}
|
| 65 |
+
/* cyrillic */
|
| 66 |
+
@font-face {
|
| 67 |
+
font-family: 'Roboto';
|
| 68 |
+
font-style: normal;
|
| 69 |
+
font-weight: 300;
|
| 70 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2');
|
| 71 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 72 |
+
}
|
| 73 |
+
/* greek-ext */
|
| 74 |
+
@font-face {
|
| 75 |
+
font-family: 'Roboto';
|
| 76 |
+
font-style: normal;
|
| 77 |
+
font-weight: 300;
|
| 78 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2');
|
| 79 |
+
unicode-range: U+1F00-1FFF;
|
| 80 |
+
}
|
| 81 |
+
/* greek */
|
| 82 |
+
@font-face {
|
| 83 |
+
font-family: 'Roboto';
|
| 84 |
+
font-style: normal;
|
| 85 |
+
font-weight: 300;
|
| 86 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2');
|
| 87 |
+
unicode-range: U+0370-03FF;
|
| 88 |
+
}
|
| 89 |
+
/* vietnamese */
|
| 90 |
+
@font-face {
|
| 91 |
+
font-family: 'Roboto';
|
| 92 |
+
font-style: normal;
|
| 93 |
+
font-weight: 300;
|
| 94 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2');
|
| 95 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 96 |
+
}
|
| 97 |
+
/* latin-ext */
|
| 98 |
+
@font-face {
|
| 99 |
+
font-family: 'Roboto';
|
| 100 |
+
font-style: normal;
|
| 101 |
+
font-weight: 300;
|
| 102 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');
|
| 103 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 104 |
+
}
|
| 105 |
+
/* latin */
|
| 106 |
+
@font-face {
|
| 107 |
+
font-family: 'Roboto';
|
| 108 |
+
font-style: normal;
|
| 109 |
+
font-weight: 300;
|
| 110 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');
|
| 111 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 112 |
+
}
|
| 113 |
+
/* cyrillic-ext */
|
| 114 |
+
@font-face {
|
| 115 |
+
font-family: 'Roboto';
|
| 116 |
+
font-style: normal;
|
| 117 |
+
font-weight: 400;
|
| 118 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
|
| 119 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 120 |
+
}
|
| 121 |
+
/* cyrillic */
|
| 122 |
+
@font-face {
|
| 123 |
+
font-family: 'Roboto';
|
| 124 |
+
font-style: normal;
|
| 125 |
+
font-weight: 400;
|
| 126 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
|
| 127 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 128 |
+
}
|
| 129 |
+
/* greek-ext */
|
| 130 |
+
@font-face {
|
| 131 |
+
font-family: 'Roboto';
|
| 132 |
+
font-style: normal;
|
| 133 |
+
font-weight: 400;
|
| 134 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
|
| 135 |
+
unicode-range: U+1F00-1FFF;
|
| 136 |
+
}
|
| 137 |
+
/* greek */
|
| 138 |
+
@font-face {
|
| 139 |
+
font-family: 'Roboto';
|
| 140 |
+
font-style: normal;
|
| 141 |
+
font-weight: 400;
|
| 142 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
|
| 143 |
+
unicode-range: U+0370-03FF;
|
| 144 |
+
}
|
| 145 |
+
/* vietnamese */
|
| 146 |
+
@font-face {
|
| 147 |
+
font-family: 'Roboto';
|
| 148 |
+
font-style: normal;
|
| 149 |
+
font-weight: 400;
|
| 150 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
|
| 151 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 152 |
+
}
|
| 153 |
+
/* latin-ext */
|
| 154 |
+
@font-face {
|
| 155 |
+
font-family: 'Roboto';
|
| 156 |
+
font-style: normal;
|
| 157 |
+
font-weight: 400;
|
| 158 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
|
| 159 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 160 |
+
}
|
| 161 |
+
/* latin */
|
| 162 |
+
@font-face {
|
| 163 |
+
font-family: 'Roboto';
|
| 164 |
+
font-style: normal;
|
| 165 |
+
font-weight: 400;
|
| 166 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
|
| 167 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 168 |
+
}
|
| 169 |
+
/* cyrillic-ext */
|
| 170 |
+
@font-face {
|
| 171 |
+
font-family: 'Roboto';
|
| 172 |
+
font-style: normal;
|
| 173 |
+
font-weight: 500;
|
| 174 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2');
|
| 175 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 176 |
+
}
|
| 177 |
+
/* cyrillic */
|
| 178 |
+
@font-face {
|
| 179 |
+
font-family: 'Roboto';
|
| 180 |
+
font-style: normal;
|
| 181 |
+
font-weight: 500;
|
| 182 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2');
|
| 183 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 184 |
+
}
|
| 185 |
+
/* greek-ext */
|
| 186 |
+
@font-face {
|
| 187 |
+
font-family: 'Roboto';
|
| 188 |
+
font-style: normal;
|
| 189 |
+
font-weight: 500;
|
| 190 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2');
|
| 191 |
+
unicode-range: U+1F00-1FFF;
|
| 192 |
+
}
|
| 193 |
+
/* greek */
|
| 194 |
+
@font-face {
|
| 195 |
+
font-family: 'Roboto';
|
| 196 |
+
font-style: normal;
|
| 197 |
+
font-weight: 500;
|
| 198 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2');
|
| 199 |
+
unicode-range: U+0370-03FF;
|
| 200 |
+
}
|
| 201 |
+
/* vietnamese */
|
| 202 |
+
@font-face {
|
| 203 |
+
font-family: 'Roboto';
|
| 204 |
+
font-style: normal;
|
| 205 |
+
font-weight: 500;
|
| 206 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2');
|
| 207 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 208 |
+
}
|
| 209 |
+
/* latin-ext */
|
| 210 |
+
@font-face {
|
| 211 |
+
font-family: 'Roboto';
|
| 212 |
+
font-style: normal;
|
| 213 |
+
font-weight: 500;
|
| 214 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2');
|
| 215 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 216 |
+
}
|
| 217 |
+
/* latin */
|
| 218 |
+
@font-face {
|
| 219 |
+
font-family: 'Roboto';
|
| 220 |
+
font-style: normal;
|
| 221 |
+
font-weight: 500;
|
| 222 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2');
|
| 223 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 224 |
+
}
|
| 225 |
+
/* cyrillic-ext */
|
| 226 |
+
@font-face {
|
| 227 |
+
font-family: 'Roboto';
|
| 228 |
+
font-style: normal;
|
| 229 |
+
font-weight: 700;
|
| 230 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');
|
| 231 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 232 |
+
}
|
| 233 |
+
/* cyrillic */
|
| 234 |
+
@font-face {
|
| 235 |
+
font-family: 'Roboto';
|
| 236 |
+
font-style: normal;
|
| 237 |
+
font-weight: 700;
|
| 238 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');
|
| 239 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 240 |
+
}
|
| 241 |
+
/* greek-ext */
|
| 242 |
+
@font-face {
|
| 243 |
+
font-family: 'Roboto';
|
| 244 |
+
font-style: normal;
|
| 245 |
+
font-weight: 700;
|
| 246 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');
|
| 247 |
+
unicode-range: U+1F00-1FFF;
|
| 248 |
+
}
|
| 249 |
+
/* greek */
|
| 250 |
+
@font-face {
|
| 251 |
+
font-family: 'Roboto';
|
| 252 |
+
font-style: normal;
|
| 253 |
+
font-weight: 700;
|
| 254 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');
|
| 255 |
+
unicode-range: U+0370-03FF;
|
| 256 |
+
}
|
| 257 |
+
/* vietnamese */
|
| 258 |
+
@font-face {
|
| 259 |
+
font-family: 'Roboto';
|
| 260 |
+
font-style: normal;
|
| 261 |
+
font-weight: 700;
|
| 262 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');
|
| 263 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 264 |
+
}
|
| 265 |
+
/* latin-ext */
|
| 266 |
+
@font-face {
|
| 267 |
+
font-family: 'Roboto';
|
| 268 |
+
font-style: normal;
|
| 269 |
+
font-weight: 700;
|
| 270 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');
|
| 271 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 272 |
+
}
|
| 273 |
+
/* latin */
|
| 274 |
+
@font-face {
|
| 275 |
+
font-family: 'Roboto';
|
| 276 |
+
font-style: normal;
|
| 277 |
+
font-weight: 700;
|
| 278 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');
|
| 279 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 280 |
+
}
|
| 281 |
+
/* cyrillic-ext */
|
| 282 |
+
@font-face {
|
| 283 |
+
font-family: 'Roboto';
|
| 284 |
+
font-style: normal;
|
| 285 |
+
font-weight: 900;
|
| 286 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2');
|
| 287 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
| 288 |
+
}
|
| 289 |
+
/* cyrillic */
|
| 290 |
+
@font-face {
|
| 291 |
+
font-family: 'Roboto';
|
| 292 |
+
font-style: normal;
|
| 293 |
+
font-weight: 900;
|
| 294 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2');
|
| 295 |
+
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
| 296 |
+
}
|
| 297 |
+
/* greek-ext */
|
| 298 |
+
@font-face {
|
| 299 |
+
font-family: 'Roboto';
|
| 300 |
+
font-style: normal;
|
| 301 |
+
font-weight: 900;
|
| 302 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2');
|
| 303 |
+
unicode-range: U+1F00-1FFF;
|
| 304 |
+
}
|
| 305 |
+
/* greek */
|
| 306 |
+
@font-face {
|
| 307 |
+
font-family: 'Roboto';
|
| 308 |
+
font-style: normal;
|
| 309 |
+
font-weight: 900;
|
| 310 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2');
|
| 311 |
+
unicode-range: U+0370-03FF;
|
| 312 |
+
}
|
| 313 |
+
/* vietnamese */
|
| 314 |
+
@font-face {
|
| 315 |
+
font-family: 'Roboto';
|
| 316 |
+
font-style: normal;
|
| 317 |
+
font-weight: 900;
|
| 318 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2');
|
| 319 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
| 320 |
+
}
|
| 321 |
+
/* latin-ext */
|
| 322 |
+
@font-face {
|
| 323 |
+
font-family: 'Roboto';
|
| 324 |
+
font-style: normal;
|
| 325 |
+
font-weight: 900;
|
| 326 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2');
|
| 327 |
+
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
| 328 |
+
}
|
| 329 |
+
/* latin */
|
| 330 |
+
@font-face {
|
| 331 |
+
font-family: 'Roboto';
|
| 332 |
+
font-style: normal;
|
| 333 |
+
font-weight: 900;
|
| 334 |
+
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2');
|
| 335 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
| 336 |
+
}
|
lyric-generator-ja/frontend/public/index.html
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" style="overflow-y: auto">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
| 6 |
+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
| 7 |
+
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
| 8 |
+
<title>日语歌词生成器</title>
|
| 9 |
+
<link rel="stylesheet" href="font/roboto.css">
|
| 10 |
+
<link rel="stylesheet" href="font/materialdesignicons.min.css">
|
| 11 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js" integrity="sha512-qw2bX9KUhi7HLuUloyRsvxRlWJvj0u0JWVegc5tf7qsw47T0pwXZIk1Kyc0utTH3NlrpHtLa4HYTVUyHBr9Ufg==" crossorigin="anonymous"></script>
|
| 12 |
+
</head>
|
| 13 |
+
<body>
|
| 14 |
+
<noscript>
|
| 15 |
+
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
| 16 |
+
</noscript>
|
| 17 |
+
<div id="app"></div>
|
| 18 |
+
<!-- built files will be auto injected -->
|
| 19 |
+
</body>
|
| 20 |
+
</html>
|
lyric-generator-ja/frontend/src/App.vue
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<template>
|
| 2 |
+
<v-app>
|
| 3 |
+
<v-app-bar app dark color="primary">
|
| 4 |
+
<v-toolbar-title>{{i18n.title}}</v-toolbar-title>
|
| 5 |
+
<v-spacer></v-spacer>
|
| 6 |
+
<v-select style="max-width: 10rem" v-model="locale_name" @change="set_locale(locale_name)" :items="['English','Chinese']" prepend-icon="mdi-web" hide-details></v-select>
|
| 7 |
+
</v-app-bar>
|
| 8 |
+
<v-main>
|
| 9 |
+
<v-row class="mx-3">
|
| 10 |
+
<div class="col-12 offset-0 col-sm-8 offset-sm-2 col-md-8 offset-md-2 col-lg-6 offset-lg-3 col-xl-6 offset-xl-3 mt-8">
|
| 11 |
+
<v-textarea
|
| 12 |
+
v-model="prompt_title"
|
| 13 |
+
:label="i18n.input_title_label"
|
| 14 |
+
:disabled="loading"
|
| 15 |
+
rows="1"
|
| 16 |
+
prepend-icon="mdi-comment"
|
| 17 |
+
:hint="i18n.input_title_hint"
|
| 18 |
+
no-resize
|
| 19 |
+
></v-textarea>
|
| 20 |
+
<v-textarea
|
| 21 |
+
v-model="prompt_text"
|
| 22 |
+
:label="i18n.input_text_label"
|
| 23 |
+
:disabled="loading"
|
| 24 |
+
rows="2"
|
| 25 |
+
prepend-icon="mdi-comment"
|
| 26 |
+
:hint="i18n.input_text_hint"
|
| 27 |
+
no-resize
|
| 28 |
+
></v-textarea>
|
| 29 |
+
<v-row>
|
| 30 |
+
<v-checkbox class="col-6" v-model="show_romaji" :disabled="loading" @change="show_type=show_romaji?0:1" :label="i18n.show_romaji"></v-checkbox>
|
| 31 |
+
<v-scroll-x-transition>
|
| 32 |
+
<v-select class="col-6" v-if="show_romaji" v-model="romaji_system" :disabled="loading" :items="romaji_systems" :hint="i18n.romaji_system"></v-select>
|
| 33 |
+
</v-scroll-x-transition>
|
| 34 |
+
</v-row>
|
| 35 |
+
<v-row class="mt-n8">
|
| 36 |
+
<v-checkbox class="col-6" v-model="use_trans" :disabled="loading" @change="show_type=use_trans?1:0" :label="i18n.use_translate"></v-checkbox>
|
| 37 |
+
<v-scroll-x-transition>
|
| 38 |
+
<v-select class="col-6" v-if="use_trans" v-model="trans_target_lang" :disabled="loading" :items="google_supported_languages" :hint="i18n.target_lang"></v-select>
|
| 39 |
+
</v-scroll-x-transition>
|
| 40 |
+
</v-row>
|
| 41 |
+
<v-btn color="primary" class="mb-10" elevation="5" @click="do_gen()" :loading="loading" text block large tile>{{i18n.generate}}</v-btn>
|
| 42 |
+
<v-expand-transition>
|
| 43 |
+
<v-simple-table v-if="lyric.length !== 0" class="py-5" dense>
|
| 44 |
+
<template v-slot:default>
|
| 45 |
+
<thead>
|
| 46 |
+
<tr>
|
| 47 |
+
<th>{{i18n.lyric}}<v-btn class="ml-2" elevation="0" @click="copy_lyric('s')" fab x-small><v-icon>mdi-content-copy</v-icon></v-btn></th>
|
| 48 |
+
<v-scroll-x-transition>
|
| 49 |
+
<th v-if="use_trans||show_romaji">
|
| 50 |
+
<span v-if="show_romaji&&!use_trans">{{i18n.romaji}}</span>
|
| 51 |
+
<span v-if="!show_romaji&&use_trans">{{i18n.translation}}</span>
|
| 52 |
+
<v-btn v-if="use_trans&&show_romaji" class="mr-n2" elevation="0" @click="show_type=show_type===0?1:0" text small>
|
| 53 |
+
<span v-if="show_romaji" :class="{'grey--text':show_type===1}">{{i18n.romaji_s}}</span>/<span v-if="use_trans" :class="{'grey--text':show_type===0}">{{i18n.translation_s}}</span>
|
| 54 |
+
</v-btn>
|
| 55 |
+
<v-btn class="ml-2" elevation="0" @click="copy_lyric(show_type===0?'r':'t')" fab x-small><v-icon>mdi-content-copy</v-icon></v-btn>
|
| 56 |
+
</th>
|
| 57 |
+
</v-scroll-x-transition>
|
| 58 |
+
</tr>
|
| 59 |
+
</thead>
|
| 60 |
+
<tbody style="word-break: break-word; word-wrap:break-word;">
|
| 61 |
+
<tr v-for="(item, idx) in lyric" :key="idx" @mouseenter="hover=idx" @mouseleave="hover=-1">
|
| 62 |
+
<td :class="{'text-h6': idx===0, 'text-center': !item.is_lyric}">
|
| 63 |
+
{{item.s}}
|
| 64 |
+
<v-scroll-x-transition v-if="tts_support">
|
| 65 |
+
<v-btn v-if="!tts_loading&&item.s!==''&&(speaking===idx||(speaking===-1&&hover===idx))" :class="{'mr-n9':true,'blue--text':speaking===idx}" icon small @click="ja_tts(idx)">
|
| 66 |
+
<v-icon>mdi-volume-high</v-icon>
|
| 67 |
+
</v-btn>
|
| 68 |
+
</v-scroll-x-transition >
|
| 69 |
+
<v-progress-circular v-if="tts_support&&speaking===idx&&tts_loading" class="mr-n9" indeterminate size="20" width="2" color="primary"></v-progress-circular>
|
| 70 |
+
</td>
|
| 71 |
+
<v-scroll-x-transition>
|
| 72 |
+
<td v-if="use_trans||show_romaji" :class="{'text-center': !item.is_lyric}">{{show_type===0?item.r:item.t}}</td>
|
| 73 |
+
</v-scroll-x-transition>
|
| 74 |
+
</tr>
|
| 75 |
+
</tbody>
|
| 76 |
+
</template>
|
| 77 |
+
</v-simple-table>
|
| 78 |
+
</v-expand-transition>
|
| 79 |
+
</div>
|
| 80 |
+
</v-row>
|
| 81 |
+
<v-snackbar dark v-model="snackbar" :timeout="2000">
|
| 82 |
+
{{ snackbar_msg }}
|
| 83 |
+
<template v-slot:action="{ attrs }">
|
| 84 |
+
<v-btn color="blue" text v-bind="attrs" @click="snackbar = false">
|
| 85 |
+
Close
|
| 86 |
+
</v-btn>
|
| 87 |
+
</template>
|
| 88 |
+
</v-snackbar>
|
| 89 |
+
</v-main>
|
| 90 |
+
<v-footer>
|
| 91 |
+
<v-row class="ma-0">
|
| 92 |
+
<div class="text-center caption col-12 pa-0">{{i18n.footer}}</div>
|
| 93 |
+
<div class="text-center caption col-12 pa-0">© 2022 SkyTNT</div>
|
| 94 |
+
</v-row>
|
| 95 |
+
</v-footer>
|
| 96 |
+
</v-app>
|
| 97 |
+
</template>
|
| 98 |
+
|
| 99 |
+
<style lang="scss">
|
| 100 |
+
</style>
|
| 101 |
+
<script>
|
| 102 |
+
import axios from 'axios'
|
| 103 |
+
|
| 104 |
+
if (!String.prototype.trim) {
|
| 105 |
+
String.prototype.trim = function () {
|
| 106 |
+
return this.triml().trimr();
|
| 107 |
+
}
|
| 108 |
+
String.prototype.triml = function () {
|
| 109 |
+
return this.replace(/^[\s\n\t]+/g, "");
|
| 110 |
+
}
|
| 111 |
+
String.prototype.trimr = function () {
|
| 112 |
+
return this.replace(/[\s\n\t]+$/g, "");
|
| 113 |
+
}
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
function isMobile(){
|
| 117 |
+
return /(iPhone|iPad|iPod|iOS|Android|Windows Phone)/i.test(navigator.userAgent);
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
export default {
|
| 121 |
+
name: "App",
|
| 122 |
+
data:()=>({
|
| 123 |
+
locale_name: "English",
|
| 124 |
+
i18n:{},
|
| 125 |
+
use_trans: false,
|
| 126 |
+
google_supported_languages:['af', 'sq', 'am', 'ar', 'hy', 'az', 'eu', 'be', 'bn', 'bs', 'bg', 'my', 'ca', 'ca', 'ceb', 'co', 'cs', 'da', 'nl', 'nl', 'en', 'eo', 'et', 'fi', 'fr', 'fy', 'ka', 'de', 'gd', 'gd', 'ga', 'gl', 'el', 'gu', 'ht', 'ht', 'ha', 'haw', 'he', 'hi', 'hr', 'hu', 'ig', 'is', 'id', 'it', 'jw', 'ja', 'kn', 'kk', 'km', 'ky', 'ky', 'ko', 'ku', 'lo', 'la', 'lv', 'lt', 'lb', 'lb', 'mk', 'ml', 'mi', 'mr', 'ms', 'mg', 'mt', 'mn', 'ne', 'no', 'ny', 'ny', 'ny', 'or', 'pa', 'pa', 'fa', 'pl', 'pt', 'ps', 'ps', 'ro', 'ro', 'ro', 'ru', 'si', 'si', 'sk', 'sl', 'sm', 'sn', 'sd', 'so', 'st', 'es', 'es', 'sr', 'su', 'sw', 'sv', 'ta', 'te', 'tg', 'tl', 'th', 'tr', 'ug', 'ug', 'uk', 'ur', 'uz', 'vi', 'cy', 'xh', 'yi', 'yo', 'zu', 'zh-CN', 'zh-TW'],
|
| 127 |
+
trans_target_lang:"zh-CN",
|
| 128 |
+
show_romaji:false,
|
| 129 |
+
show_type:0,
|
| 130 |
+
romaji_systems:["hepburn", "kunrei", "nippon"],
|
| 131 |
+
romaji_system:"hepburn",
|
| 132 |
+
prompt_title:"桜",
|
| 133 |
+
prompt_text:"",
|
| 134 |
+
loading:false,
|
| 135 |
+
lyric:[],
|
| 136 |
+
tts_cache:{},//tts缓存
|
| 137 |
+
tts_loading:false,
|
| 138 |
+
tts_support:false,
|
| 139 |
+
speaking:-1,//正在tts的行数
|
| 140 |
+
hover:-1,//鼠标悬停的行数
|
| 141 |
+
snackbar:false,
|
| 142 |
+
snackbar_msg:""
|
| 143 |
+
}),
|
| 144 |
+
mounted() {
|
| 145 |
+
this.locale_name = (navigator.language ||navigator.userLanguage)==="zh-CN"?"Chinese":"English"
|
| 146 |
+
if(this.locale_name==="English")
|
| 147 |
+
this.trans_target_lang="en";
|
| 148 |
+
this.set_locale(this.locale_name);
|
| 149 |
+
this.loads();
|
| 150 |
+
},
|
| 151 |
+
methods:{
|
| 152 |
+
set_locale(name){
|
| 153 |
+
let locale = name==="English"?"en":"zh";
|
| 154 |
+
let langs={
|
| 155 |
+
en:{
|
| 156 |
+
title:"Japanese Lyric Generator",
|
| 157 |
+
loading:"Loading",
|
| 158 |
+
input_title_label:"Title (can be empty)",
|
| 159 |
+
input_text_label:"Beginning (can be empty)",
|
| 160 |
+
input_title_hint:"Generate lyric for a given title",
|
| 161 |
+
input_text_hint:"The generator continues with this text",
|
| 162 |
+
show_romaji:"Show romaji",
|
| 163 |
+
romaji_system:"Romaji system",
|
| 164 |
+
use_translate:"Translate",
|
| 165 |
+
target_lang:"Target language",
|
| 166 |
+
generate:"Generate!",
|
| 167 |
+
lyric:"Lyric",
|
| 168 |
+
romaji:"Romaji",
|
| 169 |
+
romaji_s:"R",
|
| 170 |
+
translation:"Translation",
|
| 171 |
+
translation_s:"T",
|
| 172 |
+
footer:"The generated content can be used as you like, please share this site if you like.",
|
| 173 |
+
copy_successful:"Copy successful",
|
| 174 |
+
error:"Error",
|
| 175 |
+
error_network:"Network error",
|
| 176 |
+
error_failed_load_kuromoji:"Failed to load romaji converter",
|
| 177 |
+
error_failed_covert_romaji:"Failed to convert lyric to romaji",
|
| 178 |
+
error_failed_translate:"Failed to translate lyric",
|
| 179 |
+
error_copy:"Copy failed, browser does not support"
|
| 180 |
+
},
|
| 181 |
+
zh:{
|
| 182 |
+
title:"日语歌词生成器",
|
| 183 |
+
loading:"加载中",
|
| 184 |
+
input_title_label:"歌词标题(可不填)",
|
| 185 |
+
input_text_label:"歌词开头(可不填)",
|
| 186 |
+
input_title_hint:"给定标题生成歌词",
|
| 187 |
+
input_text_hint:"生成器以这段文本进行续写",
|
| 188 |
+
show_romaji:"显示罗马音",
|
| 189 |
+
romaji_system:"罗马音系统",
|
| 190 |
+
use_translate:"是否进行翻译",
|
| 191 |
+
target_lang:"目标语言",
|
| 192 |
+
generate:"生成!",
|
| 193 |
+
lyric:"歌词",
|
| 194 |
+
romaji:"罗马音",
|
| 195 |
+
romaji_s:"音",
|
| 196 |
+
translation:"翻译",
|
| 197 |
+
translation_s:"译",
|
| 198 |
+
footer:"生成的内容可以随意使用,喜欢的话就请分享本网站",
|
| 199 |
+
copy_successful:"复制成功",
|
| 200 |
+
error:"错误",
|
| 201 |
+
error_network:"网络错误",
|
| 202 |
+
error_failed_load_kuromoji:"罗马音转换器加载失败",
|
| 203 |
+
error_failed_covert_romaji:"转换罗马音错误",
|
| 204 |
+
error_failed_translate:"翻译出错",
|
| 205 |
+
error_copy:"复制失败,浏览器不支持"
|
| 206 |
+
}
|
| 207 |
+
};
|
| 208 |
+
this.i18n = langs[locale];
|
| 209 |
+
},
|
| 210 |
+
async loads(){
|
| 211 |
+
if(!isMobile()){
|
| 212 |
+
eval((await axios.get('https://l2d.fab.moe/js/autoload.js')).data);
|
| 213 |
+
}
|
| 214 |
+
},
|
| 215 |
+
async do_gen(){
|
| 216 |
+
let prompt_title = this.prompt_title.trim();
|
| 217 |
+
let prompt_text = this.prompt_text.trim();
|
| 218 |
+
this.loading = true;
|
| 219 |
+
this.lyric = [];
|
| 220 |
+
this.tts_cache = {};
|
| 221 |
+
|
| 222 |
+
try {
|
| 223 |
+
let result = await axios.post("gen",
|
| 224 |
+
{title:prompt_title, text:prompt_text})
|
| 225 |
+
let gen_text = `${result.data.title}\n\n${result.data.lyric}`
|
| 226 |
+
let lines = gen_text.split('\n')
|
| 227 |
+
for (let i in lines) {
|
| 228 |
+
let line = lines[i].trim().replace(/ /g, "\u3000")
|
| 229 |
+
this.lyric.push({s: line, r: "", t: "", is_lyric: line!=="---end---"})
|
| 230 |
+
}
|
| 231 |
+
this.lyric[0].is_lyric = false; //title
|
| 232 |
+
|
| 233 |
+
try {
|
| 234 |
+
let romajis = (await axios.post("romaji",{system:this.romaji_system, text:gen_text})).data.romaji
|
| 235 |
+
romajis = romajis.split('\n')
|
| 236 |
+
for (let i in romajis) {
|
| 237 |
+
this.lyric[i].r = romajis[i]
|
| 238 |
+
}
|
| 239 |
+
}catch (e) {
|
| 240 |
+
this.show_snackbar(this.i18n.error_failed_covert_romaji+":" + e.message)
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
if (this.use_trans) {
|
| 244 |
+
let trans = await this.google_translate(gen_text);
|
| 245 |
+
if (trans !== "") {
|
| 246 |
+
trans = trans.split("\n")
|
| 247 |
+
for (let i in trans) {
|
| 248 |
+
this.lyric[i].t = trans[i].trim().replace(/ /g, "\u3000")
|
| 249 |
+
}
|
| 250 |
+
}
|
| 251 |
+
}
|
| 252 |
+
this.loading = false;
|
| 253 |
+
|
| 254 |
+
} catch (e) {
|
| 255 |
+
console.log(e)
|
| 256 |
+
this.show_snackbar(this.i18n.error+":" + e.message)
|
| 257 |
+
this.loading = false;
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
},
|
| 261 |
+
async google_translate(text){
|
| 262 |
+
let params = {client: "gtx", dt: "t", sl: "ja", tl: this.trans_target_lang, q: text};
|
| 263 |
+
try {
|
| 264 |
+
let result = await axios.get("https://translate.googleapis.com/translate_a/single",{
|
| 265 |
+
params:params
|
| 266 |
+
});
|
| 267 |
+
let out = "";
|
| 268 |
+
let lines = result.data[0];
|
| 269 |
+
for(let i in lines)
|
| 270 |
+
out += lines[i][0];
|
| 271 |
+
return out;
|
| 272 |
+
}catch(e){
|
| 273 |
+
this.show_snackbar(this.i18n.error_failed_translate+":"+e.message);
|
| 274 |
+
}
|
| 275 |
+
return "";
|
| 276 |
+
},
|
| 277 |
+
async ja_tts(line){
|
| 278 |
+
let text = this.lyric[line].s;
|
| 279 |
+
if(this.speaking !== -1||text === ""){
|
| 280 |
+
return;
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
this.speaking = line;
|
| 284 |
+
try{
|
| 285 |
+
let context = new AudioContext();
|
| 286 |
+
let gain = context.createGain();
|
| 287 |
+
gain.gain.value=2;
|
| 288 |
+
if(this.tts_cache[text] === undefined){
|
| 289 |
+
this.tts_loading=true;
|
| 290 |
+
let audio_query = (await axios.post("https://voicevox-skytnt.cloud.okteto.net/audio_query",null,
|
| 291 |
+
{params:{speaker:4,text:text}})).data;
|
| 292 |
+
let wave = (await axios.post("https://voicevox-skytnt.cloud.okteto.net/synthesis",audio_query,
|
| 293 |
+
{params:{speaker:4},responseType:"arraybuffer"})).data;
|
| 294 |
+
this.tts_loading=false;
|
| 295 |
+
this.tts_cache[text] = await context.decodeAudioData(wave);
|
| 296 |
+
}
|
| 297 |
+
let source = context.createBufferSource();
|
| 298 |
+
source.buffer = this.tts_cache[text];
|
| 299 |
+
source.loop = false;
|
| 300 |
+
source.connect(gain);
|
| 301 |
+
gain.connect(context.destination);
|
| 302 |
+
await new Promise((resolve) => {
|
| 303 |
+
source.onended = () => {resolve()}
|
| 304 |
+
source.start(0);//立即播放
|
| 305 |
+
});
|
| 306 |
+
}catch (e) {
|
| 307 |
+
this.show_snackbar(this.i18n.error+":"+e.message)
|
| 308 |
+
}
|
| 309 |
+
this.speaking = -1;
|
| 310 |
+
this.tts_loading=false;//防止网络出错导致tts_loading为true
|
| 311 |
+
},
|
| 312 |
+
copy_lyric(attr_name){
|
| 313 |
+
let text = ""
|
| 314 |
+
for(let i in this.lyric){
|
| 315 |
+
text += this.lyric[i][attr_name] + "\n"
|
| 316 |
+
}
|
| 317 |
+
text = text.trim()
|
| 318 |
+
this.copy(text)
|
| 319 |
+
},
|
| 320 |
+
async copy(text){
|
| 321 |
+
try {
|
| 322 |
+
await navigator.clipboard.writeText(text)
|
| 323 |
+
this.show_snackbar(this.i18n.copy_successful)
|
| 324 |
+
}catch (e) {
|
| 325 |
+
let input = document.createElement('textarea')
|
| 326 |
+
input.style.position = 'fixed'
|
| 327 |
+
input.style.top = '-10000px'
|
| 328 |
+
input.style.zIndex = '-999'
|
| 329 |
+
document.body.appendChild(input)
|
| 330 |
+
console.log('input', input)
|
| 331 |
+
input.value = text
|
| 332 |
+
input.focus()
|
| 333 |
+
input.select()
|
| 334 |
+
try {
|
| 335 |
+
let result = document.execCommand('copy')
|
| 336 |
+
if (!result || result === 'unsuccessful') {
|
| 337 |
+
this.show_snackbar(this.i18n.error_copy)
|
| 338 |
+
} else {
|
| 339 |
+
this.show_snackbar(this.i18n.copy_successful)
|
| 340 |
+
}
|
| 341 |
+
} catch (e) {
|
| 342 |
+
this.show_snackbar(this.i18n.error_copy)
|
| 343 |
+
}finally {
|
| 344 |
+
document.body.removeChild(input)
|
| 345 |
+
}
|
| 346 |
+
}
|
| 347 |
+
},
|
| 348 |
+
show_snackbar(msg){
|
| 349 |
+
this.snackbar=true;
|
| 350 |
+
this.snackbar_msg=msg;
|
| 351 |
+
}
|
| 352 |
+
}
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
</script>
|
lyric-generator-ja/frontend/src/main.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import Vue from 'vue'
|
| 2 |
+
import App from './App.vue'
|
| 3 |
+
import vuetify from './plugins/vuetify'
|
| 4 |
+
import router from './router'
|
| 5 |
+
|
| 6 |
+
Vue.config.productionTip = false
|
| 7 |
+
|
| 8 |
+
new Vue({
|
| 9 |
+
vuetify,
|
| 10 |
+
router,
|
| 11 |
+
render: h => h(App)
|
| 12 |
+
}).$mount('#app')
|
lyric-generator-ja/frontend/src/plugins/vuetify.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import Vue from 'vue';
|
| 2 |
+
import Vuetify from 'vuetify/lib/framework';
|
| 3 |
+
|
| 4 |
+
Vue.use(Vuetify);
|
| 5 |
+
|
| 6 |
+
export default new Vuetify({
|
| 7 |
+
});
|
lyric-generator-ja/frontend/src/router/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import Vue from 'vue'
|
| 2 |
+
import VueRouter from 'vue-router'
|
| 3 |
+
|
| 4 |
+
Vue.use(VueRouter)
|
| 5 |
+
|
| 6 |
+
const routes = [
|
| 7 |
+
// {
|
| 8 |
+
// path: '/',
|
| 9 |
+
// name: 'Home',
|
| 10 |
+
// component: Home
|
| 11 |
+
// }
|
| 12 |
+
]
|
| 13 |
+
|
| 14 |
+
const router = new VueRouter({
|
| 15 |
+
routes
|
| 16 |
+
})
|
| 17 |
+
|
| 18 |
+
export default router
|
lyric-generator-ja/frontend/vue.config.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
module.exports = {
|
| 2 |
+
transpileDependencies: [
|
| 3 |
+
'vuetify'
|
| 4 |
+
],
|
| 5 |
+
publicPath: '',
|
| 6 |
+
productionSourceMap: false
|
| 7 |
+
}
|
lyric-generator-ja/frontend/yarn.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
lyric-generator-ja/requirements.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
flask
|
| 2 |
+
torch
|
| 3 |
+
transformers
|
| 4 |
+
sentencepiece
|
| 5 |
+
unidic-lite
|
| 6 |
+
cutlet
|