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

ファイルの書き出し時の名前設定にプロジェクトファイル名を含められるようにする #2137

Merged

Conversation

jdkfx
Copy link
Contributor

@jdkfx jdkfx commented Jun 27, 2024

内容

  • 設定で書き出しファイル名パターンにプロジェクトファイル名を設定できるようにしました
    • プロジェクトファイル名がない場合、ある場合のそれぞれに対応させました
    • プロジェクトファイル名がない場合は空文字にしています
  • READMEの軽微な修正をしました

関連 Issue

close #2075
close #2136

スクリーンショット・動画など

画像1
スクリーンショット 2024-06-27 13 30 35

画像2
スクリーンショット 2024-06-27 13 31 27

画像1の書き出しファイル名パターンを使用し、音声を書き出した際、

  • 画像2における001_.wavはプロジェクトファイル名を設定していない音声ファイル
  • 画像2における001_開発テスト用.wav002_開発テスト用.wavはプロジェクトファイル名を設定した上で書き出したファイル
    となっています。

その他

@jdkfx jdkfx requested a review from a team as a code owner June 27, 2024 04:37
@jdkfx jdkfx requested review from Hiroshiba and removed request for a team June 27, 2024 04:37
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

PRありがとうございます!!

@@ -342,12 +352,14 @@ export function buildAudioFileNameFromRawData(
const index = (vars.index + 1).toString().padStart(3, "0");
const styleName = sanitizeFileName(vars.styleName);
const date = vars.date;
const projectName = removeExtension(store.getters.PROJECT_NAME);
Copy link
Member

Choose a reason for hiding this comment

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

あ! store->utilityへの参照がすでにあるので、可能ならutility->storeへの参照は避けられると嬉しそうです!
(プログラミング的に言うと、依存関係を綺麗にしておきたい感じです)

buildAudioFileNameFromRawDatavarsprojectName的なのを増やし、buildAudioFileNameFromRawDataを呼んでいるところでstore.getters.PROJECT_NAMEを使ってvarsprojectNameをいれるとかどうでしょう?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

store->utilityへの参照がすでにあるので、可能ならutility->storeへの参照は避けられると嬉しそうです!
(プログラミング的に言うと、依存関係を綺麗にしておきたい感じです)

こちらについては依存関係について把握していなかったため、

import { store } from "./index";

は削除します。

buildAudioFileNameFromRawDataのvarsにprojectName的なのを増やし

varsDEFAULT_AUDIO_FILE_NAME_VARIABLESが代入されているので、DEFAULT_AUDIO_FILE_NAME_VARIABLESに以下のような形でprojectNameを増やします。

const DEFAULT_AUDIO_FILE_NAME_VARIABLES = {
  index: 0,
  characterName: "四国めたん",
  text: "テキストテキストテキスト",
  styleName: DEFAULT_STYLE_NAME,
  date: currentDateString(),
  projectName: "VOICEVOXプロジェクト",
};

buildAudioFileNameFromRawDataを呼んでいるところでstore.getters.PROJECT_NAMEを使ってvarsにprojectNameをいれるとかどうでしょう?

この件に関しては、src/store/audio.tsのように、buildAudioFileNameFromRawDataを呼び出している箇所で

const projectName = getter.projectName;

      return buildAudioFileNameFromRawData(fileNamePattern, {
        characterName: character.metas.speakerName,
        index,
        styleName,
        text: audioItem.text,
        date: currentDateString(),
        projectName,
      });

のような形をとるのかな?と考えております。

実際に動かしていないので動くかどうかは分からないのですが、考え方というか認識がこれであっているのか確認させていただきたいです。

Copy link
Member

Choose a reason for hiding this comment

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

あ、ですです! 多分あってると思います!!

Comment on lines 150 to 156
/**
* 書き出しファイルにプロジェクトファイル名を拡張子を取り除いて追加する
*/
export function removeExtension(projectNameWithExtension?: string): string {
const projectName = projectNameWithExtension?.replace(".vvproj", "") ?? "";
return projectName;
}
Copy link
Member

Choose a reason for hiding this comment

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

ほかで使う機会は今のところなさそう?なので、関数にせずconst projectName = removeExtension(store.getters.PROJECT_NAME);の部分に組み込んでしまっても良いかも?

というよりそもそもgetters.PROJECT_NAMEが拡張子なしの値を返すべきな気がしますね!!
ちょっとこっちはDiscordで意見募集してみます。とりあえず拡張子ありの実装で進めていただけると・・・! 🙇

Copy link
Member

Choose a reason for hiding this comment

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

お待たせしました!

とりあえず今の拡張子を返す方をPROJECT_NAME_WITH_EXTに名前変更して、別でPROJECT_NAMEを作ってそっちは拡張子なしのを返すとかどうでしょう!
プロジェクトファイルを拡張子が複数になった時、拡張子があった方が便利な時もあるな~と。
で、ファイル名パターンはPROJECT_NAMEの方を使う感じに・・・!

もしその更新の場合、ファイル全体検索した感じPROJECT_NAMEを使ってる箇所が一箇所だけあったのでそちらも変更が必要かもです。
ちなみにそっちは拡張子なしの方を必要としてそうでした・・・!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

こちらについて、認識が合っているのか確認したいため、質問させていただきたいです。

  • 現状あるPROJECT_NAMEは拡張子が無しのものにする。
  • PROJECT_NAME_WITH_EXTを新しく作成する。中身は現状のPROJECT_NAMEと同じものである。
  • 拡張子を除いたPROJECT_NAMEを返すために関数をどこかに書く必要がある。
  • PROJECT_NAMEを返すための関数はPR内で書いたremoveExtension()を利用する。

ということであっていますでしょうか?

また、現状VOICEVOX全体のコードを追えることができず、拡張子を除いたPROJECT_NAMEを返すための関数をかいてもいいコードの場所がどこにあたるのか分からないのですが、ここに書くといいという場所がありましたら教えていただきたいです。

Copy link
Member

@Hiroshiba Hiroshiba Jun 28, 2024

Choose a reason for hiding this comment

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

あっ分かりづらくてすみません!!

src\store\project.tsPROJECT_NAMEPROJECT_NAME_WITH_EXTの実装を書いて、
src\store\type.tsPROJECT_NAMEPROJECT_NAME_WITH_EXTの型を書く感じになると思います!

removeExtensionはおそらくここでしか使わないので、関数のコードをPROJECT_NAME内に移動するとスリムかもです!
雰囲気、実装はこんな感じ・・・?

export const projectStore = createPartialStore<ProjectStoreTypes>({
  PROJECT_NAME_WITH_EXT: {
    getter(state) {
      return state.projectFilePath
        ? getBaseName(state.projectFilePath)
        : undefined;
    },
  },

  PROJECT_NAME: {
    getter(state) {
      return state.projectFilePath
        ? getBaseName(state.projectFilePath).replace(".vvproj", "")
        : undefined;
    },
  },

不明な点あれば何でも聞いてください・・・! 🙏

@jdkfx
Copy link
Contributor Author

jdkfx commented Jun 29, 2024

@Hiroshiba
レビュー後の修正内容として、下記の実装を行いました。

  • 依存関係の修正
  • buildAudioFileNameFromRawDataを呼び出している箇所でprojectNameを追加
  • 既存のPROJECT_NAMEを拡張子なしのものに
  • PROJECT_NAME_WITH_EXTを新しく追加

出力結果はPRの画像2と変わりません。
再度、レビューをお願いいたします。

@jdkfx jdkfx requested a review from Hiroshiba June 29, 2024 14:33
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

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

LGTM!!!

変更ありがとうございました!!!
分からないところを聞いてくださったのがとても嬉しかったです・・・!!

微調整としてこちらでちょっと変更させていただきます!

もしよかったらまたプルリクエストお待ちしています!!!

Comment on lines 1223 to 1225

const projectName = getters.PROJECT_NAME ?? "";

Copy link
Member

Choose a reason for hiding this comment

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

(細かいですが)

ここは意味がまとまってるので空行はない方がいいかもです!
まあ人によりそうですが・・・!

Suggested change
const projectName = getters.PROJECT_NAME ?? "";
const projectName = getters.PROJECT_NAME ?? "";

@@ -1220,12 +1220,16 @@ export const audioStore = createPartialStore<AudioStoreTypes>({
if (style == undefined) throw new Error("assert style != undefined");

const styleName = style.styleName || DEFAULT_STYLE_NAME;

const projectName = getters.PROJECT_NAME ?? "";
Copy link
Member

Choose a reason for hiding this comment

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

あ! デフォルトのプロジェクト名を適当に決めた方がいいかもですね!
ちょっとこちらで変えさせていただきます!

@Hiroshiba Hiroshiba merged commit bf9fd0f into VOICEVOX:main Jun 30, 2024
9 checks passed
@jdkfx jdkfx deleted the feature/#2075_add_project_tag_to_export_file branch July 3, 2024 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants