split-mono / app.py
soiz1's picture
Create app.py
29395b7 verified
raw
history blame
1.73 kB
#!pip install gradio pydub
#!apt install ffmpeg
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"]
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="左・右チャンネルの音声ソースを個別に設定して、新しいステレオ音声を出力します。"
)
if __name__ == "__main__":
demo.launch(share=True, debug=True)