Nhiệm vụ: Khảo sát bộ giải mã ngược: âm thanh → VoiceScenario

Khảo sát bộ giải mã ngược: âm thanh → VoiceScenario

Kiểm tra xem kịch bản của bộ tạo có thể được khôi phục tự động từ âm thanh được ghi lại hay không, trước tiên trên các ví dụ tổng hợp của riêng chúng tôi với ground truth đã biết, sau đó là trên giọng nói của con người.

Mục tiêu

Kiểm tra giả thuyết về tính khả nghịch thực tế của mô hình tham số của chúng ta:

VoiceScenario → bộ tạo → âm thanh

và ngược lại:

âm thanh → bộ giải mã → VoiceScenario.

Nguyên tắc kiểm tra chính

Bắt đầu không phải bằng giọng nói của con người, mà bằng các kịch bản của riêng chúng ta, nơi câu trả lời đúng đã được biết trước.

Đối với kịch bản S:

S → G(S) = X

sau đó:

X → D(X) = S'

Tiêu chí nghiêm ngặt đầu tiên:

nếu bộ giải mã không có khả năng khôi phục ổn định các kịch bản gốc từ âm thanh do chính bộ tạo của chúng ta tạo ra, thì việc nói về giải mã giọng nói thực tế là quá sớm.

Cần kiểm tra trên toàn bộ tập hợp các kịch bản khác nhau có sẵn, chứ không phải trên một trường hợp thành công duy nhất.

Giai đoạn 1. Ground truth tổng hợp

Thu thập một tập hợp các kịch bản hiện có và mới:

  • âm thanh giọng nói duy trì;
  • tiếng ồn;
  • âm bật nổ;
  • các chuyển đổi;
  • âm tiết/phân đoạn;
  • từ ngắn.

Đối với mỗi mục, hãy lưu trữ:

  • JSON gốc;
  • âm thanh được tạo chính xác;
  • nhật ký phân tích chi tiết;
  • kết quả của bộ giải mã;
  • sự khác biệt giữa kịch bản gốc và kịch bản được khôi phục;
  • kết quả tổng hợp lại từ kịch bản được khôi phục.

Chúng ta cần hiểu những tham số nào được khôi phục một cách ổn định, những tham số nào không rõ ràng và độ phân giải nhật ký nào là cần thiết.

Giai đoạn 2. Kiểm tra tổng hợp lại

Không đủ chỉ để nhận được một JSON tươngージ. Kịch bản được khôi phục cần được phát lại:

S → X → D(X)=S' → G(S')=X'

Và so sánh:

  • cấu trúc kịch bản;
  • các đặc điểm phân tích của XX';
  • nhận thức thính giác của con người.

Giai đoạn 3. Chuyển sang giọng nói của con người

Chỉ sau khi hoạt động ổn định trên dữ liệu tổng hợp của chính mình mới chuyển sang ghi âm con người.

Mục tiêu ở đây không nhất thiết phải khôi phục một kịch bản vật lý "thực sự" nào đó của con người mà chúng ta không có. Tiêu chí thực tế:

bộ giải mã tạo ra một VoiceScenario mà khi phát lại sẽ tạo ra âm thanh giống con người có thể nhận biết và khá gần gũi.

Câu hỏi lớn chưa có lời giải

Không gian giọng nói của con người được bao phủ đến mức nào bởi không gian âm thanh hiện tại của bộ tạo của chúng ta.

AudioContext về mặt kỹ thuật có khả năng tái tạo bất kỳ dạng sóng kỹ thuật số nào nếu được cung cấp đầy đủ một mảng các mẫu. Nhưng hệ thống của chúng ta chủ đích thay thế hàng nghìn mẫu bằng một mô tả cấu trúc nhỏ gọn.

Do đó, chúng ta không nghiên cứu khả năng tái tạo nói chung, mà là ranh giới:

độ phức tạp tối thiểu nào của biểu diễn cấu trúc là đủ cho chất lượng giọng nói con người có thể chấp nhận được?

Sự phát triển có thể có của mô hình

Nếu VoiceScenario hiện tại là chưa đủ, không coi đó là sự bác bỏ tự động cách tiếp cận này. Khảo sát việc tăng dần tính biểu cảm:

  • mô hình nguồn phong phú hơn;
  • cộng hưởng/phản cộng hưởng bổ sung;
  • nhiễu loạn/tiếng ồn (turbulence/noise);
  • chi tiết phổ cục bộ;
  • các điểm điều khiển thời gian dày đặc hơn;
  • các thành phần phần dư (residual) ngắn nếu cần.

