import gradio as gr from pydub import AudioSegment from pydub.generators import Sine import tempfile def morse_to_audio(morse_code, frequency=700, dot_duration=100): # Morse code dictionary morse_dict = { '.': dot_duration, '-': dot_duration * 3, ' ': dot_duration * 7 # space between words } # Create an empty audio segment audio = AudioSegment.silent(duration=0) # Generate the audio for each symbol for symbol in morse_code: if symbol in morse_dict: duration = morse_dict[symbol] if symbol != ' ': tone = Sine(frequency).to_audio_segment(duration=duration) silence = AudioSegment.silent(duration=dot_duration) # silence between dots/dashes audio += tone + silence else: audio += AudioSegment.silent(duration=duration) # silence between words # Save the audio to a temporary file temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".wav") audio.export(temp_file.name, format="wav") return temp_file.name with gr.Blocks(title="MTA", theme="nevreal/blues") as demo: gr.Markdown(" # Morse To Audio") with gr.Column(): morse_input = gr.Textbox(label="Enter Morse Code") freq_slider = gr.Slider(minimum=300, maximum=1000, value=700, label="Frequency (Hz)") dot_duration_slider = gr.Slider(minimum=50, maximum=500, value=100, label="Dot Duration (ms)") convert_button = gr.Button("Convert to Audio") with gr.Column(): audio_output = gr.Audio(label="Morse Code Audio") convert_button.click(morse_to_audio, inputs=[morse_input, freq_slider, dot_duration_slider], outputs=audio_output) demo.launch()