benjamin5607 commited on
Commit
7483917
Β·
verified Β·
1 Parent(s): 6ee7640

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -26
app.py CHANGED
@@ -8,11 +8,9 @@ from transformers import pipeline
8
 
9
  GENAI_KEY = os.getenv("GEMINI_KEY")
10
 
11
- # μŒμ•… 생성 λͺ¨λΈ λ‘œλ“œ
12
  try:
13
  music_synthesiser = pipeline("text-to-audio", "facebook/musicgen-small")
14
- except Exception as e:
15
- print(f"Music Model Load Error: {e}")
16
  music_synthesiser = None
17
 
18
  MEMBERS = {
@@ -26,18 +24,17 @@ MEMBERS = {
26
  "Sophie (France)": "fr-FR-DeniseNeural"
27
  }
28
 
29
- async def band_consulting(user_input, member_name, consult_lang_code):
30
  try:
31
- lang_map = {"ko": "Korean", "en": "English", "ja": "Japanese", "pt": "Portuguese", "es": "Spanish", "ar": "Arabic", "zh": "Chinese", "fr": "French"}
32
- target_lang = lang_map.get(consult_lang_code, "Korean")
33
 
34
- # β˜… λ¦¬λ”λ‹˜ μš”μ²­: μ„€λͺ… μΆ©λΆ„νžˆ, 악보 λ°˜λ“œμ‹œ 포함
35
  system_instruction = f"""
36
- 당신은 λ½λ°΄λ“œ 멀버 '{member_name}'μž…λ‹ˆλ‹€.
37
- 1. λ°˜λ“œμ‹œ '{target_lang}'둜 λ‹΅λ³€ν•˜μ„Έμš”.
38
- 2. 고민에 λŒ€ν•΄ μ•„μ£Ό μƒμ„Έν•˜κ³  μΉœμ ˆν•˜κ²Œ μ„€λͺ…ν•˜μ„Έμš”. (λ¬Έμž₯ 수 μ œν•œ μ—†μŒ)
39
- 3. λ°˜λ“œμ‹œ [TAB] μ„Ήμ…˜μ„ λ§Œλ“€μ–΄ μƒμ„Έν•œ ν…μŠ€νŠΈ μ•…λ³΄λ‚˜ 연주법을 ν¬ν•¨ν•˜μ„Έμš”.
40
- 4. μŒμ•… μƒμ„±μš© ν”„λ‘¬ν”„νŠΈλŠ” λ§ˆμ§€λ§‰μ— [MUSIC: μ˜μ–΄ν”„λ‘¬ν”„νŠΈ] ν˜•μ‹μœΌλ‘œ λ„£μœΌμ„Έμš”.
41
  """
42
 
43
  url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={GENAI_KEY}"
@@ -45,27 +42,23 @@ async def band_consulting(user_input, member_name, consult_lang_code):
45
 
46
  response = requests.post(url, json=payload)
47
  res_data = response.json()
48
-
49
- # 'candidates' μ—λŸ¬ λ°©μ–΄
50
  if 'candidates' not in res_data:
51
- return "API 응닡 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. ν‚€λ₯Ό ν™•μΈν•΄μ£Όμ„Έμš”.", None, None, "Score Error"
52
 
53
  ai_text_raw = res_data['candidates'][0]['content']['parts'][0]['text']
54
 
55
- # 데이터 νŒŒμ‹±
56
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL)
57
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
 
58
 
59
- tab_display = tab_match.group(1).strip() if tab_match else "상세 악보λ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€."
60
-
61
- # TTS용 ν…μŠ€νŠΈ (악보 기호 μ œμ™Έν•˜κ³  순수 μ„€λͺ…λ§Œ)
62
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
63
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
64
 
65
- # μŒμ„± 생성 (μ„€λͺ…이 κΈΈ 경우 처음 λͺ‡ λ¬Έμž₯만 읽도둝 쑰절 κ°€λŠ₯)
66
  voice_path = f"/tmp/v_{member_name.split()[0]}.mp3"
67
- tts_text = " ".join(clean_text.split('.')[:3]) # λ„ˆλ¬΄ κΈΈλ©΄ 였λ₯˜λ‚˜λ―€λ‘œ μ•ž 3λ¬Έμž₯만 TTS
68
- await edge_tts.Communicate(tts_text, MEMBERS.get(member_name, "ko-KR-SunHiNeural")).save(voice_path)
69
 
70
  # μŒμ•… 생성
71
  music_path = None
@@ -76,13 +69,11 @@ async def band_consulting(user_input, member_name, consult_lang_code):
76
  scipy.io.wavfile.write(music_path, music_output["sampling_rate"], music_output["audio"][0].T)
