Tôi cho rằng tuyến đường dễ nhất để đi là sử dụng API đa phương tiện Windows cũ vì nó thực sự thẳng về phía trước.
Đây là liên kết để MSDN: http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx
Những gì bạn làm là bạn nên sử dụng waveInOpen
chức năng để có được một thiết bị đầu vào. Để tìm ra thiết bị nào để sử dụng, bạn không liệt kê tất cả các thiết bị nhưng bạn có thể truy vấn từng thiết bị. Số lượng thiết bị đã cài đặt được trả về bằng cách gọi waveInGetNumDevs
. Sau đó, bạn có thể gọi waveInGetDevCaps
cho từng thiết bị và kiểm tra các thuộc tính đó.
Khi bạn để thiết bị của mình xử lý, bạn hãy liên tục gọi waveInAddBuffer
để nhận các khối dữ liệu nhỏ. Tùy thuộc vào định dạng bạn đã chỉ định trong waveInOpen
các byte đại diện cho dữ liệu âm thanh thô. Biên độ trong 8 hoặc 16 bit được ký hoặc không được lấy mẫu ở một số tần số.
Sau đó, bạn có thể áp dụng giá trị trung bình lăn để làm mịn tín hiệu và chỉ in ra.
C# không có API âm thanh mà tôi biết, vì vậy những gì bạn làm là bạn sử dụng P/Gọi để nhận các chức năng API Win32. Điều này là khá thẳng về phía trước, bạn chỉ cần cổng các phiên bản nhỏ của các tiêu đề Win32 để có thể gọi chúng từ C# trực tiếp.
Nếu bạn mạnh hơn, bạn có thể viết thư viện trình bao bọc trong C++/CLI. Đó không phải là một ý tưởng tồi vì nó cho phép bạn sử dụng các tệp tiêu đề Windows C/C++ hiện có và kết hợp C++ và mã được quản lý theo các cách intresting. Chỉ cần cẩn thận với các tài nguyên không được quản lý và bạn sẽ có một thư viện intropability rất mạnh mẽ trong thời gian không.
Nhưng cũng có nhiều API âm thanh nâng cao hơn bắt đầu bằng Windows Vista, các thành phần Windows Core Audio có thể thú vị hơn nữa dọc theo dòng. Nhưng đối với hoạt động I/O cơ bản, các chức năng đa phương tiện của Windows sẽ giúp bạn nhanh hơn.
Tôi đã sử dụng các chức năng này trong một số trường hợp khi xây dựng các bộ tổng hợp phần mềm đơn giản. Đáng buồn là mã đã biến mất lâu rồi.
Nguồn
2011-03-09 16:30:24
Bạn đã thử DirectX DirectSound chưa? – JYelton
Bạn đã thử cài đặt chương trình của mình từ "CPU bất kỳ" thành "chỉ 32 bit" chưa? Hầu hết các chương trình không lợi nhuận nhiều từ việc chạy ở chế độ 64 bit. – CodesInChaos
Tôi đã thử điều đó rồi, nhưng không có may mắn cho đến nay. Đã không tìm thấy bất kỳ ví dụ directSound đơn giản nào. Tôi cũng đã thử SlimDX, nhưng có vẻ như, luôn có một số rắc rối với tất cả các ví dụ đó. Bên cạnh đó trong trường hợp của tôi, tôi cần giá trị số nguyên với cập nhật động (lấy mẫu vài lần mỗi giây). Bất cứ ai cũng có một số kinh nghiệm với điều đó? Cảm ơn vì bất kì sự giúp đỡ. – Marian