Thanhvo31
Well-Known Member
Đây là ý tưởng thiết kế của tay DEV @paparious, dịch tiếng Nhật qua tiếng Việt bằng GG TranslateCái này dành cho FrontEnd. Còn BackEnd mình dùng cái gì? Phải có BackEnd tương ứng mới được. Anh tìm hiểu xem họ dùng BackEnd bằng cái nào để chạy với FrontEnd này.
Theo đuổi tải trọng thấp
I2S thường dễ bị nhiễu và người ta nói rằng khoảng cách tối đa có thể được định tuyến là khoảng 10 cm. Để tránh ảnh hưởng của nhiễu, nên làm cho đường truyền của tín hiệu I2S càng ngắn càng tốt.
Mặt khác, thiết bị là nguồn của tín hiệu I2S cũng là nguồn nhiễu. Cho dù đó là một DDC nhận S / PDIF hoặc USB, hay một máy tính đơn lẻ trực tiếp xuất ra I2S, nó vẫn là nguồn nhiễu khiến máy vi tính / FPGA / CPU ở tốc độ cao phát ra tiếng ồn. Nên thực hiện các biện pháp EMC như cách điện đường dẫn và che chắn nguồn bằng tấm kim loại để giảm thiểu ảnh hưởng đến đường truyền tín hiệu, chip DAC và xung nhịp.
Bây giờ hãy xem xét một cách tiếp cận khác. Bằng cách giảm tải cho CPU và bộ nhớ, có thể giảm lượng nhiễu do hệ thống xử lý kỹ thuật số phát ra. Ngay cả khi nguồn nhiễu và hệ thống xử lý D / A ở gần nhau và các biện pháp đối phó EMC gặp khó khăn, chẳng hạn như trên bảng HAT, thì cách tiếp cận này dường như là thực tế.
Có thể giảm tải bao nhiêu cho hệ thống xử lý kỹ thuật số? Có thể cải thiện chất lượng âm thanh sau khi giảm tải không?
Nhiệm vụ để xem đó là điểm khởi đầu cho Âm thanh trên Ether.
Truy cập bộ nhớ trực tiếp từ xa
BCM2711 là SoC (Hệ thống trên chip) của Raspberry Pi 4 được trang bị chức năng đầu ra I2S (bộ nối tiếp).
Quá trình xử lý tối thiểu cần thiết để xuất ra tín hiệu I2S từ bộ nối tiếp này chỉ là hai bước sau.
- Hướng dẫn chuyển DMA từ bộ đệm DMA sang bộ nối tiếp.
- Ghi dữ liệu PCM vào bộ đệm DMA.
Để hướng dẫn truyền DMA, cần chuẩn bị một cấu trúc dữ liệu được gọi là khối điều khiển và tải nó vào bộ điều khiển DMA.
Khối điều khiển này giữ địa chỉ bộ nhớ của bộ đệm DMA và địa chỉ của khối điều khiển sẽ được xử lý tiếp theo, và bộ điều khiển DMA thực hiện truyền DMA trong khi đọc khối điều khiển này lần lượt.
Lệnh truyền DMA chỉ cần được đưa ra một lần trước khi bắt đầu phát lại và tỷ lệ của nó với tải phát lại là rất nhỏ. [1]
Bây giờ, chúng ta hãy phân phối giải mã tệp âm thanh và phát lại PCM cho hai máy để giảm tải. Ở đây, vai trò giải mã được gọi là kết thúc phía trước, và vai trò phát lại được gọi là kết thúc phía sau.
Trong cấu hình phân phối tải như vậy, dữ liệu PCM được truyền từ đầu cuối đến đầu sau thông qua mạng.
Nếu dữ liệu PCM nhận được bởi chương trình phụ trợ có thể được ghi vào bộ đệm DMA như hiện tại, thì tất cả quá trình xử lý cần thiết để phát lại sẽ được hoàn thành và đây có vẻ là hoạt động đơn giản nhất.
Tuy nhiên, quá trình xử lý mạng thông thường đòi hỏi nhiều bước trước khi dữ liệu có thể đến được ứng dụng qua mạng LAN.
- Trước hết, khi giao diện mạng (nghĩa là, cổng LAN) nhận dữ liệu, nó sẽ thông báo cho kernel bằng ngắt phần cứng để hàng đợi trên phần cứng không đầy.
- Hạt nhân được gọi sao chép dữ liệu từ hàng đợi và ghi nó vào bộ đệm trên hạt nhân.
- Sau đó, việc triển khai mạng hạt nhân (ngăn xếp TCP / IP) thực hiện kiểm soát thứ tự, kiểm tra lỗi và kiểm soát truyền lại, và chuẩn bị cho việc chuyển tới ứng dụng.
- Khi quá trình chuẩn bị hoàn tất, ứng dụng (ví dụ, phần mềm phát nhạc) nhận được thông báo từ hạt nhân, sao chép dữ liệu từ bộ đệm hạt nhân và ghi dữ liệu đó vào bộ đệm do ứng dụng chuẩn bị. Nó nhiều hơn một chút.
- Tại thời điểm này, phần mềm phát lại có thể đọc dữ liệu trong bộ đệm và phân tích nội dung. Nếu bạn cắt phần dữ liệu PCM và sao chép nó vào bộ đệm ALSA, quá trình phát lại thành công.
Chỉ sao chép dữ liệu vào bộ nhớ vật lý một lần. Điều này được chuyển trực tiếp DMA đến bộ nối tiếp. Nếu có thể đạt được điều này, không cần sao chép thêm dữ liệu, không yêu cầu lệnh gọi hệ thống đọc / ghi, không cần chuyển đổi ngữ cảnh và bộ nhớ đệm CPU không bị ô nhiễm bởi lượng lớn dữ liệu. Tất cả đều tốt về mặt giảm tải. Bạn sẽ có thể giảm thiểu hoạt động của CPU / bộ nhớ.
Để thuận tiện, đối với các gói không phải PCM, điều khiển được thực hiện để các bước sau 2) được thực hiện như bình thường. Thật bất tiện khi bạn không thể kết nối với ssh.
Việc triển khai Âm thanh qua Ether như vậy có thể tìm thấy điểm tương đồng với ý tưởng Truy cập Bộ nhớ Trực tiếp Từ xa (RDMA), truyền dữ liệu trực tiếp đến các ứng dụng trên các máy từ xa.
Đó là bởi vì nó nhận ra mục đích của RDMA, không sao chép .
Âm thanh qua Ether có thể được mô tả giống như RDMA, chuyên dùng để phát lại nhạc .