77
 
78
  return clean_text, voice_path, music_path, tab_display
79
-
80
  except Exception as e:
81
- return f"였λ₯˜ λ°œμƒ: {str(e)}", None, None, "Error"
82
 
83
  with gr.Blocks() as demo:
84
  i1 = gr.Textbox(); i2 = gr.Textbox(); i3 = gr.Textbox()
85
  o1 = gr.Textbox(); o2 = gr.Audio(); o3 = gr.Audio(); o4 = gr.Textbox()
86
- btn = gr.Button("GO"); btn.click(band_consulting, [i1, i2, i3], [o1, o2, o3, o4])
87
-
88
  demo.launch()
 
8
 
9
  GENAI_KEY = os.getenv("GEMINI_KEY")
10
 
 
11
  try:
12
  music_synthesiser = pipeline("text-to-audio", "facebook/musicgen-small")
13
+ except:
 
14
  music_synthesiser = None
15
 
16
  MEMBERS = {
 
24
  "Sophie (France)": "fr-FR-DeniseNeural"
25
  }
26
 
27
+ async def band_consulting(user_input, member_name, lang_code):
28
  try:
29
+ lang_map = {"ko":"Korean","en":"English","ja":"Japanese","pt":"Portuguese","es":"Spanish","ar":"Arabic","zh":"Chinese","fr":"French"}
30
+ target_lang = lang_map.get(lang_code, "Korean")
31
 
 
32
  system_instruction = f"""
33
+ 당신은 λ°΄λ“œ 멀버 '{member_name}'μž…λ‹ˆλ‹€.
34
+ 1. λ°˜λ“œμ‹œ '{target_lang}'둜만 λ‹΅λ³€ν•˜μ„Έμš”.
35
+ 2. μŒμ„± λ‹΅λ³€μš© 본문은 μ•„μ£Ό μΉœμ ˆν•˜κ³  μƒμ„Έν•˜κ²Œ μž‘μ„±ν•˜μ„Έμš”.
36
+ 3. λͺ¨λ“  악보와 연주법은 λ°˜λ“œμ‹œ [TAB] μ„Ήμ…˜μ— ν¬ν•¨ν•˜μ„Έμš”.
37
+ 4. λ§ˆμ§€λ§‰μ— [MUSIC: μ˜μ–΄ ν”„λ‘¬ν”„νŠΈ]λ₯Ό ν¬ν•¨ν•˜μ„Έμš”.
38
  """
39
 
40
  url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={GENAI_KEY}"
 
42
 
43
  response = requests.post(url, json=payload)
44
  res_data = response.json()
45
+
 
46
  if 'candidates' not in res_data:
47
+ return "API Error: No candidates found", None, None, "Score Error"
48
 
49
  ai_text_raw = res_data['candidates'][0]['content']['parts'][0]['text']
50
 
 
51
  tab_match = re.search(r'\[TAB\](.*?)(\[|$)', ai_text_raw, re.DOTALL)
52
  music_match = re.search(r'\[MUSIC:(.*?)\]', ai_text_raw, re.IGNORECASE)
53
+ tab_display = tab_match.group(1).strip() if tab_match else "상세 악보 μ—†μŒ"
54
 
55
+ # TTSμ—μ„œ 악보 도렀내기
 
 
56
  clean_text = re.sub(r'\[TAB\].*?(\[|$)', '', ai_text_raw, flags=re.DOTALL)
57
  clean_text = re.sub(r'\[MUSIC:.*?\]', '', clean_text).strip()
58
 
59
+ # μŒμ„± 생성
60
  voice_path = f"/tmp/v_{member_name.split()[0]}.mp3"
61
+ await edge_tts.Communicate(clean_text, MEMBERS.get(member_name, "ko-KR-SunHiNeural")).save(voice_path)
 
62
 
63
  # μŒμ•… 생성
64
  music_path = None
 
69
  scipy.io.wavfile.write(music_path, music_output["sampling_rate"], music_output["audio"][0].T)
70
 
71
  return clean_text, voice_path, music_path, tab_display
 
72
  except Exception as e:
73
+ return str(e), None, None, "Error"
74
 
75
  with gr.Blocks() as demo:
76
  i1 = gr.Textbox(); i2 = gr.Textbox(); i3 = gr.Textbox()
77
  o1 = gr.Textbox(); o2 = gr.Audio(); o3 = gr.Audio(); o4 = gr.Textbox()
78
+ btn = gr.Button("GO"); btn.click(band_consulting, [i1, i2, i3], [o1, o2, o3, o4], api_name="predict")
 
79
  demo.launch()