paint-brush
Cách thiết lập Bộ tổng hợp giọng nói Piper trên máy cục bộby@biq
1,664
1,664

Cách thiết lập Bộ tổng hợp giọng nói Piper trên máy cục bộ

biq2m2023/12/18
Read on Terminal Reader

Chúng ta hãy xem cách người ta có thể thiết lập một bộ tổng hợp văn bản thành giọng nói cục bộ (ngoại tuyến) đặc biệt bằng cách sử dụng piper, piper-whistle và các ống được đặt tên.
featured image - Cách thiết lập Bộ tổng hợp giọng nói Piper trên máy cục bộ
biq HackerNoon profile picture
0-item
1-item

Chúng ta hãy xem cách người ta có thể thiết lập một bộ tổng hợp văn bản thành giọng nói đặc biệt, cục bộ (ngoại tuyến) bằng cách sử dụng piper , piper-whistle và các ống được đặt tên.


Để thiết lập piper trên hệ thống dựa trên GNU/Linux, tôi sẽ mô tả kiến trúc chung bằng cách sử dụng các đường dẫn có tên, đủ đơn giản để cho phép chuyển văn bản thành giọng nói trên toàn hệ thống, với một chút thiết lập thủ công, sự trợ giúp của piper -whistle và một số hạn chế nhỏ (nó đơn giản nhưng không hỗ trợ xử lý giọng nói song song).


Để bắt đầu, hãy tìm nạp piper độc lập mới nhất được xây dựng từ kho lưu trữ của nó được lưu trữ trên github ( 2023.11.14-2 tại thời điểm viết bài này). Sau khi tải xuống kho lưu trữ nén, chúng tôi sẽ tạo cấu trúc thư mục để thiết lập piper. Thư mục gốc sẽ ở /opt/wind với các thư mục con sau:


  • /opt/wind/piper (sẽ chứa piper được xây dựng)
  • /opt/wind/channels (sẽ chứa các đường ống được đặt tên)


Sau khi giải nén, tệp thực thi piper sẽ có sẵn tại /opt/wind/piper/piper cũng như các thư viện đi kèm và espeak-ng-data .

Để quản lý các mẫu giọng nói được piper sử dụng, tôi khuyên bạn nên sử dụng piper-whistle, một tiện ích dòng lệnh được viết bằng python, giúp việc tải xuống và quản lý giọng nói thuận tiện hơn.


Bạn có thể lấy tệp bánh xe mới nhất từ trang phát hành gitlab hoặc github của nó. Sau khi cài đặt tệp bánh xe, hãy tìm nạp một giọng nói để tạo ra một số giọng nói. Trước tiên hãy cập nhật cơ sở dữ liệu bằng cách gọi piper_whistle -vR . Về phần nói tiếng Anh, tôi khá thích giọng nữ gọi là alba. Sử dụng còi, chúng ta có thể nhận được danh sách tất cả các giọng nói tiếng Anh (GB) có sẵn bằng cách sử dụng piper_whistle list -l en_GB -i 2 . Giọng nói ở chỉ số 2. Vì vậy, để cài đặt, chỉ cần gọi piper_whistle install en_GB 2 .


Tiếp theo, hãy tạo các pipe có tên cần thiết. Cấu trúc kết quả sẽ trông như thế này:

  • /opt/wind/channels/speak (chấp nhận tải trọng JSON)
  • /opt/wind/channels/input (được đọc bởi piper)
  • /opt/wind/channels/ouput (được viết bởi piper)


Để tạo một đường dẫn có tên, bạn có thể sử dụng lệnh sau: mkfifo -m 755 /opt/wind/channels/input


Cuối cùng, chúng tôi tạo ba quy trình trong các shell riêng biệt:

  • tty0: tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
  • tty1: /opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
  • tty2: aplay --buffer-size=777 -r 22050 -f S16_LE -t raw < /opt/wind/channels/output


Quá trình trên tty0 đảm bảo rằng đường ống được giữ mở, ngay cả sau khi quá trình xử lý bằng piper hoặc aplay kết thúc. Bằng cách này, chúng tôi có thể xếp hàng các yêu cầu TTS và sau đó phát hoặc lưu chúng.


Vì piper-whistle cung cấp các tính năng bổ sung nếu bạn sử dụng cấu trúc ở trên nên giờ đây chúng tôi có thể tạo giọng nói thông qua piper_whistle speak "This is quite neat" . Trên các hệ thống có X11, bạn có thể tạo phiên bản nói của văn bản trong khay nhớ tạm của mình thông qua piper_whistle speak "$(xsel --clipboard --output)" .