이 음성 합성 데이터 제작 툴의 큰 구조인 transform, 배경음악제거, STT를 바탕으로 라이브러리를 만들었다.
음성파일들로 음성 합성 학습 데이터를 만들고 싶으신 분들은
이 라이브러리를 사용할 것을 적극 권장한다.
https://github.com/harmlessman/PAFTS
GitHub - harmlessman/PAFTS: Library That Preprocessing Audio For TTS
Library That Preprocessing Audio For TTS. Contribute to harmlessman/PAFTS development by creating an account on GitHub.
github.com
https://drawing-thoughts.tistory.com/40
음성 합성 데이터 셋 제작 라이브러리
음성합성 학습에 필요한 음성들은 있지만, Text값이 없거나 음성에 잡음이나 배경음악이 많아서 고민인 사람들을 위한 라이브러리입니다. https://drawing-thoughts.tistory.com/16 음성 합성 데이터 셋 제
drawing-thoughts.tistory.com
앞의 글에서 몇 번 언급했지만 음성 합성을 위해서는 (음성 데이터, text)셋이 필요하다.
그리고 음성 파일들을 음성 합성을 위한 데이터로 만들기 위해서는 배경음악 제거, sampling rate 변경, STT 등등 적지 않은 작업이 필요하다.
처음에는 하나씩 따로따로 작업을 실시했지만 작업을 할 때마다 코드를 수정하기도 귀찮고 혹시나 다른 사람들도 나 같은 고생을 하고 있지는 않을까 해서 툴을 하나 만들었다.
오늘은 그 툴에 대한 설명을 해보도록 하겠다.
이제부터 코드 구조와 작동에 대해서 설명 할 것이다. (나중에 기억 안 나면 보려고)
혹시 난 그런거 관심 없고 툴만 사용하고 싶다면 아래 주소에서 README를 읽어보기를 권한다.
README만 읽어도 대략적인 사용법을 알 수 있고, 툴에도 설명을 구석구석 집어넣었으니 사용하기에 어려움은 없을 것이다.
https://github.com/harmlessman/wavfile_as_dataset
GitHub - harmlessman/wavfile_as_dataset: make textset, remove background music, wavfile transform
make textset, remove background music, wavfile transform - GitHub - harmlessman/wavfile_as_dataset: make textset, remove background music, wavfile transform
github.com
준비물 : wav파일들, 위의 소스파일들, 컴퓨터, api key
<참고>
음성 파일의 이름은 (회차) _ (1부터 차례대로 +1).wav 로 통일합니다. 예를 들어 3화에 63번째 음성이면 '3_063.wav'(회차_1부터 차례대로 +1) 규칙을 지킬 필요는 없지만 숫자_숫자.wav 형식의 이름 짓기는 코드 실행에 꼭 필요합니다. 앞의 숫자에 따라 크게 묶어서 데이터를 다룹니다.
위의 형식대로 파일이름을 짓지 않으셔도 툴을 사용 가능하긴 하지만, 세부 작업 불가능.
(빠른 시작(1)만 사용 가능)
main.py는 사용자 인터페이스이다.
툴 사용을 하려면 main.py를 실행하면 된다.
빠른시작을 선택하면 음성 파일들을 음성 합성용 데이터 셋 으로 한 번에 만들어 주고,
만약에 난 특정 작업만 하고 싶다면 각 작업을 선택해서 사용하면 된다.
key.json은 음성 파일들이 들어있는 path와 api key에 대한 정보를 가지고 있다. 사용 하기 전에 path와 key값을
입력하자. 물론 프로그램 시작 할 때, 실행창에서 입력을 해도 상관은 없지만 번거로우니..
set.py는 wav파일들이 있는 path와 api key를 key.json파일에서 읽어 초기 세팅을 한다.
(물론 실행 중 입력도 가능하다)
wav_spleeter.py는 배경음악을 제거를 담당하는 class가 들어 있다.
배경음악 제거에는 spleeter라이브러리를 사용했다.
class안의 함수들은 배경음악 제거, 제거 후 필요 없는 파일 제거 및 결과물 spleeter_out폴더로 이동 등의 작업을 한다.
배경음악 제거 작업에서는 함수에 인자로 시작과 끝 부분을 줄 수 있다. 범위를 인자로 전달하게 되면 그 범위 안의 wav파일들만 배경음악 제거 작업이 가능하다.
wav_transform.py는 배경음악 제거 작업이 끝난 wav파일(spleeter_oout폴더에 있음)들의
sampling rate와 channel을 변경한다.
내가 음성합성에 사용 할 모델인 tacotron2는 기본적으로 22050hz 인 음성파일을 사용한다. 따라서 wav파일의 sampling rate를 변경할 필요가 있다. channel은 모노(1), 스테레오(2)를 의미한다. 확실한 건 아니지만 음성 합성에는 channel을 모노로 하고 합성하는 게 더 낫다는 말이 있어 모노로 변경한다.
transform작업이 끝난 wav파일들은 trans폴더로 이동한다.
wav_to_text.py는 STT(speech to text)작업을 한다.
STT작업을 할 api로 3가지가 주어진다.
- googleweb
- google_cloud_stt
- azure_stt
2, 3은 api key가 필요하니까 참고 바란다.
api하나를 선택하고 범위를 선택하면 그 범위 안의 wav파일들을 STT작업을 거쳐, text값을 얻는다. 얻은 text값들은
json파일 형태로 path에 저장된다. ("wavfile" : "text")
위의 작업들은 class생성과 동시에 이루어지도록 만들었으니 참고 바란다.
aftermath.py는 후처리 작업을 한다.
후처리 작업은 크게 3가지로 이루어져 있다.
- combine
- delete
- target
combine작업은 stt작업으로 생긴 json파일들을 한 json파일로 합치는 작업
delete작업은 사용자가 적합하지 않은 wav파일을 삭제했을 때, 그에 맞게 json파일을 수정하는 작업
target작업은 trans폴더의 wav파일들과 path의 json파일을 위치해야 하는 위치로 이동시킨다.
json파일의 key값을 이동 위치를 반영해서 수정한다.
만드는데 1~2달 정도 걸린 것 같다.
사실 그렇게 어렵거나 복잡한 툴은 아닌데
처음부터 설계를 끝내고 제작한 게 아니라 만들다가 뭐 부족하면 채워 넣고 뭐 맘에 안 들면 갈아엎고 한다고
시간이 좀 걸린 것 같다.
좀 부족하지만 필요한건 다 들어있는 툴이니 필요한 사람이 있으면 써먹길 바란다.
'프로젝트 > 음성합성(tts)' 카테고리의 다른 글
캐릭터 보이스 만들기#8-coqui-tts (0) | 2022.07.14 |
---|---|
캐릭터 보이스 만들기#7-중간 결과 (0) | 2022.07.13 |
캐릭터 보이스 만들기#6-학습 진행 (0) | 2022.05.03 |
캐릭터 보이스 만들기#5-데이터 셋 제작(3-2) (0) | 2022.05.02 |
캐릭터 보이스 만들기#5-데이터 셋 제작(3-1) (0) | 2022.04.21 |