Tesulakata
Tổng số bài gửi : 141 Experience : 240 Đã được cảm ơn : 1 Join date : 18/05/2011 Age : 48 Đến từ : Heaven
| Tiêu đề: [C#] Sử dụng Trackbar để điều chỉnh âm thanh * Wed May 18, 2011 10:08 pm | |
| | | | | [C#] Sử dụng Trackbar để điều chỉnh âm thanh *
Nguồn http://k14ktqs.cntt.in/
- Trích dẫn :
- Trong bài viết này bạn sẽ học cách làm sao lấy ra và thay đổi âm lượng của sound card bằng cách sử dụng gọi các phương thức waveOutGetVolume() và waveOutSetVolume() từ các Windows API không quản với C# thông qua P/Inboke.
.NET framework có nhiều phương thức cho phép bạn có thể sử dụng để lấy về và thiết lập các cài đặt hệ thống, tuy nhiên việc điều khiển âm lượng bên ngoài của soundcard thì lại không nằm trong các phương thức ấy. Vì thế, chúng ta sẽ không có tùy chọn nào khác ngoài cách phải dùng đến Windows API không quản, cụ thể là gọi các hàm waveOutGetVolume() và waveOutSetVolume() từ thư viện winmm.dll.
Bắt đầu là tạo 1 project mới, kéo từ toolbox cái trackbar ra form, thêm cái label cho nó chuyên nghiệp Bạn cũng có thể đặt ngang hay đọc tùy chương trình mình làm thôi:2:
sang properties rồi sửa giá trị Orientation thành Vertical
Nó thành ra thế này
Cũng không có thuộc tính nào của điều khiển TrackBar cần phải thay đổi - thuộc tính Minimum và Maximum nên để cho nó có giá trị mặc định tương ứng là 0 và 10. Điều này sẽ để cho điều khiển của chúng ta có 10 bước nhảy để điều khiển âm thanh. Tất nhiên, bạn có thể vặn cho nó theo ý thích của bạn, trong trường hợp bạn muốn để người dùng có khả năng điều chỉnh mức âm thanh mịn hơn.
đầu tiên bạn phải using thư viện
Bây giờ chúng ta có thể gọi đến hai hàm từ winmm.dll. DLL này được đặt trong thư mục Windows System32 và có kích thước khoảng 172 KB.
- Code:
-
[DllImport("winmm.dll")] public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume); [DllImport("winmm.dll")] public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
Đến giờ chúng ta đã sẵn sàng để gọi đến các hàm, nhưng không giống như các cuộc gọi Windows API khác, có hai vấn đề hơi khó khăn và chúng ta cần phải làm một số tính toán trước khi có thể lấy ra và thiết lập âm lượng. Để cho ứng dụng của chúng ta làm việc đúng cách, điều trước tiên chúng ta cần làm là lấy về mức âm lượng âm thanh hiện thời và thiết lập nó lên trên TrackBar (trackWave), nếu không thì nó sẽ luôn luôn có giá trị mặc định là 0. Chúng ta muốn làm điều đó mỗi khi ứng dụng được nạp, vì thế người sử dụng ngay lập tức thấy TrackBar được điều chỉnh đúng khi ứng dụng khởi động chạy. Do đó, trong hàm khởi tạo của form (Form1()) ngay sau dòng lệnh InitializeComponent() chúng ta sẽ đặt các dòng code sau:
- Code:
-
// gán mặc định khi khởi động =0 uint CurrVol = 0; waveOutGetVolume(IntPtr.Zero, out CurrVol); ushort CalcVol = (ushort)(CurrVol & 0x0000ffff); // gán 1 giá trị tăng lên bằng 1/10 âm lượng trackWave.Value = CalcVol / (ushort.MaxValue / 10);
Lúc này bạn có thể biên dịch ứng dụng, và bạn sẽ thấy trackbar được điều chỉnh đúng với mức âm lượng âm thanh hiện tại. Bây giờ chúng đã sẵn sàng cho việc thay đổi âm lượng bằng cách sử dụng hàm waveOutSetVolume(). Chúng ta sẽ làm điều đó bên trong sự kiện Scroll của trackWave (điều khiển TrackBar). Để nhận được handler của sự kiện đó, bạn có thể đơn giản chỉ việc click vào điều khiển bên trong phần thiết kế form. Bây giờ, bên trong handler của sự kiện trackWave_Scroll(), dùng đoạn code như sau:
- Code:
-
int NewVolume = ((ushort.MaxValue / 10) * trackWave.Value);
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
[/color] | | | |
|
|