Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

マルチトラック:デフォルトで有効にする #2285

Merged
merged 13 commits into from
Oct 8, 2024
Merged
39 changes: 8 additions & 31 deletions src/components/Dialog/ImportSongProjectDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,10 @@
>
<QItemSection avatar>
<QCheckbox
v-if="multiTrackEnabled"
v-model="selectedTrackIndexes"
:val="track.value"
:disable="track.disable"
/>
<QRadio
v-else
v-model="selectedTrackIndex"
:val="track.value"
:disable="track.disable"
/>
</QItemSection>
<QItemSection>
<QItemLabel>
Expand Down Expand Up @@ -117,10 +110,6 @@ const { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent();
const store = useStore();
const log = createLogger("ImportExternalProjectDialog");

const multiTrackEnabled = computed(
() => store.state.experimentalSetting.enableMultiTrack,
);

// 受け入れる拡張子
const acceptExtensions = computed(
() => supportedExtensions.map((ext) => `.${ext}`).join(",") + ",.vvproj",
Expand Down Expand Up @@ -243,23 +232,6 @@ const trackOptions = computed(() => {
});
// 選択中のトラック
const selectedTrackIndexes = ref<number[] | null>(null);
const selectedTrackIndex = computed<number | null>({
get: () => {
if (selectedTrackIndexes.value == null) {
return null;
}
if (selectedTrackIndexes.value.length === 0) {
return null;
}
return selectedTrackIndexes.value[0];
},
set: (index: number | null) => {
if (index == null) {
throw new Error("assert: index != null");
}
selectedTrackIndexes.value = [index];
},
});

// データ初期化
const initializeValues = () => {
Expand Down Expand Up @@ -328,23 +300,28 @@ const handleFileChange = async (event: Event) => {
};

// トラックインポート実行時
const handleImportTrack = () => {
const handleImportTrack = async () => {
// ファイルまたは選択中のトラックが未設定の場合はエラー
if (project.value == null || selectedTrackIndexes.value == null) {
throw new Error("project or selected track is not set");
}
// トラックをインポート
if (project.value.type === "vvproj") {
void store.dispatch("COMMAND_IMPORT_VOICEVOX_PROJECT", {
await store.dispatch("COMMAND_IMPORT_VOICEVOX_PROJECT", {
project: project.value.project,
trackIndexes: selectedTrackIndexes.value,
});
} else {
void store.dispatch("COMMAND_IMPORT_UTAFORMATIX_PROJECT", {
await store.dispatch("COMMAND_IMPORT_UTAFORMATIX_PROJECT", {
project: project.value.project,
trackIndexes: selectedTrackIndexes.value,
});
}

// 自動でトラック一覧を開く
void store.dispatch("SET_SONG_SIDEBAR_OPEN", {
isSongSidebarOpen: true,
});
onDialogOK();
};

Expand Down
98 changes: 22 additions & 76 deletions src/components/Dialog/SettingDialog/SettingDialog.vue
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここ @takusea さんのPRと被ってそうなのでご報告です 🙏

変更点は2つです。

  1. 「ソング:マルチトラック機能」のセルが消えた
  2. experimentalSetting.enableMultiTrackで表示を切り替えていたのが消えた

Original file line number Diff line number Diff line change
Expand Up @@ -59,24 +59,10 @@
}}はCPU版のためGPUモードを利用できません。
</QTooltip>
</ButtonToggleCell>
<QCardActions class="q-px-md bg-surface">
<div>音声のサンプリングレート</div>
<div
aria-label="再生と保存時の音声のサンプリングレートを変更できます(サンプリングレートを上げても音声の品質は上がりません)。"
>
<QIcon name="help_outline" size="sm" class="help-hover-icon">
<QTooltip
:delay="500"
anchor="center right"
self="center left"
transitionShow="jump-right"
transitionHide="jump-left"
>
再生・保存時の音声のサンプリングレートを変更できます(サンプリングレートを上げても音声の品質は上がりません)。
</QTooltip>
</QIcon>
</div>
<QSpace />
<BaseCell
title="音声のサンプリングレート"
description="再生と保存時の音声のサンプリングレートを変更できます(サンプリングレートを上げても音声の品質は上がりません)。"
>
<QSelect
v-model="outputSamplingRate"
borderless
Expand All @@ -86,7 +72,7 @@
:optionLabel="renderSamplingRateLabel"
>
</QSelect>
</QCardActions>
</BaseCell>
</QCard>
<!-- Preservation Setting -->
<QCard flat class="setting-card">
Expand Down Expand Up @@ -371,19 +357,12 @@
"
/>

<QSlideTransition>
<!-- q-slide-transitionはheightだけをアニメーションするのでdivで囲う -->
<div v-show="experimentalSetting.enableMultiTrack">
<EditButtonCell
title="ソング:トラックファイル名パターン"
description="書き出す際のファイル名のパターンをカスタマイズできます。"
:currentValue="savingSetting.songTrackFileNamePattern"
@buttonClick="
showSongTrackAudioFilePatternEditDialog = true
"
/>
</div>
</QSlideTransition>
<EditButtonCell
title="ソング:トラックファイル名パターン"
description="書き出す際のファイル名のパターンをカスタマイズできます。"
:currentValue="savingSetting.songTrackFileNamePattern"
@buttonClick="showSongTrackAudioFilePatternEditDialog = true"
/>
</QCard>
<!-- Theme Card -->
<QCard flat class="setting-card">
Expand Down Expand Up @@ -471,22 +450,17 @@
>
</QSelect>
</QCardActions>
<QSlideTransition>
<!-- q-slide-transitionはheightだけをアニメーションするのでdivで囲う -->
<div v-show="experimentalSetting.enableMultiTrack">
<BaseCell
title="ソング:元に戻すトラック操作"
description="「元に戻す」機能の対象とするトラック操作を指定します。"
>
<QOptionGroup
v-model="undoableTrackOperations"
type="checkbox"
:options="undoableTrackOperationsLabels"
inline
/>
</BaseCell>
</div>
</QSlideTransition>
<BaseCell
title="ソング:元に戻すトラック操作"
description="「元に戻す」機能の対象とするトラック操作を指定します。"
>
<QOptionGroup
v-model="undoableTrackOperations"
type="checkbox"
:options="undoableTrackOperationsLabels"
inline
/>
</BaseCell>
</QCard>

<!-- Experimental Card -->
Expand Down Expand Up @@ -534,17 +508,6 @@
)
"
/>
<ToggleCell
title="ソング:マルチトラック機能"
description="ONの場合、1つのプロジェクト内に複数のトラックを作成できるようにします。"
:modelValue="experimentalSetting.enableMultiTrack"
:disable="!canToggleMultiTrack"
@update:modelValue="setMultiTrack($event)"
>
<QTooltip v-if="!canToggleMultiTrack" :delay="500">
現在のプロジェクトに複数のトラックが存在するため、無効化できません。
</QTooltip>
</ToggleCell>
</QCard>
<QCard flat class="setting-card">
<QCardActions>
Expand Down Expand Up @@ -939,23 +902,6 @@ const selectedEngineId = computed({
const renderEngineNameLabel = (engineId: EngineId) => {
return engineInfos.value[engineId].name;
};

// トラックが複数あるときはマルチトラック機能を無効化できないようにする
const canToggleMultiTrack = computed(() => {
if (!experimentalSetting.value.enableMultiTrack) {
return true;
}

return store.state.tracks.size <= 1;
});

const setMultiTrack = (enableMultiTrack: boolean) => {
void changeExperimentalSetting("enableMultiTrack", enableMultiTrack);
// 無効化するときはUndo/Redoをクリアする
if (!enableMultiTrack) {
void store.dispatch("CLEAR_UNDO_HISTORY");
}
};
</script>

<style scoped lang="scss">
Expand Down
6 changes: 1 addition & 5 deletions src/components/Sing/SingEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,7 @@ const props = defineProps<{

const store = useStore();

const isSidebarOpen = computed(
() =>
store.state.experimentalSetting.enableMultiTrack &&
store.state.isSongSidebarOpen,
);
const isSidebarOpen = computed(() => store.state.isSongSidebarOpen);
const sidebarWidth = ref(300);

const setSidebarWidth = (width: number) => {
Expand Down
5 changes: 0 additions & 5 deletions src/components/Sing/ToolBar/ToolBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
<!-- configs for entire song -->
<div class="sing-configs">
<QBtn
v-if="multiTrackEnabled"
class="q-mr-sm"
:icon="isSidebarOpen ? 'menu_open' : 'menu'"
round
Expand Down Expand Up @@ -189,10 +188,6 @@ const editor = "song";
const canUndo = computed(() => store.getters.CAN_UNDO(editor));
const canRedo = computed(() => store.getters.CAN_REDO(editor));

const multiTrackEnabled = computed(
() => store.state.experimentalSetting.enableMultiTrack,
);

const { registerHotkeyWithCleanup } = useHotkeyManager();
registerHotkeyWithCleanup({
editor,
Expand Down
58 changes: 27 additions & 31 deletions src/components/Sing/menuBarData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,37 +35,33 @@ export const useMenuBarData = () => {
await store.dispatch("EXPORT_STEM_WAVE_FILE", {});
};

const fileSubMenuData = computed<MenuItemData[]>(() =>
(
[
{
type: "button",
label: "音声を出力",
onClick: () => {
void exportWaveFile();
},
disableWhenUiLocked: true,
},
store.state.experimentalSetting.enableMultiTrack && {
type: "button",
label: "トラックごとに音声を出力",
onClick: () => {
void exportStemWaveFile();
},
disableWhenUiLocked: true,
},
{ type: "separator" },
{
type: "button",
label: "インポート",
onClick: () => {
void importExternalSongProject();
},
disableWhenUiLocked: true,
},
] satisfies (MenuItemData | false)[]
).filter((item) => !!item),
);
const fileSubMenuData = computed<MenuItemData[]>(() => [
{
type: "button",
label: "音声を出力",
onClick: () => {
void exportWaveFile();
},
disableWhenUiLocked: true,
},
{
type: "button",
label: "トラックごとに音声を出力",
onClick: () => {
void exportStemWaveFile();
},
disableWhenUiLocked: true,
},
{ type: "separator" },
{
type: "button",
label: "インポート",
onClick: () => {
void importExternalSongProject();
},
disableWhenUiLocked: true,
},
]);

const editSubMenuData = computed<MenuItemData[]>(() => [
{ type: "separator" },
Expand Down
17 changes: 2 additions & 15 deletions src/store/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ export const projectStore = createPartialStore<ProjectStoreTypes>({
*/
action: createUILockAction(
async (
{ actions, mutations, state, getters },
{ actions, mutations, getters },
{ filePath, confirm }: { filePath?: string; confirm?: boolean },
) => {
if (!filePath) {
Expand Down Expand Up @@ -197,20 +197,6 @@ export const projectStore = createPartialStore<ProjectStoreTypes>({
projectJson: text,
});

if (
!state.experimentalSetting.enableMultiTrack &&
parsedProjectData.song.trackOrder.length > 1
) {
await window.backend.showMessageDialog({
type: "error",
title: "エラー",
message:
"このプロジェクトはマルチトラック機能を使用して作成されていますが、現在の設定ではマルチトラック機能を使用できません。\n" +
"設定の「ソング:マルチトラック機能」を有効にしてからプロジェクトを読み込んでください。",
});
return false;
}

if (confirm !== false && getters.IS_EDITED) {
const result = await actions.SAVE_OR_DISCARD_PROJECT_FILE({
additionalMessage:
Expand All @@ -226,6 +212,7 @@ export const projectStore = createPartialStore<ProjectStoreTypes>({

mutations.SET_PROJECT_FILEPATH({ filePath });
void actions.CLEAR_UNDO_HISTORY();
void actions.SET_SONG_SIDEBAR_OPEN({ isSongSidebarOpen: true });
return true;
} catch (err) {
window.backend.logError(err);
Expand Down
1 change: 0 additions & 1 deletion src/store/setting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ export const settingStoreState: SettingStoreState = {
enableMorphing: false,
enableMultiSelect: false,
shouldKeepTuningOnTextChange: false,
enableMultiTrack: false,
},
splitTextWhenPaste: "PERIOD_AND_NEW_LINE",
splitterPosition: {
Expand Down
Loading
Loading