μμ± λ³ν νλ‘κ·Έλ¨
μ΄ νλ‘κ·Έλ¨μ ν
μ€νΈλ₯Ό μ
λ ₯λ°μ μμ±μΌλ‘ λ³ννλ GUI μ ν리μΌμ΄μ
μ
λλ€. μ¬μ©μκ° ν
μ€νΈλ₯Ό μ
λ ₯νκ³ 'μμ± λ³ν' λ²νΌμ ν΄λ¦νλ©΄, ν
μ€νΈκ° μμ±μΌλ‘ λ³νλμ΄ MP3 νμΌλ‘ μ μ₯λ©λλ€. νμΌ μ΄λ¦μ νμ¬ λ μ§, μκ°, ν
μ€νΈ μΌλΆλ₯Ό ν¬ν¨νμ¬ μμ±λ©λλ€.
ν둬ννΈ
λλ νμ΄μ¬ νλ‘κ·Έλλ° νμ΅μμΌ
μ
λ ₯ν ν
μ€νΈλ₯Ό μμ±μΌλ‘ λ³ννλ νμ΄μ¬ νλ‘κ·Έλ¨μ λ§λλ μμ
μ ν΄μΌν΄
λλ νμ΄μ¬ 3.13 λ²μ μΌλ‘ κ°λ°νκ³ μκ³
GUI νλ‘κ·Έλ¨μΌλ‘ κ°λ°ν΄μΌνκ³
ν
μ€νΈλ₯Ό μ
λ ₯νλ μμλ₯Ό 3~5 ν μΌλ‘ μ
λ ₯μμ ν¬κΈ°λ₯Ό λ§λ€μ΄μ£Όκ³ μμ± λ³ν μ΄λΌλ λ²νΌμ λ§λ€μ΄μ€
μμ± λ³νμ΄λΌλ λ²νΌ ν΄λ¦ μ, ν
μ€νΈλ₯Ό μμ±μΌλ‘ λ³νμμΌμ£Όκ³
μμ± νμΌμ mp3 νμΌ νμ₯μλ‘ μ μ₯ν΄μ€
μλ₯Ό λ€μ΄, "μλ
νμΈμ νμ΄μ¬ κ°λ°μ μ
λλ€." λΌκ³ μ
λ ₯νλ©΄
νμ¬ λ μ§ μκ° 20250502_120234_μλ
νμΈμ.mp3 λΌκ³ νμΌμ λ§λ€μ΄μ€
μΊλ²μ€ λͺ¨λλ‘ μλ΅ν΄μ€
Plain Text
볡μ¬
νλ₯΄μλ
- νμ΄μ¬ νλ‘κ·Έλλ° νμ΅μ
μμ
- ν
μ€νΈλ₯Ό μμ±μΌλ‘ λ³ννλ νμ΄μ¬ νλ‘κ·Έλ¨ κ°λ°
λ§₯λ½
- μΈμ΄ : νμ΄μ¬
- λ²μ : 3.13
- ꡬ쑰 : GUI νλ‘κ·Έλ¨
- κΈ°λ₯
* ν
μ€νΈ μ
λ ₯
* μμ± λ³ν
* μμ± νμΌ μ μ₯
νμ
- νμΌλͺ
: μ°μμΌ_μλΆμ΄_μ²μν
μ€νΈ10κΈμ.mp3
- μμ : 20250502_120234_μλ
νμΈμ.mp3
μΊλ²μ€ λͺ¨λλ‘ μλ΅
Plain Text
볡μ¬
μ½λ
import tkinter as tk
from tkinter import messagebox
from datetime import datetime
from gtts import gTTS # Google Text-to-Speech λͺ¨λ
import os
# ν
μ€νΈλ₯Ό μμ±μΌλ‘ λ³ννκ³ mp3λ‘ μ μ₯νλ ν¨μ
def convert_text_to_speech():
print("[DEBUG] λ²νΌ ν΄λ¦λ¨: μμ± λ³ν μμ")
# ν
μ€νΈ μ
λ ₯ μμ ―μμ λ΄μ©μ κ°μ Έμ΄ ("1.0"μ 첫 μ€ μ²« λ¬Έμ, tk.ENDλ λκΉμ§)
text = text_input.get("1.0", tk.END).strip()
print(f"[DEBUG] μ
λ ₯ ν
μ€νΈ: '{text}'")
# μ
λ ₯μ΄ λΉμ΄μμΌλ©΄ κ²½κ³ λ©μμ§ μΆλ ₯ ν μ’
λ£
if not text:
print("[DEBUG] μ
λ ₯λ ν
μ€νΈ μμ")
messagebox.showwarning("κ²½κ³ ", "ν
μ€νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ.")
return
try:
# νμ¬ λ μ§μ μκ°μ "YYYYMMDD_HHMMSS" νμμΌλ‘ λ¬Έμμ΄λ‘ μμ±
now = datetime.now().strftime("%Y%m%d_%H%M%S")
print(f"[DEBUG] νμ¬ μκ° λ¬Έμμ΄: {now}")
# μ
λ ₯ ν
μ€νΈ μ€ μ²« λ§μΉ¨ν μ κΉμ§ μ΅λ 10κΈμλ₯Ό μλΌμ νμΌ μ΄λ¦ νλ¦¬λ·°λ‘ μ¬μ©
preview_text = text.split(".")[0][:10] # μ: "μλ
νμΈμ νμ΄μ¬"
print(f"[DEBUG] νμΌ μ΄λ¦μ© 미리보기 ν
μ€νΈ: {preview_text}")
# μ΅μ’
νμΌ μ΄λ¦ μμ±
filename = f"{now}_{preview_text}.mp3"
print(f"[DEBUG] μ΅μ’
νμΌ μ΄λ¦: {filename}")
# gTTS κ°μ²΄λ₯Ό μμ± (μΈμ΄λ νκ΅μ΄λ‘ μ§μ )
tts = gTTS(text=text, lang='ko')
print("[DEBUG] gTTS κ°μ²΄ μμ± μλ£")
# mp3 νμΌλ‘ μ μ₯
tts.save(filename)
print(f"[DEBUG] νμΌ μ μ₯ μλ£: {filename}")
# μ¬μ©μμκ² μ μ₯ μλ£ λ©μμ§ νμ
messagebox.showinfo("μλ£", f"μμ± νμΌμ΄ μ μ₯λμμ΅λλ€:\n{filename}")
except Exception as e:
# μμΈ λ°μ μ μ€λ₯ λ©μμ§ μΆλ ₯
print(f"[ERROR] μμΈ λ°μ: {e}")
messagebox.showerror("μ€λ₯", f"μμ± λ³ν μ€ μ€λ₯ λ°μ: {e}")
# λ©μΈ μλμ° μμ±
root = tk.Tk()
root.title("ν
μ€νΈ μμ± λ³νκΈ°") # μλμ° μ λͺ© μ€μ
root.geometry("400x300") # μλμ° ν¬κΈ° μ€μ
# μλ΄ ν
μ€νΈ λΌλ²¨ μμ± λ° λ°°μΉ
label = tk.Label(root, text="ν
μ€νΈλ₯Ό μ
λ ₯νμΈμ:")
label.pack(pady=10)
# μ¬λ¬ μ€ ν
μ€νΈ μ
λ ₯ μμ ― μμ± (λμ΄ 5ν, λλΉ 40μ΄)
text_input = tk.Text(root, height=5, width=40)
text_input.pack(padx=10, pady=5)
# λ³ν λ²νΌ μμ± λ° ν΄λ¦ μ convert_text_to_speech ν¨μ μ€ν
convert_button = tk.Button(root, text="μμ± λ³ν", command=convert_text_to_speech)
convert_button.pack(pady=20)
# GUI 루ν μ€ν (μλμ° μ°½μ μ μ§ν¨)
print("[DEBUG] GUI μ€ν μμ")
root.mainloop()
Python
볡μ¬