Thuật toán hồi âm chất lượng cao


11

Tôi đã tìm kiếm một chút trên trang này nhưng thật ngạc nhiên, tôi không tìm thấy nhiều thông tin liên quan và kiến ​​thức về DSP của tôi rất hạn chế.

Mục tiêu của tôi khá đơn giản: Tôi muốn lập trình một hồi âm thuật toán trong C ++, âm thanh thực sự tốt. Hay chính xác hơn, tùy chọn tốt nhất sẽ là để người dùng cuối chọn sự đánh đổi giữa chất lượng và việc sử dụng cpu.

Từ những gì tôi phát hiện ra cho đến nay, để tạo ra một hồi âm, bạn phải đưa tín hiệu khô vào thuật toán phản xạ sớm, sau đó đến một phản xạ muộn. Điều này có đúng không?

Bây giờ, tôi đã tìm thấy một bài viết rộng rãi về phần phản xạ muộn, bằng cách sử dụng Mạng trì hoãn phản hồi ( GIẢM YÊU CẦU YÊU CẦU TUYỆT VỜI SỬ DỤNG MẠNG TRẢ LÃI THỜI GIAN TẠM THỜI GIỜ ). Từ những gì tôi đã đọc, FDN là một cách mô phỏng chất lượng cao, không quá mở rộng (cpu khôn ngoan) để mô phỏng các phản xạ muộn. Hơn nữa, tôi đoán bạn có thể kiểm soát sự đánh đổi chất lượng / cpu bằng cách thay đổi số lượng dòng trễ.

Tuy nhiên tôi hoàn toàn không biết làm thế nào để lập trình các phản xạ sớm (nhớ không? Tôi thực sự không biết gì về miền DSP).

Tôi nghe có vẻ hợp lý khi sử dụng một loại độ trễ đa, có ưu điểm là dễ lập trình và tính toán không tốn kém. Nhưng điều đó nghe có vẻ quá đơn giản.

Hơn nữa, bản năng của tôi nói với tôi rằng một hoặc một vài bộ lọc phải được đưa vào đâu đó trong đường dẫn tín hiệu.

Ai đó có thể xin vui lòng làm rõ chủ đề này một chút cho tôi?

Hai lưu ý:

  • Tôi không phải là một hồi âm chập chững chút nào. Tôi không thực sự quan tâm đến chủ nghĩa hiện thực của âm vang, nhưng thay vào đó tôi muốn có một âm thanh tốt, có thể điều chỉnh được, không phải là âm vang đói.
  • Ngoài ra, phần mã hóa không phải là điều khiến tôi lo lắng, nếu không tôi sẽ hỏi về stackoverflow. Đây thực sự là phần DSP, và chỉ phần đó, mà tôi đang theo sau :)

Câu trả lời:


10

Bạn cần tạo ra các phản xạ sớm với một vài lần trì hoãn (= tích chập với tổng số một số dirac); và "cái đuôi" với những gì thường được thực hiện với một mạng gồm tất cả các bộ lọc (AP) và bộ lọc lược.

Phần đầu tiên là tầm thường để thực hiện nhưng khó để có được âm thanh đúng. Nó có thể giúp xem xét vị trí của các đỉnh ở đầu các phản ứng xung được ghi lại trước để có ý tưởng về loại phản ứng nào là "tự nhiên". Thật khó để làm cho nó dễ dàng được tham số hóa bằng một vài cài đặt, mặc dù bạn có thể thoát khỏi nó bằng cách cung cấp một loạt các cài đặt trước cho phần này để có được một phản xạ "lai" của Virsyn.