Giới hạn cuối cùng, biểu diễn có thể tiệm cận với dạng sóng. Mục tiêu thực tế là tìm ra điểm mà chất lượng đã đủ, trong khi mô tả vẫn nhỏ gọn hơn đáng kể và có cấu trúc hơn một mảng các mẫu.

Mối liên hệ với trình chỉnh sửa

Ngay cả một bộ giải mã không hoàn hảo cũng có thể hữu ích nếu nó tạo ra một kịch bản nháp tốt:

bản ghi → VoiceScenario nháp → trình chỉnh sửa trực quan/AI → con người tinh chỉnh bằng tai.

Tiêu chí thành công

  1. Bộ giải mã khôi phục ổn định các kịch bản của chính nó ít nhất trên một tập hợp giới hạn các lớp âm thanh.
  2. Quá trình tổng hợp lại từ kịch bản được khôi phục gần gũi về mặt nhận thức với âm thanh tổng hợp gốc.
  3. Rõ ràng dữ liệu nào bị mất trong quá trình phân tích hiện tại và liệu có cần giảm độ nén nhật ký hay không.
  4. Trên các bản ghi thực tế, ít nhất thu được các kịch bản khởi đầu hữu ích.
  5. Có thể ước tính sự phụ thuộc chất lượng ↔ độ phức tạp/kích thước biểu diễn và tiến gần đến ranh giới thực tế của hệ thống.

Ворклоги

Tiến độ về trực quan hóa và giải mã nghịch đảo

Đã kiểm tra lại ngữ nghĩa của VoiceScenario theo việc triển khai thực tế của synthesizeScenario.

Những gì đã được xác nhận

  • animate.to KHÔNG được đặt lại sau khi duration kết thúc. Khi quá trình tự động hóa hoàn tất, state[param] = to, bản thân tự động hóa bị xóa, nhưng giá trị mới vẫn hoạt động cho đến lệnh tiếp theo.
  • set cũng thay đổi trạng thái vĩnh viễn cho đến khi tham số được thay đổi lần nữa.
  • Một lệnh animate mới bắt đầu từ giá trị hiện tại thực tế của tham số tại thời điểm thực thi lệnh.
  • Đối với một mảng kịch bản, initial chỉ được sử dụng cho kịch bản đầu tiên, các kịch bản tiếp theo tiếp tục trạng thái hiện tại mà không cần đặt lại (reset).

Vấn đề đã tìm thấy ở bộ trực quan hóa (Visualizer)

ScenarioVisualizer cũ chỉ hiển thị các phần animate đang hoạt động, khiến kịch bản ban đầu trông có vẻ "đứt đoạn" về mặt hình ảnh. Điều này không tương ứng với trạng thái thực tế của bộ tổng hợp.

Bộ trực quan hóa đã được thiết kế lại để hiển thị toàn bộ VoiceControlState(t): các giá trị chạy liên tục từ đầu đến cuối kịch bản, bao gồm việc giữ giá trị to cuối cùng sau khi duration kết thúc, set, việc ngắt các tự động hóa cũ và tiếp tục trạng thái giữa các kịch bản ghép nối.

Kết luận về kiến trúc

Logic thực thi kịch bản (prepareScenario, evaluateBezier, updateAutomations, executeCommand) không được trùng lặp giữa bộ tổng hợp và bộ trực quan hóa. Một tác vụ riêng biệt đã được tạo để tách mô-đun thời gian chạy (runtime) chung, sao cho DSP và bộ trực quan hóa sử dụng cùng một cỗ máy trạng thái (state machine).

Kết luận về bộ giải mã hiện tại

Ngay cả sau khi sửa lỗi trực quan hóa, có thể thấy rằng nhật ký (log) và kịch bản hiện tại đang ở các cấp độ biểu diễn khác nhau. Kịch bản chứa các tham số điều khiển, trong khi nhật ký chứa các đặc trưng âm học quan sát được. Sự tương ứng trực tiếp kiểu RMS -> sourceLevel, dominantFrequency -> f0Hz, v.v., trong trường hợp tổng quát là không chính xác.

Cũng đã được xác nhận rằng kịch bản gốc có nhiều tham số điều khiển hơn đáng kể so với nhật ký các chỉ số âm học hiện tại, do đó tính khả nghịch của Scenario -> Sound -> Log -> Scenario bị thiếu xác định về mặt vật lý trong kiến trúc hiện tại.