import gradio as gr import os import soundfile as sf import numpy as np import pretty_midi from infer import infer_midi_from_wav BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # MIDI → WAV(サイン波ベースの簡易合成器) def convert_midi_to_wav_sine(midi_path): pm = pretty_midi.PrettyMIDI(midi_path) waveform = pm.synthesize() # デフォルトは fs=22050Hz wav_path = os.path.join(BASE_DIR, "synth_output.wav") sf.write(wav_path, waveform, samplerate=44100) return wav_path # 推論関数(録音 → MIDI → WAV → 再生用) def transcribe_and_play(audio_path): midi_path = infer_midi_from_wav(audio_path) wav_output_path = convert_midi_to_wav_sine(midi_path) return wav_output_path, midi_path # Gradio UI interface = gr.Interface( fn=transcribe_and_play, inputs=gr.Audio(type="filepath", label="マイク録音"), outputs=[ gr.Audio(label="再生"), gr.File(label="MIDIダウンロード") ], title="鼻歌からのMIDI変換", description="録音した音声をMIDIに変換し、再生して確認、ダウンロードができます。" ) interface.launch()