sudo-soldier commited on
Commit
ab28a19
·
verified ·
1 Parent(s): f0d9d75

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -0
app.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import yt_dlp
3
+ import subprocess
4
+ import os
5
+ from pydub import AudioSegment
6
+
7
+ def process_youtube_url(url, uploaded_file, state):
8
+ log = []
9
+
10
+ try:
11
+ if url:
12
+ log.append("Starting download...")
13
+
14
+ ydl_opts = {
15
+ 'format': 'bestaudio/best',
16
+ 'outtmpl': 'downloads/%(id)s.%(ext)s',
17
+ }
18
+
19
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
20
+ info = ydl.extract_info(url, download=True)
21
+ log.append(f"Downloaded: {info['title']}")
22
+
23
+ filename = os.path.join('downloads', f"{info['id']}.webm")
24
+
25
+ elif uploaded_file:
26
+ filename = uploaded_file.name
27
+ log.append(f"Uploaded MP3 file: {filename}")
28
+
29
+ else:
30
+ raise ValueError("No YouTube URL or MP3 file provided.")
31
+
32
+ log.append("Converting audio to MP3 and creating ringtone...")
33
+
34
+ mp3_filename = 'Ringtone.mp3'
35
+ ffmpeg_command = [
36
+ 'ffmpeg', '-i', filename, mp3_filename
37
+ ]
38
+ subprocess.run(ffmpeg_command, check=True)
39
+ log.append(f"MP3 saved: {mp3_filename}")
40
+
41
+ ringtone_filename_m4a = 'temp_ringtone.m4a'
42
+ ffmpeg_ringtone_command = [
43
+ 'ffmpeg', '-i', mp3_filename, '-t', '00:00:20', ringtone_filename_m4a
44
+ ]
45
+ subprocess.run(ffmpeg_ringtone_command, check=True)
46
+ log.append(f"Ringtone saved as M4A: {ringtone_filename_m4a}")
47
+
48
+ ringtone_filename_m4r = 'Apple.m4r'
49
+ os.rename(ringtone_filename_m4a, ringtone_filename_m4r)
50
+ log.append(f"Ringtone renamed to .m4r: {ringtone_filename_m4r}")
51
+
52
+ return '\n'.join(log), mp3_filename, ringtone_filename_m4r, state
53
+
54
+ except Exception as e:
55
+ log.append(f"Error: {str(e)}")
56
+ return '\n'.join(log), None, None, state
57
+
58
+ def push_to_android(mp3_filename):
59
+ log = []
60
+ try:
61
+ adb_push_command = f'adb push {mp3_filename} /sdcard/Ringtones/'
62
+ subprocess.run(adb_push_command, shell=True, check=True)
63
+ log.append(f"Successfully pushed {mp3_filename} to Android device.")
64
+ except Exception as e:
65
+ log.append(f"Error pushing to Android device: {str(e)}")
66
+
67
+ return '\n'.join(log)
68
+
69
+ with gr.Blocks() as interface:
70
+ gr.HTML("<h1>Python Ringtones</h1><br/>Download and convert YouTube audio to MP3 (Ringtone.mp3) and create an iPhone-compatible M4R ringtone (Apple.m4r). Upload an MP3 file to convert it too.")
71
+
72
+ with gr.Row():
73
+ youtube_url = gr.Textbox(label="Enter YouTube or Song URL to create a ringtone", placeholder="Paste the URL here...")
74
+ mp3_upload = gr.File(label="Upload MP3 (Optional)", type="filepath")
75
+ state = gr.State()
76
+
77
+ with gr.Row():
78
+ status_log = gr.Textbox(label="Status Log")
79
+ mp3_download = gr.File(label="Download Android Ringtone")
80
+ iphone_ringtone = gr.File(label="Download iPhone Ringtone")
81
+
82
+ def on_process_button_click(url, uploaded_file):
83
+ return process_youtube_url(url, uploaded_file, state)
84
+
85
+ process_button = gr.Button("Create Ringtone")
86
+ process_button.click(on_process_button_click, inputs=[youtube_url, mp3_upload], outputs=[status_log, mp3_download, iphone_ringtone])
87
+
88
+ push_button = gr.Button("Push to Android")
89
+ push_button.click(push_to_android, inputs=mp3_download, outputs=status_log)
90
+
91
+ interface.launch()
92
+
93
+
94
+
95
+
96
+
97
+
98
+