Yeluo0204 commited on
Commit
0af3599
·
verified ·
1 Parent(s): 1a492ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +4 -38
app.py CHANGED
@@ -1,38 +1,14 @@
1
  import os
2
- import time
3
  import numpy as np
4
  import tempfile
5
  from scipy.io import wavfile
6
- from pytube import YouTube
7
  import gradio as gr
8
- from moviepy.editor import AudioFileClip
9
  from inference import EnsembleDemucsMDXMusicSeparationModel, predict_with_model
10
  import torch
11
  import librosa
12
  import librosa.display
13
  import matplotlib.pyplot as plt
14
 
15
- # 下载YouTube视频并转换为WAV格式
16
- def download_youtube_video_as_wav(youtube_url):
17
- output_dir = "downloads"
18
- os.makedirs(output_dir, exist_ok=True)
19
- output_file = os.path.join(output_dir, "temp.mp4")
20
-
21
- try:
22
- yt = YouTube(youtube_url)
23
- yt.streams.filter(only_audio=True).first().download(filename=output_file)
24
- print("下载成功。")
25
- except Exception as e:
26
- print(f"下载视频时发生错误: {e}")
27
- return None
28
-
29
- # 将mp4音频转换为wav
30
- wav_file = os.path.join(output_dir, "mixture.wav")
31
- clip = AudioFileClip(output_file)
32
- clip.write_audiofile(wav_file)
33
-
34
- return wav_file
35
-
36
  # 检查文件是否准备好
37
  def check_file_readiness(filepath):
38
  num_same_size_checks = 0
@@ -70,18 +46,8 @@ def generate_spectrograms(audio_files):
70
  return tuple(output_spectrograms)
71
 
72
  # 音乐分离的包装函数
73
- def separate_music_file_wrapper(input_string, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu):
74
- input_files = []
75
- # 验证YouTube URL或目录路径
76
- if input_string.startswith("https://www.youtube.com") or input_string.startswith("https://youtu.be"):
77
- output_file = download_youtube_video_as_wav(input_string)
78
- if output_file is not None:
79
- input_files.append(output_file)
80
- elif os.path.isdir(input_string):
81
- input_directory = input_string
82
- input_files = [os.path.join(input_directory, f) for f in os.listdir(input_directory) if f.endswith('.wav')]
83
- else:
84
- raise ValueError("无效输入!请输入有效的YouTube链接或目录路径。")
85
 
86
  # 验证重叠值
87
  if not (0 <= large_overlap <= 1) or not (0 <= small_overlap <= 1):
@@ -157,7 +123,7 @@ theme = gr.themes.Base(
157
 
158
  with gr.Blocks(theme=theme) as demo:
159
  gr.Markdown(description)
160
- input_string = gr.Text(label="YouTube链接/URL")
161
  use_cpu = gr.Checkbox(label="仅使用CPU", value=True)
162
  use_single_onnx = gr.Checkbox(label="使用单一ONNX模型", value=False)
163
  large_overlap = gr.Number(label="大块重叠", value=0.6)
@@ -181,7 +147,7 @@ with gr.Blocks(theme=theme) as demo:
181
 
182
  process_button.click(
183
  separate_music_file_wrapper,
184
- inputs=[input_string, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu],
185
  outputs=[vocals, instrumental, instrumental2, bass, drums, other, vocals_spectrogram, instrumental_spectrogram, instrumental2_spectrogram, bass_spectrogram, drums_spectrogram, other_spectrogram],
186
  )
187
 
 
1
  import os
 
2
  import numpy as np
3
  import tempfile
4
  from scipy.io import wavfile
 
5
  import gradio as gr
 
6
  from inference import EnsembleDemucsMDXMusicSeparationModel, predict_with_model
7
  import torch
8
  import librosa
9
  import librosa.display
10
  import matplotlib.pyplot as plt
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  # 检查文件是否准备好
13
  def check_file_readiness(filepath):
14
  num_same_size_checks = 0
 
46
  return tuple(output_spectrograms)
47
 
48
  # 音乐分离的包装函数
49
+ def separate_music_file_wrapper(uploaded_files, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu):
50
+ input_files = [uploaded_files.name] # 获取上传文件的路径
 
 
 
 
 
 
 
 
 
 
51
 
52
  # 验证重叠值
53
  if not (0 <= large_overlap <= 1) or not (0 <= small_overlap <= 1):
 
123
 
124
  with gr.Blocks(theme=theme) as demo:
125
  gr.Markdown(description)
126
+ uploaded_file = gr.File(label="上传音频文件", type="file")
127
  use_cpu = gr.Checkbox(label="仅使用CPU", value=True)
128
  use_single_onnx = gr.Checkbox(label="使用单一ONNX模型", value=False)
129
  large_overlap = gr.Number(label="大块重叠", value=0.6)
 
147
 
148
  process_button.click(
149
  separate_music_file_wrapper,
150
+ inputs=[uploaded_file, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu],
151
  outputs=[vocals, instrumental, instrumental2, bass, drums, other, vocals_spectrogram, instrumental_spectrogram, instrumental2_spectrogram, bass_spectrogram, drums_spectrogram, other_spectrogram],
152
  )
153