Spaces:
Sleeping
Sleeping
import gradio as gr | |
from pydub import AudioSegment | |
import tempfile | |
import os | |
def process_audio(file, | |
left_source, # "left", "right", "mute" | |
right_source # "left", "right", "mute" | |
): | |
# ステレオで読み込み | |
audio = AudioSegment.from_file(file) | |
left, right = audio.split_to_mono() | |
# ソース選択 | |
def get_channel(source): | |
if source == "left": | |
return left | |
elif source == "right": | |
return right | |
else: # mute | |
return AudioSegment.silent(duration=len(audio)) | |
new_left = get_channel(left_source) | |
new_right = get_channel(right_source) | |
# ステレオ再構築 | |
combined = AudioSegment.from_mono_audiosegments(new_left, new_right) | |
# 一時ファイルに保存 | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmpfile: | |
combined.export(tmpfile.name, format="wav") | |
return tmpfile.name | |
# UIの設定 | |
options = ["left", "right", "mute"] | |
theme = gr.themes.Base( | |
primary_hue="sky", | |
neutral_hue="slate", | |
text_size="lg", | |
radius_size="sm", | |
font=[gr.themes.GoogleFont('Zen Maru Gothic'), 'ui-sans-serif', 'system-ui', 'sans-serif'], | |
font_mono=[gr.themes.GoogleFont('Kosugi Maru'), 'ui-monospace', 'Consolas', 'monospace'], | |
).set( | |
body_text_weight='500', | |
embed_radius='*radius_xxs', | |
border_color_primary='*neutral_400', | |
border_color_primary_dark='*neutral_400', | |
shadow_drop='*block_shadow', | |
shadow_drop_lg='*shadow_drop', | |
button_border_width='*block_border_width', | |
button_border_width_dark='*block_border_width', | |
button_shadow='*shadow_drop', | |
button_shadow_active='*shadow_drop', | |
button_shadow_hover='*shadow_inset', | |
button_large_padding='*spacing_md', | |
button_large_radius='*radius_sm', | |
button_small_radius='*radius_xxl', | |
button_primary_background_fill='*primary_100', | |
button_primary_background_fill_dark='*primary_500', | |
button_primary_background_fill_hover_dark='*button_secondary_background_fill_hover' | |
) | |
demo = gr.Interface( | |
fn=process_audio, | |
inputs=[ | |
gr.Audio(type="filepath", label="音声ファイル(ステレオ)"), | |
gr.Radio(choices=options, value="left", label="左チャンネルに流す音"), | |
gr.Radio(choices=options, value="right", label="右チャンネルに流す音") | |
], | |
outputs=gr.Audio(label="出力音声(設定済みステレオ)"), | |
title="ステレオチャンネル編集ツール", | |
description="左・右チャンネルの音声ソースを個別に設定して、新しいステレオ音声を出力します。", | |
theme=theme | |
) | |
if __name__ == "__main__": | |
demo.launch(share=True, debug=True) | |