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-whistle và các ống được đặt tên. piper Để 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ừ ( 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ẽ ở với các thư mục con sau: kho lưu trữ của nó được lưu trữ trên github 2023.11.14-2 /opt/wind (sẽ chứa piper được xây dựng) /opt/wind/piper (sẽ chứa các đường ống được đặt tên) /opt/wind/channels Sau khi giải nén, tệp thực thi piper sẽ có sẵn tại cũng như các thư viện đi kèm và . /opt/wind/piper/piper 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 hoặc 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 . 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 . Giọng nói ở chỉ số 2. Vì vậy, để cài đặt, chỉ cần gọi . gitlab github piper_whistle -vR piper_whistle list -l en_GB -i 2 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: (chấp nhận tải trọng JSON) /opt/wind/channels/speak (được đọc bởi piper) /opt/wind/channels/input (được viết bởi piper) /opt/wind/channels/ouput Để 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 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. aplay 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 . 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 "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"