This coding playground creates a NumPy waveform and returns its sample rate and samples to a Gradio audio component. Click Run , choose a note and duration, then submit to play the tone.
Code
import numpy as np
import gradio as gr
notes = ["C" , "C#" , "D" , "D#" , "E" , "F" , "F#" , "G" , "G#" , "A" , "A#" , "B" ]
def generate_tone(note, octave, duration):
sr = 48000
a4_freq, tones_from_a4 = 440 , 12 * (octave - 4 ) + (note - 9 )
frequency = a4_freq * 2 ** (tones_from_a4 / 12 )
duration = int (duration)
audio = np.linspace(0 , duration, duration * sr)
audio = (20000 * np.sin(audio * (2 * np.pi * frequency))).astype(np.int16)
return sr, audio
demo = gr.Interface(
generate_tone,
[
gr.Dropdown(notes, type = "index" ),
gr.Slider(4 , 6 , step= 1 ),
gr.Textbox(value= "1" , label= "Duration in seconds" ),
],
"audio" ,
flagging_mode= "never" ,
)
demo.launch()
import numpy as np
import gradio as gr
notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
def generate_tone(note, octave, duration):
sr = 48000
a4_freq, tones_from_a4 = 440, 12 * (octave - 4) + (note - 9)
frequency = a4_freq * 2 ** (tones_from_a4 / 12)
duration = int(duration)
audio = np.linspace(0, duration, duration * sr)
audio = (20000 * np.sin(audio * (2 * np.pi * frequency))).astype(np.int16)
return sr, audio
demo = gr.Interface(
generate_tone,
[
gr.Dropdown(notes, type="index"),
gr.Slider(4, 6, step=1),
gr.Textbox(value="1", label="Duration in seconds"),
],
"audio",
flagging_mode="never",
)
demo.launch()