2017-10-25 18 views
9

Tôi đang xây dựng một chương trình đơn giản có thể nói số điện thoại bằng giọng nói của con người.Thuật toán để ghép nối âm thanh lời nói với âm thanh liên tục?

Vì vậy, tôi đã ghi lại trước mỗi chữ số (với các ngữ điệu khác nhau) và khi tôi nhận được một số tôi tham gia các tệp âm thanh và phát chúng cùng với một số khoảng lặng được thêm vào giữa các số.

Tuy nhiên, điều này không có vẻ trơn tru hoặc tự nhiên.

Tôi đã cố gắng để đạt được bình thường và tiến độ bình thường trên các tệp nhưng có vẻ như tôi cần tham gia chúng theo cách "thông minh" để quá trình chuyển đổi có vẻ tự nhiên.

Tôi đã tìm một số thuật toán để thực hiện điều đó nhưng không tìm thấy gì.

Có phương pháp nào được biết cho điều đó không?

Cảm ơn.

+0

Sẽ hữu ích nếu bạn có thể thêm trực quan hóa một tín hiệu kết quả bao gồm cả phổ. Bạn có thể sử dụng [praat] (http://www.praat.org) cho điều đó. Nó sẽ làm mọi việc dễ dàng hơn như phát hiện các vấn đề đơn giản hơn, ví dụ: liên quan đến sự chuyển tiếp của tiếng ồn thành im lặng tuyệt đối. –

+0

Nếu bạn đang theo một cách tiếp cận đơn giản, bạn có thể nhìn vào "legato" (từ âm nhạc) và áp dụng cho giọng nói bằng cách ghi "legatos" giữa các số khác nhau và sử dụng để chuyển đổi. – K3N

Trả lời

8

Thuật toán được gọi là PSOLA. Có những biến thể như TD-PSOLA.

Nhìn chung, có nhiều thứ ở đây - cách quyết định mục nào sẽ tham gia dựa trên thuộc tính âm thanh, ngữ điệu nguồn và ngữ điệu bắt buộc. Đó là tất cả khá phức tạp để thực hiện vì vậy nó là tốt hơn để sử dụng hệ thống TTS nguồn mở hiện có và tổng hợp hiện có mà có tất cả những điều được bảo hiểm. Bạn có thể kiểm tra festvox hoặc Openmary.

+0

Cảm ơn .. Tôi nghĩ rằng vấn đề của tôi đơn giản hơn nhiều so với TTS đầy đủ. Tôi luôn luôn tham gia các từ với không gian xung quanh. – Ran

+3

Sự im lặng giữa các từ luôn âm thanh không tự nhiên, nó rất hiếm trong bài phát biểu thực sự. Nếu bạn muốn tổng hợp các bài phát biểu tự nhiên và bạn thực sự quan tâm đến người dùng của bạn, bạn nên tham gia các từ liên tục. –

+0

Cảm ơn. Bạn có ý gì khi tham gia liên tục? Cặp từ? @nikolay – Ran

0

Con người là số điện thoại chính tả theo khối số.

Thông thường, khối sẽ chứa từ 1 đến 4 số và đôi khi một số điện thoại sẽ kết hợp loại kích thước khác nhau.

Để tạo một cái gì đó mà đánh vần một số điện thoại như một giọng nói tự nhiên, bạn cần phải xác định ít nhất hai im lặng khác nhau biến:

  • dtNumber = im lặng áp dụng beetween hai con số trong một khối

  • dtBlock = im lặng áp dụng giữa hai khối số

chia Đầu số điện thoại như một danh sách block:

01-12-13-14-15 => [01,12,13,14,15]

1-888-452-1505 => [1,888,452,1505]

lặp trên tất cả các khối (chờ đợi dtBlock giây beetween hai trong số họ):

&

lặp qua số của mỗi khối (chờ đợi dtNumber giây).

Nếu bạn áp dụng một cái gì đó như dtBlock> = 2 x (dtNumber), bạn sẽ có một tệp âm thanh trông giống như tự nhiên.

Các vấn đề liên quan