Piper, Piper -Whistle 및 Named Pipe를 사용하여 임시 로컬(오프라인) 텍스트 음성 변환 합성기를 설정하는 방법을 살펴보겠습니다.
GNU/Linux 기반 시스템에서 파이퍼를 설정하기 위해 명명된 파이프를 사용하는 일반 아키텍처를 설명하겠습니다. 이는 약간의 수동 설정과 파이퍼의 도움으로 시스템 전체의 텍스트 음성 변환을 허용할 만큼 충분히 간단합니다. -휘파람 소리와 약간의 절충점(간단하지만 병렬 음성 처리를 지원하지 않습니다).
시작하려면 github에 호스팅된 저장소 (이 글을 쓰는 당시 2023.11.14-2 )에서 구축된 최신 파이퍼 독립 실행형을 가져오겠습니다. 압축된 아카이브를 다운로드한 후 파이퍼 설정을 위한 디렉터리 구조를 만듭니다. 루트 디렉터리는 다음 하위 디렉터리와 함께 /opt/wind
에 있습니다.
/opt/wind/piper
(파이퍼가 내장되어 있음)/opt/wind/channels
(이름이 지정된 파이프가 포함됨)
압축을 푼 후에는 파이퍼 실행 파일을 /opt/wind/piper/piper
와 함께 제공되는 라이브러리 및 espeak-ng-data
에서 사용할 수 있습니다.
Piper가 사용하는 음성 모델을 관리하려면 Python으로 작성된 명령줄 유틸리티인 Piper-whistle을 사용하는 것이 좋습니다. 이를 사용하면 음성을 더 편리하게 다운로드하고 관리할 수 있습니다.
gitlab 또는 github 릴리스 페이지에서 최신 휠 파일을 얻을 수 있습니다. 휠 파일을 설치한 후 음성을 가져와서 음성을 생성해 보겠습니다. 먼저 piper_whistle -vR
호출하여 데이터베이스를 업데이트하겠습니다. 영어발화에서는 알바라는 여자 목소리를 꽤 좋아해요. 휘파람을 사용하면 piper_whistle list -l en_GB -i 2
를 사용하여 사용 가능한 모든 영어(GB) 음성 목록을 얻을 수 있습니다. 음성은 인덱스 2에 있습니다. 따라서 설치하려면 간단히 piper_whistle install en_GB 2
호출하세요.
다음으로 필요한 명명된 파이프를 만들어 보겠습니다. 결과 구조는 다음과 같습니다.
/opt/wind/channels/speak
(JSON 페이로드 허용)/opt/wind/channels/input
(파이퍼가 읽음)/opt/wind/channels/ouput
(파이퍼가 작성)
명명된 파이프를 생성하려면 다음 명령을 사용할 수 있습니다: mkfifo -m 755 /opt/wind/channels/input
마지막으로 별도의 셸에 세 가지 프로세스를 만듭니다.
tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
/opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
aplay --buffer-size=777 -r 22050 -f S16_LE -t raw < /opt/wind/channels/output
tty0의 프로세스는 파이퍼나 플레이 에 의한 처리가 완료된 후에도 파이프가 열린 상태로 유지되도록 합니다. 이런 방식으로 TTS 요청을 대기열에 추가한 후 재생하거나 저장할 수 있습니다.
Piper-whistle은 위의 구조를 사용하는 경우 추가 기능을 제공하므로 이제 piper_whistle speak "This is quite neat"
음성을 생성할 수 있습니다. X11이 있는 시스템에서는 piper_whistle speak "$(xsel --clipboard --output)"
을 통해 클립보드에 텍스트의 음성 버전을 생성할 수 있습니다.