rufflet17 commited on
Commit
8b91f03
·
verified ·
1 Parent(s): 1d4cc67

Update gradio_tabs/sample.py

Browse files
Files changed (1) hide show
  1. gradio_tabs/sample.py +109 -109
gradio_tabs/sample.py CHANGED
@@ -1,110 +1,110 @@
1
- import gradio as gr
2
- import os
3
- import glob
4
- import re
5
-
6
- # --- 定数定義 ---
7
- # Style-Bert-VITS2の実際の出力フォルダ名を指定
8
- OUTPUT_DIR = "sample_audio"
9
-
10
- # --- 1. ヘルパー関数 ---
11
- def natural_sort_key(s):
12
- """
13
- 文字列を自然順ソート(例: 'FN2'が'FN10'より前に来る)するためのキーを生成する。
14
- """
15
- return [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', s)]
16
-
17
- def get_folders():
18
- """outputsディレクトリ内のサブフォルダのリストを自然順ソートで取得します。"""
19
- if not os.path.exists(OUTPUT_DIR) or not os.path.isdir(OUTPUT_DIR):
20
- print(f"警告: '{OUTPUT_DIR}' フォルダが見つかりません。")
21
- return []
22
-
23
- folders = [f.name for f in os.scandir(OUTPUT_DIR) if f.is_dir()]
24
- folders.sort(key=natural_sort_key)
25
- return folders
26
-
27
- def update_file_list(folder_name):
28
- """
29
- 選択されたフォルダに応じて、ファイルリストの選択肢を更新します。
30
- """
31
- if not folder_name:
32
- return gr.update(choices=[], value=None, label="ファイルを選択")
33
-
34
- search_pattern = os.path.join(OUTPUT_DIR, folder_name, f"{folder_name}_*.mp3")
35
- file_paths = sorted(glob.glob(search_pattern))
36
-
37
- choices_list = []
38
- for path in file_paths:
39
- basename = os.path.basename(path)
40
- prefix_to_remove = f"{folder_name}_"
41
- if basename.startswith(prefix_to_remove):
42
- display_name = basename[len(prefix_to_remove):]
43
- else:
44
- display_name = basename
45
-
46
- display_name = display_name.removesuffix(".mp3")
47
- choices_list.append((display_name, path))
48
-
49
- if not choices_list:
50
- return gr.update(choices=[], value=None, label=f"{folder_name} にはファイルがありません")
51
-
52
- return gr.update(choices=choices_list, value=None, label=f"「{folder_name}」のファイルリスト")
53
-
54
- def play_audio(filepath):
55
- """
56
- 選択されたファイルパスをAudioコンポーネントに渡して再生可能にします。
57
- """
58
- return gr.update(value=filepath, visible=bool(filepath))
59
-
60
-
61
- # --- 2. Gradio UIの構築 ---
62
- def create_player_tab():
63
- """
64
- 音声再生プレイヤーのUIコンポーネントを作成し、タブ内に配置できるようにする関数。
65
- """
66
- gr.Markdown(
67
- f"""
68
- # Style-Bert-VITS2 音声再生プレイヤー
69
- `{OUTPUT_DIR}` フォルダ内の音声ファイルを再生します。
70
- フォルダ(話者)を選択すると、その中のファイルリストが表示されます。
71
- """
72
- )
73
-
74
- initial_folders = get_folders()
75
-
76
- if not initial_folders:
77
- gr.Warning(f"'{OUTPUT_DIR}' フォルダが見つからないか、空です。Style-Bert-VITS2で音声を生成してからアプリを再起動してください。")
78
- else:
79
- with gr.Row():
80
- folder_selector = gr.Dropdown(
81
- choices=initial_folders,
82
- label="1. フォルダ(話者)を選択",
83
- interactive=True
84
- )
85
- # フォルダリストが長い場合に見やすくなるようにコンポーネントを分ける
86
- with gr.Column(scale=2): # 横幅の比率を調整
87
- file_selector = gr.Radio(
88
- label="2. ファイルを選択",
89
- choices=[],
90
- interactive=True
91
- )
92
-
93
- audio_player = gr.Audio(label="再生プレイヤー", type="filepath", visible=False)
94
-
95
- # --- 3. コンポーネント間の連携を設定 ---
96
- folder_selector.change(
97
- fn=update_file_list,
98
- inputs=folder_selector,
99
- outputs=file_selector
100
- ).then(
101
- fn=lambda: gr.update(value=None, visible=False),
102
- inputs=None,
103
- outputs=audio_player
104
- )
105
-
106
- file_selector.change(
107
- fn=play_audio,
108
- inputs=file_selector,
109
- outputs=audio_player
110
  )
 
1
+ import gradio as gr
2
+ import os
3
+ import glob
4
+ import re
5
+
6
+ # --- 定数定義 ---
7
+ # Style-Bert-VITS2の実際の出力フォルダ名を指定
8
+ OUTPUT_DIR = "sample_audio"
9
+
10
+ # --- 1. ヘルパー関数 ---
11
+ def natural_sort_key(s):
12
+ """
13
+ 文字列を自然順ソート(例: 'FN2'が'FN10'より前に来る)するためのキーを生成する。
14
+ """
15
+ return [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', s)]
16
+
17
+ def get_folders():
18
+ """outputsディレクトリ内のサブフォルダのリストを自然順ソートで取得します。"""
19
+ if not os.path.exists(OUTPUT_DIR) or not os.path.isdir(OUTPUT_DIR):
20
+ print(f"警告: '{OUTPUT_DIR}' フォルダが見つかりません。")
21
+ return []
22
+
23
+ folders = [f.name for f in os.scandir(OUTPUT_DIR) if f.is_dir()]
24
+ folders.sort(key=natural_sort_key)
25
+ return folders
26
+
27
+ def update_file_list(folder_name):
28
+ """
29
+ 選択されたフォルダに応じて、ファイルリストの選択肢を更新します。
30
+ """
31
+ if not folder_name:
32
+ return gr.update(choices=[], value=None, label="ファイルを選択")
33
+
34
+ search_pattern = os.path.join(OUTPUT_DIR, folder_name, f"{folder_name}_*.mp3")
35
+ file_paths = sorted(glob.glob(search_pattern))
36
+
37
+ choices_list = []
38
+ for path in file_paths:
39
+ basename = os.path.basename(path)
40
+ prefix_to_remove = f"{folder_name}_"
41
+ if basename.startswith(prefix_to_remove):
42
+ display_name = basename[len(prefix_to_remove):]
43
+ else:
44
+ display_name = basename
45
+
46
+ display_name = display_name.removesuffix(".mp3")
47
+ choices_list.append((display_name, path))
48
+
49
+ if not choices_list:
50
+ return gr.update(choices=[], value=None, label=f"{folder_name} にはファイルがありません")
51
+
52
+ return gr.update(choices=choices_list, value=None, label=f"「{folder_name}」のファイルリスト")
53
+
54
+ def play_audio(filepath):
55
+ """
56
+ 選択されたファイルパスをAudioコンポーネントに渡して再生可能にします。
57
+ """
58
+ return gr.update(value=filepath, visible=bool(filepath))
59
+
60
+
61
+ # --- 2. Gradio UIの構築 ---
62
+ def create_player_tab():
63
+ """
64
+ 音声再生プレイヤーのUIコンポーネントを作成し、タブ内に配置できるようにする関数。
65
+ """
66
+ # gr.Markdown(
67
+ # f"""
68
+ # # Style-Bert-VITS2 音声再生プレイヤー
69
+ # `{OUTPUT_DIR}` フォルダ内の音声ファイルを再生します。
70
+ # フォルダ(話者)を選択すると、その中のファイルリストが表示されます。
71
+ # """
72
+ # )
73
+
74
+ initial_folders = get_folders()
75
+
76
+ if not initial_folders:
77
+ gr.Warning(f"'{OUTPUT_DIR}' フォルダが見つからないか、空です。Style-Bert-VITS2で音声を生成してからアプリを再起動してください。")
78
+ else:
79
+ with gr.Row():
80
+ folder_selector = gr.Dropdown(
81
+ choices=initial_folders,
82
+ label="1. 話者を選択",
83
+ interactive=True
84
+ )
85
+ # フォルダリストが長い場合に見やすくなるようにコンポーネントを分ける
86
+ with gr.Column(scale=2): # 横幅の比率を調整
87
+ file_selector = gr.Radio(
88
+ label="2. ファイルを選択",
89
+ choices=[],
90
+ interactive=True
91
+ )
92
+
93
+ audio_player = gr.Audio(label="再生プレイヤー", type="filepath", visible=False)
94
+
95
+ # --- 3. コンポーネント間の連携を設定 ---
96
+ folder_selector.change(
97
+ fn=update_file_list,
98
+ inputs=folder_selector,
99
+ outputs=file_selector
100
+ ).then(
101
+ fn=lambda: gr.update(value=None, visible=False),
102
+ inputs=None,
103
+ outputs=audio_player
104
+ )
105
+
106
+ file_selector.change(
107
+ fn=play_audio,
108
+ inputs=file_selector,
109
+ outputs=audio_player
110
  )