import gradio as gr
import os
import soundfile as sf
from audio_processor import process_audio
def main():
with gr.Blocks() as app:
gr.Markdown(
"""
#
diablofx Audio Interval Cutter (BETA)
Want to [support](https://ko-fi.com/diablofx) me?\n
Need help with AI? [Join AI Hub!](https://discord.gg/aihub)
"""
)
with gr.Row():
with gr.Column():
audio_input = gr.File(label="Upload an audio file")
interval_input = gr.Textbox("5000", label="Interval Length (in ms)")
process_button = gr.Button(value='Start', variant='primary')
with gr.Column():
output_html = gr.HTML("Processed data will appear here")
process_button.click(fn=process_audio_and_display_info, inputs=[audio_input, interval_input], outputs=output_html)
app.queue(max_size=1022).launch(share=True)
def process_audio_and_display_info(audio_file, interval):
# Get the audio file info
audio_info = sf.info(audio_file)
bit_depth = {'PCM_16': 16, 'FLOAT': 32}.get(audio_info.subtype, 0)
# Convert duration to minutes, seconds, and milliseconds
minutes, seconds = divmod(audio_info.duration, 60)
seconds, milliseconds = divmod(seconds, 1)
milliseconds *= 1000 # convert from seconds to milliseconds
# Convert bitrate to kbp/s
bitrate = audio_info.samplerate * audio_info.channels * bit_depth / 1000
# Calculate speed in kbps
speed_in_kbps = audio_info.samplerate * bit_depth / 1000
# Create a table with the audio file info
info_table = f"""
| Information | Value |
| :---: | :---: |
| File Name | {os.path.basename(audio_file)} |
| Duration | {int(minutes)} minutes - {int(seconds)} seconds - {int(milliseconds)} milliseconds |
| Bitrate | {bitrate} kbp/s |
| Audio Channels | {audio_info.channels} |
| Samples per second | {audio_info.samplerate} Hz |
| Bit per second | {audio_info.samplerate * audio_info.channels * bit_depth} bit/s |
"""
# Process the audio file and get the download link
download_link = process_audio(audio_file, interval)
# Return the information table and the download link
return info_table, download_link
if __name__ == "__main__":
main()