Phát Tiếng “beep” Của Hệ Thống - Tài Liệu Text - 123doc

  1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Kỹ thuật lập trình >
Phát tiếng “beep” của hệ thống

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.15 MB, 706 trang )

311Chương 8: Đồ họa, đa phương tiện, và in ấnusing System;using System.Runtime.InteropServices;using Microsoft.VisualBasic;public class BeepTest {[DllImport("kernel32.dll")]private static extern bool Beep(int freq, int dur);[STAThread]private static void Main(string[] args) {// Phát tiếng "beep" tần số 440 Hz trong 100 mili-giây// trên internal speaker.Console.WriteLine("Win32 API beep test.");Beep(440, 100);Console.ReadLine();// Phát tiếng "beep" mặc định của hệ thống (file WAV).Console.WriteLine("VB beep test.");Interaction.Beep();Console.ReadLine();}}Bạn cũng có thể sử dụng các hàm Win32 API để chơi một file âm thanh do bạn chọn. Kỹ thuậtnày được mô tả trong mục 8.10.Chơi file audio10.Bạn cần chơi một file WAV hoặc MP3.Sử dụng hàm API sndPlaySound (hỗ trợ file WAV), hoặc sử dụng thành phầnActiveMovie có trong Windows Media Player (hỗ trợ file WAV và MP3)Để chơi bất kỳ âm thanh nào trong một ứng dụng .NET, bạn cần nhận sự giúp đỡ của một thưviện bên ngoài hoặc lời gọi hệ thống. May mắn thay, cả hai tùy chọn này đều dễ dàng thựchiện được. 312Chương 8: Đồ họa, đa phương tiện, và in ấn•Thư viện winmm.dll (có trong Windows) chứa hàm sndPlaySound nhận vào tên của mộtfile WAV và một thông số chỉ định cách chơi. Bạn có thể chọn chơi âm thanh một cáchđồng bộ (gián đoạn việc thực thi của chương trình cho đến khi âm thanh đã hoàn tất),bất đồng bộ, hoặc trong một vòng lặp chạy phía nền.•Thư viện Quartz cung cấp một thành phần COM có thể chơi nhiều kiểu file audio, gồmcác định dạng WAV và MP3. Thư viện Quartz được cấp thông qua quartz.dll và nó làmột phần của Microsoft DirectX cho Windows Media Player và hệ điều hành Windows.Trong ví dụ này, chúng ta sẽ sử dụng cách tiếp cận thứ hai. Bước đầu tiên là tạo một lớpInterop có thể quản lý sự tương tác giữa ứng dụng .NET và thư viện Quartz. Bạn có thể tạomột lớp C# cùng với đoạn mã Interop này bằng tiện ích Type Library Importer (tlbimp.exe) vàdòng lệnh sau đây ([WindowsDir] là đường dẫn của thư mục cài đặt Windows):tlbimp [WindowsDir]\system32\quartz.dll /out:QuartzTypeLib.dllBạn có thể sử dụng Visual Studio .NET để tạo lớp Interop bằng cách thêm vào một thamchiếu. Chỉ cần nhắp phải vào dự án của bạn trong Solution Explorer, và chọn Add Referencetừ menu ngữ cảnh. Kế tiếp, chọn thẻ COM, và cuộn xuống để chọn ActiveMovie control typelibrary (xem hình 8.7).Một khi lớp Interop đã được tạo, bạn có thể làm việc với giao diện IMediaControl. Bạn có thểchỉ định file mà bạn muốn chơi bằng RenderFile, và có thể điều khiển playback bằng cácphương thức như Run, Stop, và Pause. Playback diễn ra trên một tiểu trình độc lập, như thế nósẽ không block đoạn mã của bạn. 313Chương 8: Đồ họa, đa phương tiện, và in ấnHình 8.7 Chọn ActiveMovie control type library trong hộp thoại Add ReferenceVí dụ, tiện ích Console dưới đây sẽ chơi file audio được chỉ định trong đối số dòng lệnh đầutiên:using System;class PlayAudio {public static void Main(string[] args) {// Lấy tên file được chỉ định trong đối số đầu tiên.string filename = args[0];// Truy xuất giao diện IMediaControl.QuartzTypeLib.FilgraphManager graphManager =new QuartzTypeLib.FilgraphManager();QuartzTypeLib.IMediaControl mc =(QuartzTypeLib.IMediaControl)graphManager;// Chỉ định tên file.mc.RenderFile(filename);// Bắt đầu chơi file audio bất đồng bộ.mc.Run();Console.WriteLine("Press Enter to continue.");Console.ReadLine();mc.Stop();}}Bạn cũng có thể sử dụng thư viện Quartz để hiển thị file video (sẽ được trình bày trong mục8.11).11.Chơi file videoBạn cần chơi một file video (như MPEG, AVI, hoặc WMV) ngay trên form.Sử dụng thành phần ActiveMovie có trong Media Player. Gắn kết xuất video vàomột PictureBox trên form bằng cách thiết lập thuộc tính IVideoWindow.Owner làthuộc tính PictureBox.Handle. 314Chương 8: Đồ họa, đa phương tiện, và in ấn.NET Framework không chứa bất kỳ lớp được-quản-lý nào để tương tác với các file video,nhưng bạn có thể sử dụng chức năng DirectShow của thư viện Quartz dựa-trên-COM (cótrong Windows Media Player và hệ điều hành Windows). Để biết cách tạo một InteropAssembly cho thư viện Quartz, bạn hãy tham khảo mục 8.10.Một khi đã tạo Interop Assembly, bạn có thể sử dụng giao diện IMediaControl để nạp và chơimột file video. Về cơ bản, kỹ thuật này giống như kỹ thuật đã trình bày trong mục 8.10 vớifile audio. Tuy nhiên, nếu muốn hiển thị cửa sổ video ngay bên trong giao diện ứng dụng củabạn (hơn là trong một cửa sổ độc lập), bạn phải sử dụng giao diện IVideoWindow. Đối tượngFilgraphManager có thể được ép kiểu thành giao diện IMediaControl và IVideoWindow—vànhiều giao diện khác cũng được hỗ trợ như IBasicAudio (cho phép bạn cấu hình các thiết lậpbalance và volume). Với giao diện IVideoWindow, bạn có thể gắn kết xuất video vào một đốitượng trên form như Panel hoặc PictureBox. Để làm được như vậy, bạn cần thiết lập thuộctính IVideoWindow.Owner là handle của điều kiểm đó (bạn có thể lấy được handle này bằngthuộc tính Control.Handle). Kế tiếp, gọi IVideoWindow.SetWindowPosition để thiết lập kíchthước và vị trí của cửa sổ. Phương thức này cũng có thể được gọi để thay đổi kích thước videotrong quá trình playback (chẳng hạn, khi form bị thay đổi kích thước).Ví dụ dưới đây cho phép người dùng mở bất kỳ file video nào và chơi nó trong mộtPictureBox. PictureBox bị neo đến tất cả các cạnh của form, như thế nó cũng thay đổi kíchthước khi form bị thay đổi kích thước. Đoạn mã đáp ứng cho sự kiện PictureBox.SizeChangedsẽ thay đổi kích thước của cửa sổ video tương ứng.using System;using QuartzTypeLib;using System.Windows.Forms;public class ShowMovie : System.Windows.Forms.Form {private System.Windows.Forms.PictureBox pictureBox1;private System.Windows.Forms.Button cmdOpen;// (Bỏ qua phần mã designer.)// Định nghĩa các hằng dùng để chỉ định window style.private const int WM_APP = 0x8000;private const int WM_GRAPHNOTIFY = WM_APP + 1;private const int EC_COMPLETE = 0x01;private const int WS_CHILD = 0x40000000;private const int WS_CLIPCHILDREN = 0x2000000; 315Chương 8: Đồ họa, đa phương tiện, và in ấn// Giữ tham chiếu mức-form đến giao diện Media Control,// để đoạn mã có thể điều khiển playback cho// movie được nạp hiện tại.private IMediaControl mc = null;// Giữ tham chiếu mức-form đến cửa sổ video trong// trường hợp nó cần được thay đổi kích thước.private IVideoWindow videoWindow = null;private void cmdOpen_Click(object sender, System.EventArgs e) {// Cho phép người dùng chọn file.OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter ="Media Files|*.mpg;*.avi;*.wma;*.mov;" +"*.wav;*.mp2;*.mp3|All Files|*.*";if (DialogResult.OK == openFileDialog.ShowDialog()) {// Dừng playback đối với movie hiện tại, nếu nó tồn tại.if (mc != null) mc.Stop();// Nạp file movie.FilgraphManager graphManager = new FilgraphManager();graphManager.RenderFile(openFileDialog.FileName);// Gắn cửa sổ video vào PictureBox trên form.try {videoWindow = (IVideoWindow)graphManager;videoWindow.Owner = (int) pictureBox1.Handle;videoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;videoWindow.SetWindowPosition(pictureBox1.ClientRectangle.Left,pictureBox1.ClientRectangle.Top,pictureBox1.ClientRectangle.Width,pictureBox1.ClientRectangle.Height); 316Chương 8: Đồ họa, đa phương tiện, và in ấn} catch {// Lỗi có thể xảy ra nếu file không có// video source (chẳng hạn, file MP3).// Bạn có thể bỏ qua lỗi này và vẫn cho phép// playback tiếp tục (không có hình).}// Bắt đầu playback (bất đồng bộ).mc = (IMediaControl)graphManager;mc.Run();}}private void pictureBox1_SizeChanged(object sender,System.EventArgs e) {if (videoWindow != null) {try {videoWindow.SetWindowPosition(pictureBox1.ClientRectangle.Left,pictureBox1.ClientRectangle.Top,pictureBox1.ClientRectangle.Width,pictureBox1.ClientRectangle.Height);} catch {// Bỏ qua ngoại lệ (bị ném khi thay đổi kích thước form)// khi file không có video source.}}} 317Chương 8: Đồ họa, đa phương tiện, và in ấnprivate void ShowMovie_Closing(object sender,System.ComponentModel.CancelEventArgs e) {if (mc != null) mc.Stop();}}Hình 8.8 Chơi file video trong PictureBox trên formLấy thông tin về các máy in đã được cài đặt12.Bạn cần lấy danh sách các máy in đang có hiệu lực trên máy tính.Đọc tên các máy in đã được cài đặt trong tập hợp InstalledPrinters của lớpSystem.Drawing.Printing.PrinterSettings.Lớp PrinterSettings mô tả các thiết lập cho một máy in và thông tin về máy in đó. Ví dụ,bạn có thể sử dụng lớp PrinterSettings để xác định các khổ giấy (paper size), các nguồngiấy (paper source), và các độ phân giải (resolution) được hỗ trợ và kiểm tra khả năng in màuhoặc in hai mặt. Ngoài ra, bạn có thể lấy các thiết lập trang mặc định cho lề (margin), hướngtrang (orientation)...Lớp PrinterSettings cung cấp tập hợp tĩnh InstalledPrinters, tập hợp này chứa tên của tấtcả các máy in đã được cài đặt trên máy tính. Nếu muốn tìm thêm thông tin về các thiết lập chomột máy in cụ thể, bạn cần tạo một đối tượng PrinterSettings và thiết lập thuộc tínhPrinterName cho phù hợp.Ứng dụng Console dưới đây sẽ tìm tất cả các máy in đã được cài đặt trên máy tính và hiển thịthông tin về khổ giấy và độ phân giải được hỗ trợ bởi mỗi máy in.using System;using System.Drawing.Printing; 318Chương 8: Đồ họa, đa phương tiện, và in ấnpublic class ListPrinters {private static void Main(string[] args) {foreach (string printerName inPrinterSettings.InstalledPrinters) {// Hiển thị tên máy in.Console.WriteLine("Printer: {0}", printerName);// Lấy các thiết lập máy in.PrinterSettings printer = new PrinterSettings();printer.PrinterName = printerName;// Kiểm tra tính hợp lệ của máy in.// (Bước này cần thiết trong trường hợp bạn đọc tên máy in// từ một giá trị do người dùng cấp hoặc một thiết lập trong// file registry hay configuration.)if (printer.IsValid) {// Hiển thị danh sách các độ phân giải hợp lệ.Console.WriteLine("Supported Resolutions:");foreach (PrinterResolution resolution inprinter.PrinterResolutions) {Console.WriteLine("{0}", resolution);}Console.WriteLine();// Hiển thị danh sách các khổ giấy hợp lệ.Console.WriteLine("Supported Paper Sizes:");foreach (PaperSize size in printer.PaperSizes) {if (Enum.IsDefined(size.Kind.GetType(), size.Kind)) {

Xem Thêm

Tài liệu liên quan

  • Tài liệu Các giải pháp lập trình C# pdfTài liệu Các giải pháp lập trình C# pdf
    • 706
    • 2,679
    • 19
  • KHAO_SAT_TIN_HIEU_DIEU_CHE_.DOC KHAO_SAT_TIN_HIEU_DIEU_CHE_.DOC
    • 94
    • 446
    • 0
  • Giao trinh Thiet ke tu dong TBD.doc Giao trinh Thiet ke tu dong TBD.doc
    • 54
    • 1
    • 2
  • GIAO_TIEP_MAY_TINH_VOI_KIT_.DOC GIAO_TIEP_MAY_TINH_VOI_KIT_.DOC
    • 116
    • 368
    • 0
  • Giới thiệu bộ điều khiển lập trình PLC và ứng dụng của PLC.DOC Giới thiệu bộ điều khiển lập trình PLC và ứng dụng của PLC.DOC
    • 28
    • 2
    • 25
  • GIỚI THIỆU TỔNG QUÁT VỀ PLC.DOC GIỚI THIỆU TỔNG QUÁT VỀ PLC.DOC
    • 37
    • 5
    • 40
  • Giới thiệu trò chơi cờ vua.pdf Giới thiệu trò chơi cờ vua.pdf
    • 18
    • 2
    • 13
  • Giới thiệu về hệ mật RSA.DOC Giới thiệu về hệ mật RSA.DOC
    • 10
    • 1
    • 7
  • GIỚI THIỆU VỀ NGÔN NGỮ CÀI ĐẶT JSP.doc GIỚI THIỆU VỀ NGÔN NGỮ CÀI ĐẶT JSP.doc
    • 67
    • 1
    • 32
  • GT KHÁI QUÁT VỀ MÁY PHÁT ĐIỆN ĐỒNG BỘ XOAY CHIỀU&VỀ HỆ THỐNG KÍCH TỪ.doc GT KHÁI QUÁT VỀ MÁY PHÁT ĐIỆN ĐỒNG BỘ XOAY CHIỀU&VỀ HỆ THỐNG KÍCH TỪ.doc
    • 43
    • 6
    • 38
  • Ham truyen doi tuong.pdf Ham truyen doi tuong.pdf
    • 4
    • 526
    • 1
Tải bản đầy đủ (.pdf) (706 trang)

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

(7.15 MB) - Tài liệu Các giải pháp lập trình C# pdf-706 (trang) Tải bản đầy đủ ngay ×

Từ khóa » Cách Tạo Tiếng Beep Trong Video