diff --git a/src/components/EngineStartupOverlay.vue b/src/components/EngineStartupOverlay.vue new file mode 100644 index 0000000000..ba78ca8048 --- /dev/null +++ b/src/components/EngineStartupOverlay.vue @@ -0,0 +1,126 @@ + + + + diff --git a/src/components/Sing/CharacterMenuButton.vue b/src/components/Sing/CharacterMenuButton/MenuButton.vue similarity index 93% rename from src/components/Sing/CharacterMenuButton.vue rename to src/components/Sing/CharacterMenuButton/MenuButton.vue index a9e8b32598..0c9ff8165d 100644 --- a/src/components/Sing/CharacterMenuButton.vue +++ b/src/components/Sing/CharacterMenuButton/MenuButton.vue @@ -1,6 +1,10 @@ + + + diff --git a/src/components/Sing/SingEditor.vue b/src/components/Sing/SingEditor.vue index e6df509cc2..59f45a43ec 100644 --- a/src/components/Sing/SingEditor.vue +++ b/src/components/Sing/SingEditor.vue @@ -2,6 +2,7 @@
+
@@ -34,6 +35,7 @@ import { DEFAULT_BPM, DEFAULT_TPQN, } from "@/sing/storeHelper"; +import EngineStartupOverlay from "@/components/EngineStartupOverlay.vue"; import { useStore } from "@/store"; const props = withDefaults( @@ -121,6 +123,7 @@ const unwatchIsEnginesReady = watch( .sing-main { display: flex; overflow: hidden; + position: relative; } .exporting-dialog { diff --git a/src/components/Sing/ToolBar.vue b/src/components/Sing/ToolBar.vue index b548367df9..f09484274f 100644 --- a/src/components/Sing/ToolBar.vue +++ b/src/components/Sing/ToolBar.vue @@ -2,30 +2,7 @@
- -
- - - -
-
- {{ selectedCharacterName }} -
-
- {{ selectedCharacterStyleDescription }} -
-
- -
-
+ - store.getters.USER_ORDERED_CHARACTER_INFOS("singerLike") -); -const selectedCharacterInfo = computed(() => { - const singer = store.getters.SELECTED_TRACK.singer; - if (!userOrderedCharacterInfos.value || !singer) { - return undefined; - } - return store.getters.CHARACTER_INFO(singer.engineId, singer.styleId); -}); -const selectedCharacterName = computed(() => { - return selectedCharacterInfo.value?.metas.speakerName; -}); -const selectedCharacterStyleDescription = computed(() => { - const style = selectedCharacterInfo.value?.metas.styles.find((style) => { - const singer = store.getters.SELECTED_TRACK.singer; - return ( - style.styleId === singer?.styleId && style.engineId === singer?.engineId - ); - }); - return style != undefined ? getStyleDescription(style) : ""; -}); -const selectedStyleIconPath = computed(() => { - const styles = selectedCharacterInfo.value?.metas.styles; - const singer = store.getters.SELECTED_TRACK.singer; - return styles?.find((style) => { - return ( - style.styleId === singer?.styleId && style.engineId === singer?.engineId - ); - })?.iconPath; -}); - const tempos = computed(() => store.state.tempos); const timeSignatures = computed(() => store.state.timeSignatures); const keyShift = computed(() => store.getters.SELECTED_TRACK.voiceKeyShift); @@ -377,46 +321,6 @@ onUnmounted(() => { } } -.character-menu-toggle { - align-items: center; - display: flex; - padding: 4px 8px 8px 8px; - position: relative; -} -.character-avatar-icon { - display: block; - height: 100%; - object-fit: cover; - width: 100%; -} - -.character-info { - align-items: start; - display: flex; - flex-direction: column; - margin-left: 0.5rem; - text-align: left; - justify-content: center; - white-space: nowrap; -} -.character-name { - font-size: 0.875rem; - font-weight: bold; - line-height: 1rem; - padding-top: 4px; -} - -.character-style { - color: rgba(colors.$display-rgb, 0.73); - font-size: 11px; - line-height: 1rem; - vertical-align: text-bottom; -} - -.character-menu-dropdown-icon { - color: rgba(colors.$display-rgb, 0.73); - margin-left: 0.25rem; -} .sing-toolbar { background: colors.$sing-toolbar; align-items: center; diff --git a/src/components/Talk/TalkEditor.vue b/src/components/Talk/TalkEditor.vue index 54e996276d..2a1289343f 100644 --- a/src/components/Talk/TalkEditor.vue +++ b/src/components/Talk/TalkEditor.vue @@ -7,45 +7,10 @@ + - - -
-
- エンジンの起動に失敗しました。エンジンの再起動をお試しください。 -
-
-
-
- -
- {{ - allEngineState === "STARTING" - ? "エンジン起動中・・・" - : "データ準備中・・・" - }} -
- - -
-
store.state.audioKeys); const uiLocked = computed(() => store.getters.UI_LOCKED); -const reloadingLocked = computed(() => store.state.reloadingLock); - -const isMultipleEngine = computed(() => store.state.engineIds.length > 1); // hotkeys handled by Mousetrap const hotkeyMap = new Map HotkeyReturnType>([ @@ -594,47 +557,6 @@ const unwatchIsEnginesReady = watch( } ); -// エンジン待機 -// TODO: 個別のエンジンの状態をUIで確認できるようにする -const allEngineState = computed(() => { - const engineStates = store.state.engineStates; - - let lastEngineState: EngineState | undefined = undefined; - - // 登録されているすべてのエンジンについて状態を確認する - for (const engineId of store.state.engineIds) { - const engineState: EngineState | undefined = engineStates[engineId]; - if (engineState == undefined) - throw new Error(`No such engineState set: engineId == ${engineId}`); - - // FIXME: 1つでも接続テストに成功していないエンジンがあれば、暫定的に起動中とする - if (engineState === "STARTING") { - return engineState; - } - - lastEngineState = engineState; - } - - return lastEngineState; // FIXME: 暫定的に1つのエンジンの状態を返す -}); - -const isEngineWaitingLong = ref(false); -let engineTimer: number | undefined = undefined; -watch(allEngineState, (newEngineState) => { - if (engineTimer != undefined) { - clearTimeout(engineTimer); - engineTimer = undefined; - } - if (newEngineState === "STARTING") { - isEngineWaitingLong.value = false; - engineTimer = window.setTimeout(() => { - isEngineWaitingLong.value = true; - }, 30000); - } else { - isEngineWaitingLong.value = false; - } -}); - // 代替ポート情報の変更を監視 watch( () => [store.state.altPortInfos, store.state.isVuexReady], @@ -660,17 +582,6 @@ watch( } ); -const reloadAppWithMultiEngineOffMode = () => { - store.dispatch("CHECK_EDITED_AND_NOT_SAVE", { - closeOrReload: "reload", - isMultiEngineOffMode: true, - }); -}; - -const openQa = () => { - window.open("https://voicevox.hiroshiba.jp/qa/", "_blank"); -}; - // ライセンス表示 const isHelpDialogOpenComputed = computed({ get: () => store.state.isHelpDialogOpen, @@ -864,24 +775,6 @@ const onAudioCellPaneClick = () => { } } -.waiting-engine { - background-color: rgba(colors.$display-rgb, 0.15); - position: absolute; - inset: 0; - z-index: 10; - display: flex; - text-align: center; - align-items: center; - justify-content: center; - - > div { - color: colors.$display; - background: colors.$surface; - border-radius: 6px; - padding: 14px; - } -} - .main-row-panes { flex-grow: 1; flex-shrink: 1;