Đuôi là nơi các thuật toán hồi âm tỏa sáng (không có ý định chơi chữ), vì nó rất dễ bị parametrize. Ông của các thuật toán hồi âm là Schroeder'sthuật toán. Lưu ý rằng nó chỉ tạo ra một "cái đuôi", chứ không phải phản xạ sớm - bạn có thể tăng nó bằng một vài lần trì hoãn để cho nó một cái đầu. Nghe có vẻ không hay lắm (rất "hạt") nhưng đó là một khởi đầu tốt - với việc bạn có điều gì đó để giải quyết và nó giúp hiểu được tác động của từng thông số. Nhiều hồi âm thuật toán được ca ngợi, đặc biệt là các hồi âm từ thập niên 80 (Lexicon, Eventide, Publison) chỉ là các cấu trúc liên kết tinh chỉnh của bộ lọc all-pass và bộ lọc lược. Tôi nghi ngờ điều này liên quan đến rất nhiều thử nghiệm và lỗi bởi những đôi tai được đào tạo, những người rất giỏi trong việc tìm ra những thay đổi trong thông số hoặc cấu trúc liên kết sẽ như thế nào, hơn là bất kỳ phương pháp khoa học nào. Đây là một đọc thú vị- hiển thị cấu trúc liên kết hồi âm yêu thích của Keith Barr. Midiverb ban đầu có thể không phải là định nghĩa của bạn về "hồi âm thuật toán chất lượng cao", nhưng nghe có vẻ ngọt ngào, và điều đó đặt ra trong viễn cảnh để biết nó được tạo ra với "dsp" chỉ có khả năng MAC với hệ số 0,5 ...

Phòng Valhalla là hồi âm thuật toán phần mềm yêu thích của tôi - hãy dành chút thời gian để đọc blog của nhà phát triển để tìm cảm hứng về loại điều giúp làm cho đúng.


2
Quên đề cập đến Freeverb như một biến thể hiện đại hơn (có sẵn mã, có thể được tìm thấy, ví dụ như trong csound, hoặc ladspa codebase) của thuật toán Schroeder's.
pichenettes

Rất thú vị ! Tôi cũng yêu các sản phẩm của Valhalla (ValhallaShimmer tỏa sáng, cũng không có ý định chơi chữ nào :)). Tại sao bạn đề cập đến tích chập cho phản xạ sớm? Shold một sự chậm trễ đa nhiệm bình thường đủ?
Dinaiz

1
Tôi đã đề cập đến tích chập vì "độ trễ đa điểm" chỉ là một loại tích chập cụ thể (với một vài hệ số không null, vì vậy nó có thể được tính theo cách ngây thơ và không có pháo liên quan đến các kết cấu "dày đặc"). Dù sao, như Hilmar đã chỉ ra, độ trễ đa âm có thể hơi ngây thơ và sau một vài phản xạ, do đó, việc lan truyền theo thời gian (= lọc thông thấp) âm thanh sẽ nghe tự nhiên hơn. Điều này có thể được thực hiện với độ trễ nhiều chạm với LP đơn giản cho mỗi lần nhấn; hoặc bằng cách tính toán trực tiếp toàn bộ phần phản xạ sớm của hồi âm với một công cụ tích chập và các IR được cài sẵn.
pichenettes

8

Làm cho một âm vang tốt là KHÔNG dễ dàng. Mạng chậm phản hồi chắc chắn là con đường để đi. Các thuật toán Schroeder ban đầu với tất cả các đường chuyền và bộ lọc lược bị "mỏng quang phổ" làm cho nó có âm thanh kim loại. Bạn cần quay số suy giảm phụ thuộc tần số trên các đường trễ khác nhau đại diện cho thời gian hồi âm (như là một hàm của tần số). Phản xạ sớm có thể được thực hiện thông qua một đường trễ trễ với một số suy giảm phụ thuộc tần số và một vài bộ khuếch tán để khử tương quan chúng. Làm âm thanh nổi cũng đòi hỏi một số phương tiện không tương quan.

Có một triển khai nguồn mở khá tốt đang nổi xung quanh, nó được gọi là GVerb và được sử dụng trong đó, ví dụ như Audacity. Một tìm kiếm google sẽ đưa bạn đến một bản sao (hợp pháp) của mã nguồn.


Từ bài viết của bạn nghe có vẻ dễ dàng! Ít nhất tôi có thể hiểu nó, ngoại trừ phần về tương quan. Bạn có ý nghĩa chính xác bởi điều đó? Ngoài ra về sự suy giảm phụ thuộc tần số, tôi đoán bạn có nghĩa là loại bỏ một số bộ lọc và tinh chỉnh bằng tai, đó là tần số cho mỗi dòng. Những loại bộ lọc chúng ta đang nói về mặc dù? HP? LP? HA? Cảm ơn !
Dinaiz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.