2012-02-28 71 views
7

Tôi muốn thực hiện một số dự án có âm thanh trong C# .NET 4.0 trong tương lai nên tôi đã thu thập một số mẫu mã để ghi âm, làm việc với tệp WAVE vv. Không thể tìm thấy là:Vẽ đồ thị thời gian thực (dạng sóng)

Làm cách nào để có thể vẽ các dạng sóng/hình ảnh âm thanh trong thời gian thực (ish)? Rõ ràng, việc tạo một bitmap trong bộ nhớ và tải nó vào một hộp hình sẽ rất chậm, phải không? Vì vậy, cách dễ nhất là gì?

Cảm ơn!

+0

Trông giống như một câu hỏi trùng lặp - kiểm tra: http://stackoverflow.com/questions/5606367/how-to-create- sound-spectrogram-in-c (C#, mặc dù liên kết) – holtavolt

+1

Để hiển thị dạng sóng thời gian thực, bạn có thể muốn xem xét đồ họa tăng tốc phần cứng - Tôi không nghĩ rằng GDI + cũ khó có khả năng đối phó quá tốt. Tôi muốn nói điều tốt nhất cần làm là chỉ đơn giản là gửi một bộ đệm vòng chứa dữ liệu âm thanh thẳng vào card đồ họa để hiển thị bằng trình đổ bóng cho kết cấu. Bạn thậm chí có thể làm FFT trong bóng đổ nếu bạn muốn :) – MattDavey

+0

Tôi rất muốn biết câu trả lời cho điều này là tốt. Truyền thuyết cho rằng Direct2D là API vẽ màn hình .NET nhanh nhất, nhưng tôi chưa bao giờ thấy một ứng dụng WinForms sử dụng nó. Bạn có phải sử dụng WinForms không? –

Trả lời

1

Bạn có thể sử dụng GDI + dựa Graphics and Drawing in Windows Forms để vẽ trực tiếp nội dung của mình. Điều này sẽ nhanh hơn nhiều so với hiển thị bitmap và hiển thị trong hộp hình ảnh để thay đổi nội dung liên tục.

+0

Tốt cho một quang phổ, tôi phải rút ra những gì về cơ bản số tiền cho một bitmap. GDI + có xử lý tốt không? – John

+0

@John Tương đối tốt - nó vẫn sẽ nhanh hơn vẽ vào bitmap và hiển thị. –

+0

Tôi không đồng ý. Vẽ trên màn hình kiểm soát là chậm hơn so với bản vẽ một bitmap và thay đổi nó. Tôi đã thử nó với đồng hồ bấm giờ. Dòng 5K. Đây là kết quả: Điều khiển trên màn hình: 2772ms Bitmap & change: 85ms Bộ đệm đôi trên màn hình điều khiển: 2657ms – Onur

1

Chỉ vẽ trực tiếp trên bề mặt điều khiển phù hợp, tức là Bảng điều khiển. Lấy bối cảnh đồ họa của điều khiển và cập nhật nó trong Paint-event bằng cách sử dụng hàm Invalidate(). Mỗi khi bạn vô hiệu hóa, Paint được gọi là automagically. Đây là nơi bạn muốn đặt logic vẽ của bạn.

Cách tốt nhất để cập nhật nó là sử dụng DrawImageUnscaled(). Những hình ảnh riêng của mình được thực hiện nhanh nhất với phương pháp LockBits, giải thích xuất sắc ở đây:

http://www.bobpowell.net/lockingbits.htm

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