|
|
|
|
|
import gradio as gr |
|
from audio_tuner import change_audio_tuning |
|
import os |
|
|
|
def tuning_interface(audio_input, initial_tuning, desired_tuning): |
|
""" |
|
A wrapper function to connect the core logic to the Gradio interface. |
|
|
|
Args: |
|
audio_input (str): The temporary filepath of the uploaded audio provided by Gradio. |
|
initial_tuning (float): The initial tuning frequency from the number input. |
|
desired_tuning (float): The desired tuning frequency from the number input. |
|
|
|
Returns: |
|
(int, numpy.ndarray) or None: The processed audio data or None if an error occurs. |
|
""" |
|
if audio_input is None: |
|
raise gr.Error("Please upload an audio file first.") |
|
|
|
try: |
|
|
|
return change_audio_tuning(audio_input, initial_tuning, desired_tuning) |
|
except ValueError as e: |
|
|
|
raise gr.Error(str(e)) |
|
except Exception as e: |
|
raise gr.Error(f"An unexpected error occurred: {e}") |
|
|
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Soft()) as demo: |
|
gr.Markdown( |
|
""" |
|
# Audio Tuning Speed Adjuster |
|
Upload an audio file, set its original tuning frequency (e.g., A4 = 440Hz), |
|
and then set your desired tuning frequency (e.g., A4 = 432Hz). |
|
The app will slow down or speed up the audio to match the desired tuning without digital pitch correction. |
|
""" |
|
) |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
audio_in = gr.Audio(type="filepath", label="Input Audio") |
|
|
|
gr.Markdown("### Tuning Parameters") |
|
initial_hz = gr.Number(label="Initial Tuning (Hz)", value=440) |
|
desired_hz = gr.Number(label="Desired Tuning (Hz)", value=432) |
|
|
|
submit_btn = gr.Button("Apply Tuning", variant="primary") |
|
|
|
with gr.Column(): |
|
audio_out = gr.Audio(label="Tuned Audio", type="numpy") |
|
|
|
submit_btn.click( |
|
fn=tuning_interface, |
|
inputs=[audio_in, initial_hz, desired_hz], |
|
outputs=audio_out |
|
) |
|
|
|
gr.Examples( |
|
examples=[ |
|
[None, 440, 432], |
|
[None, 440, 528], |
|
[None, 432, 444], |
|
], |
|
inputs=[audio_in, initial_hz, desired_hz], |
|
outputs=audio_out, |
|
fn=tuning_interface, |
|
cache_examples=False |
|
) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |