본문으로 바로가기

gtts 로 파일을 저장 후 -> pygame 패키지로 파일을 실행하는 메소드를 통해 키오스크가 말을 하는 과정, 즉 TTS 로 구현하려 했었다.

TTS 는 구현이 어렵지 않기 때문에 패키지 사용으로 손쉽게 구현할 수 있었다.

def TTS_speak(_txt): 
    TTS_FILE_PATH = "./TTS.mp3"
    language_toSay= 'ko' #_lang = en or ko
    myobj = gTTS(text=_txt, lang=language_toSay, slow=False) # lang f12 - import lang - _main_langs() 살펴보면 됨 # ko, en
    myobj.save(TTS_FILE_PATH)    
    play_mp3file(TTS_FILE_PATH)

허나 위 메소드를 사용하다 다음과 같은 오류를 마주했다.

    with open(str(savefile), "wb") as f:
PermissionError: [Errno 13] Permission denied: './TTS_file.mp3'

매번 중복 저장하다가 권한이 거부 된 것이다.

 

위 문제 해결을 위해 스택오버플로우를 돌아다니다 해결법을 발견했다.

count = 0
def speak_TTS(data):
    global count
    language_toSay= 'ko' #_lang = en or ko
    tts = gTTS(text=data, lang=language_toSay)
    tts.save(f'speech{count%2}.mp3')
    play_mp3file(f'speech{count%2}.mp3')
    count += 1

단지 두가지 파일을 사용하는 것으로 해결이 되었다.

 

해당 오류가 발생하는 이유는 pygame 패키지의 문제로 한가지 파일만을 사용할 경우 파일 리소스가 프로그램 내부에서 사용 중이기 때문에 권한이 거부되기 때문이라고 한다.

이러한 문제는 두가지 파일을 생성해 두 파일을 번갈아 저장하며 사용해주면 해결된다.