Xử lý khi bị đầy bộ đệm trong Naudio

Chào mọi người!
Em hiện đang ghi âm và xử lý âm thanh đồng thời xuất ra loa xử dụng Naudio tuy nhiên tốc độ xử lý không kịp với dữ liệu tới cụ thể code(C#) như ở đây
làm sao để xử lý nhanh hơn được ạ em có tìm hiểu về đa luồng nhưng không biết cách thực hiện với lại làm sao để cho ngõ ra vẫn liên tục được ạ.

Hi there,

Disclaim: Tớ không biết gì về Naudio cho tới 1h trước.

Câu hỏi trong SO với câu hỏi của cậu ở đây tương đối khác nhau.
Về cơ bản, cậu gặp lỗi “Buffer full”, xảy ra khi cậu đọc từ buffer chậm hơn tốc độ ghi vào buffer. Cậu muốn sử dụng mutithread để giải quyết vấn đề, nhưng:

  • Cậu chưa biết dùng multithread để làm gì. Như hình vẽ của cậu, cậu có 1 thread ghi vào buffer (màu đỏ), và 1 thread đọc từ buffer ra (màu đen), điều mà thực tế Naudio đã làm.
    Tớ đoán ý cậu là sử dụng multithread để đồng thời đọc ra từ buffer, tuy nhiên, nó sẽ không nhanh hơn (vì vấn đề không nằm ở đó :smile:), và cậu sẽ gặp vấn đề để đồng bộ kết quả giữa các thread lại với nhau. Chữa lợn lành thành lợn què là câu nói mô tả tình huống này :sweat_smile:
    Tớ hiểu là cậu chỉ nghĩ multithread là silver bullet để làm mọi thứ nhanh hơn, nhưng thực ra không phải đâu :smile:
  • Multithread không giải quyết vấn đề xử lý nhanh - chậm mà cụ thể thao tác xử lý của cậu làm. Cậu nên optimize thao tác đó để có tốc độ đọc buffer nhanh hơn.
  • Cậu nên đọc hiểu từng dòng và viết lại code của cậu, tớ không chắc nó đúng đâu :wink: Và có thể vấn đề của cậu nằm ở chỗ khác, ví dụ như cậu đọc ra từ buffer đúng 1 lần duy nhất chẳng hạn :smile: (tớ không thấy có bất cứ vòng lặp, hay delegate/event handler nào phục vụ việc đọc, chỉ có event handler sẽ được trigger khi có data).

Hi vọng những chỉ dẫn ở trên đây giúp cậu có hướng đi tiếp. Có gì update mới, hay có câu hỏi gì mới, cậu cứ hỏi nhé! :smile:

6 Likes

Cảm ơn bạn đã giúp đỡ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?