Skip to content

Commit

Permalink
Update: AivisHub の音声合成モデル詳細ページの URL が渡された場合、特別に AivisHub API を使い AIVM…
Browse files Browse the repository at this point in the history
…X ファイルをダウンロードする
  • Loading branch information
tsukumijima committed Jan 3, 2025
1 parent 02111f7 commit a895c13
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
2 changes: 1 addition & 1 deletion resources/engine_manifest_assets/dependency_licenses.json

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions voicevox_engine/aivm_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import asyncio
import glob
import hashlib
import re
from io import BytesIO
from pathlib import Path
from threading import Thread
Expand Down Expand Up @@ -643,6 +644,26 @@ def install_aivm_from_url(self, url: str) -> None:
AIVMX ファイルの URL
"""

# AivisHub の音声合成モデル詳細ページの URL が渡された場合、特別に AivisHub API を使い AIVMX ファイルをダウンロードする
if url.startswith("https://hub.aivis-project.com/aivm-models/"):
# URL から AIVM の UUID を抽出
uuid_match = re.search(
r"/aivm-models/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
url.lower(),
)
if not uuid_match:
raise HTTPException(
status_code=422,
detail="Invalid AivisHub URL.",
)
# group(0) は一致した文字列全体なので、group(1) で UUID 部分のみを取得
aivm_uuid = uuid_match.group(1)
# AIVMX ダウンロード用の API の URL に置き換え
url = f"{self.AIVISHUB_API_BASE_URL}/aivm-models/{aivm_uuid}/download?model_type=AIVMX"
logger.info(
f"Detected AivisHub model page URL. Using download API URL: {url}"
)

# URL から AIVMX ファイルをダウンロード
try:
logger.info(f"Downloading AIVMX file from {url}...")
Expand Down
6 changes: 3 additions & 3 deletions voicevox_engine/user_dict/user_dict_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,19 +308,19 @@ def rewrite_word(self, word_uuid: str, word_property: WordProperty) -> None:
# 既存単語の上書きによる辞書データの更新
user_dict = self.read_dict()
if word_uuid not in user_dict:
raise UserDictInputError("UUIDに該当するワードが見つかりませんでした")
raise UserDictInputError("UUID に該当する単語が見つかりませんでした")
user_dict[word_uuid] = create_word(word_property)

# 更新された辞書データの保存と適用
self._write_to_json(user_dict)
self.update_dict()

def delete_word(self, word_uuid: str) -> None:
"""単語UUIDで指定された単語を削除する。"""
"""単語 UUID で指定された単語を削除する。"""
# 既存単語の削除による辞書データの更新
user_dict = self.read_dict()
if word_uuid not in user_dict:
raise UserDictInputError("IDに該当するワードが見つかりませんでした")
raise UserDictInputError("UUID に該当する単語が見つかりませんでした")
del user_dict[word_uuid]

# 更新された辞書データの保存と適用
Expand Down

0 comments on commit a895c13

Please sign in to comment.