SỐ 139
KINH NGHIỆM LẬP TRÌNH

Dành cho U16: Làm quen với C# và .NET
Lập trình DirectSound: Thêm chức năng điều khiển khi chơi tập tin .WAV
Anh SI SÁP

- Anh Si Sáp nè, chương trình chơi tập tin âm thanh của mình còn thiếu chức năng Stop nên sau khi bấm nút Play, nếu mình thấy "hổng hạp" thì đành phải nghe cho hết hoặc bấm nút Kết thúc. Kỳ quá hà!

-  Xem nào, lớp SecondaryBuffer có hàm Stop(), dùng để dừng việc phát ra âm thanh. Vậy thì em hãy giúp anh đặt thêm vào biểu mẫu một nút lệnh mới có tên là btnStop và có thuộc tính TextStop (H.1). Tiếp theo, em bấm kép vào nút lệnh Stop này. Trong cửa sổ tập tin nguồn Form1.cs sẽ xuất hiện hàm đáp ứng tình huống Click của nút lệnh này, tên là btnStop_Click. Em thêm vào trong hàm này các lệnh như vầy (đoạn mã 1).


Hình 1

Đoạn mã 1

private void btnStop_Click(object sender, System.EventArgs e)
{
if (SoundBuffer != null && SoundBuffer.Status.Playing)
{
SoundBuffer.Stop();
}

}

- Ủa, sao mình không gọi ngay hàm SoundBuffer.Stop() mà phải đặt trong điều kiện if vậy anh?

- Nếu như SoundBuffer chưa được tạo ra hoặc vì lý do nào đó việc tạo ra SoundBuffer không thành công mà mình lại gọi hàm Stop() của nó thì chương trình sẽ bị lỗi trong lúc chạy (runtime error). Ngoài ra, trước khi gọi hàm Stop() mình phải kiểm tra tình trạng hoạt động của SoundBuffer, chứ nếu chương trình đã chơi xong rồi thì còn "xì-tốp" làm chi nữa! Bây giờ em thử cho biên dịch và chạy chương trình xem. À, có lẽ phải tìm tập tin WAV nào dài dài một chút. Nếu tập tin WAV ngắn quá, mình vừa bấm nút Play, nó chỉ kêu "thất thanh" vài tiếng "tứng từng" rồi im thì nút bấm Stop trở nên vô dụng!

Tí Cận chạy chương trình, bấm nút Play, xong bấm nút Stop rồi lại bấm nút Play. Âm thanh tiếp tục phát ra từ chỗ vừa dừng chứ không chơi lại từ đầu.

- Ủa, sao nút Stop này hoạt động giống nút Pause vậy anh?

Anh Si Sáp gãi đầu:

- Ờ... ờ... Để anh “nghiên kíu” tiếp xem sao... À, đây rồi! Muốn cho chương trình chơi lại từ đầu thì phải gọi hàm SetCurrentPosition() với tham số là 0 để "tua" về đầu vùng đệm. Mình viết thêm trong hàm đáp ứng btnStop_Click() như thế này (đoạn mã 2). Rồi, em thử chạy lại xem sao.

Đoạn mã 2

private void btnStop_Click(object sender, System.EventArgs e)
{
if (SoundBuffer != null && SoundBuffer.Status.Playing)
{
SoundBuffer.Stop();
SoundBuffer.SetCurrentPosition(0);
}
}

- A, lần này thì đúng là Stop chứ không phải Pause nữa anh ạ.

- Vậy em tự thêm chức năng Pause cho chương trình này được không?

- Chưa biết thì thấy khó, biết rồi thấy...cũng khó! Hì hì... Nói chơi chứ em biết phải làm gì rồi. Chỉ việc tạo thêm một nút lệnh Pause, đặt tên là btnPause,  trong biểu mẫu (H.2). Bấm kép vào nút lệnh này trong biểu mẫu để vào hàm đáp ứng btnPause_Click(). Mình “rinh” nguyên phần “ruột” của hàm đáp ứng chức năng Stop đặt vào đây và bỏ đi dòng lệnh gọi hàm SetCurrentPosition(), phải không anh?


Hình 2

- Tốt! Thôi mình nghỉ đi. Nãy giờ ngó màn hình mỏi mắt, lại phải nghe "chương trình ca nhạc bắt buộc" đến... mỏi tai. Mình ra sân chơi cầu lông một chút, em chịu không?

[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn