Search

μŒμ„± λ³€ν™˜ ν”„λ‘œκ·Έλž¨

μŒμ„± λ³€ν™˜ ν”„λ‘œκ·Έλž¨

이 ν”„λ‘œκ·Έλž¨μ€ ν…μŠ€νŠΈλ₯Ό μž…λ ₯λ°›μ•„ μŒμ„±μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 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
볡사