Cách phát âm thanh trong C #, .NET


124

Tôi có một ứng dụng Windows được viết bằng C # /. NET.

Làm cách nào để phát một âm thanh cụ thể khi nhấp vào nút?

Câu trả lời:


234

Bạn đã có thể sử dụng:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();

33
Đây là câu trả lời hoàn hảo bởi vì một người dùng mới có thể hiểu rằng SoundPlayer thuộc về System.Media ....
Khilen Maniyar

31
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Điều đó có nghĩa là diễn giải chuỗi sau dưới dạng nghĩa đen. Có nghĩa là \ trong chuỗi thực sự sẽ là" \ "trong đầu ra, thay vì phải đặt "\\" có nghĩa là các ký tự chữ"
Praveen

Câu trả lời của @ Praveen chỉ đưa ra một thông tin thực tế khác. Cảm ơn Dexter đã hỏi ký hiệu "@" đó.
Allen Linatoc

2
@bporter, điều này dường như không hoạt động với các tệp mp3; nó được giới hạn chỉ wav định dạng
Najeeb

Thật đáng tiếc khi API này! Nó không phát các tệp MP3 hay MIDI. Hoàn toàn vô dụng đối với tôi. Windows có hỗ trợ gốc cho MP3 và MIDI kể từ ít nhất là Windows XP. Thật xấu hổ cho Microsoft!
Elmue

91

Bạn có thể sử dụng SystemSound chẳng hạn System.Media.SystemSounds.Asterisk.Play();.


rất hữu ích. nó có thể giúp sử dụng mặc định của hệ thống.
Babak.Abad

4
Điều quan trọng cần lưu ý là nếu bạn tắt âm thanh hệ thống trong cài đặt Windows (ít nhất là Windows mới hơn), nó sẽ không phát bất cứ điều gì.
Artholl

32

Đối với Windows Forms, một cách là sử dụng SoundPlayer

private void Button_Click(object sender, EventArgs e)
{
    using (var soundPlayer = new SoundPlayer(@"c:\Windows\Media\chimes.wav")) {
        soundPlayer.Play(); // can also use soundPlayer.PlaySync()
    }
}

Trang MSDN

Điều này cũng sẽ hoạt động với WPF, nhưng bạn có các tùy chọn khác như sử dụng MediaPlayer trang MSDN


1
Tốt hơn nữa, trong mã sản xuất, hãy tạo nó chỉ một lần và sử dụng nó nhiều lần chứ không phải tạo nó mỗi khi nhấn nút.
Shibumi

Tôi muốn đổi tên hàm đó thành ButtonClick, đơn giản vì nó có vẻ như nó theo phong cách đặt tên C # nhiều hơn.
Ethan Bierlein

1
@EthanBierlein - có lẽ đó là quy ước đặt tên khi tôi đăng câu trả lời;)
ChrisF

1
Huh. Vậy đó là quy ước cũ?
Ethan Bierlein,

@EthanBierlein nó vẫn là thứ được tạo tự động bởi các dự án biểu mẫu Windows của Visual Studio
JAD

13

Thông tin thêm.

Đây là một câu trả lời cấp cao cho các ứng dụng muốn hoàn toàn phù hợp với môi trường Windows. Chi tiết kỹ thuật của việc phát âm thanh cụ thể đã được cung cấp trong các câu trả lời khác. Bên cạnh đó, hãy luôn lưu ý hai điểm sau:

  1. Sử dụng năm âm thanh hệ thống tiêu chuẩn trong các tình huống điển hình , tức là

    • Dấu hoa thị - phát khi bạn muốn đánh dấu sự kiện hiện tại

    • Câu hỏi - chơi với các câu hỏi (cửa sổ hộp thông báo hệ thống phát cửa sổ này)

    • Dấu chấm than - chơi với biểu tượng cảm thán (cửa sổ hộp thông báo hệ thống phát biểu tượng này)

    • Bíp (âm thanh hệ thống mặc định)

    • Dừng nghiêm trọng ("Tay") - chơi với lỗi (cửa sổ hộp thông báo hệ thống phát cái này)
       

    Các phương pháp của lớp System.Media.SystemSoundssẽ chơi chúng cho bạn.
     

  2. Triển khai bất kỳ âm thanh nào khác mà người dùng của bạn có thể tùy chỉnh trong bảng điều khiển Âm thanh

    • Bằng cách này, người dùng có thể dễ dàng thay đổi hoặc xóa âm thanh khỏi ứng dụng của bạn và bạn không cần viết bất kỳ giao diện người dùng nào cho việc này - nó đã có sẵn
    • Mỗi hồ sơ người dùng có thể ghi đè những âm thanh này theo cách riêng
    • Làm thế nào để:
      • Tạo cấu hình âm thanh cho ứng dụng của bạn trong Windows Registry (Gợi ý: không cần lập trình, chỉ cần thêm các khóa vào trình cài đặt ứng dụng của bạn.)
      • Trong ứng dụng của bạn, đọc đường dẫn tệp âm thanh hoặc tài nguyên DLL từ các khóa đăng ký của bạn và phát nó. (Cách phát âm thanh bạn có thể xem trong các câu trả lời khác.)

Cảm ơn bạn cho thông tin bổ sung này. Tôi muốn thêm một ví dụ: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);chơi âm thanh Bàn tay . Lưu ý rằng nó phát không đồng bộ, ở đây tôi đã thêm lệnh ngủ để chờ hoàn thành âm thanh. Nếu bạn không đợi và phát một âm thanh khác, âm thanh trước đó sẽ dừng ngay lập tức.
Matt


2

Để phát tệp âm thanh trong biểu mẫu Windows bằng C #, hãy kiểm tra ví dụ đơn giản như sau:

1. Go Visual Studio (VS-2008/2010/2012) -> File Menu -> nhấp vào New Project.

2.Trong Dự án mới -> nhấp vào Ứng dụng biểu mẫu Windows -> Đặt tên và sau đó nhấp vào OK.

Một dự án "Windows Forms" mới sẽ mở ra.

3. Kéo-và-thả điều khiển Nút từ Hộp công cụ vào Biểu mẫu Windows.

4. Nhấp đúp vào nút để tự động tạo trình xử lý sự kiện Nhấp chuột mặc định và thêm mã sau.

Đoạn mã này hiển thị hộp thoại File Open và chuyển kết quả đến một phương thức có tên "playSound" mà bạn sẽ tạo trong bước tiếp theo.

 OpenFileDialog dialog = new OpenFileDialog();
 dialog.Filter = "Audio Files (.wav)|*.wav";


if(dialog.ShowDialog() == DialogResult.OK)
{
  string path = dialog.FileName;
  playSound(path);
}

5.Thêm mã phương pháp sau vào trình xử lý sự kiện button1_Click.

 private void playSound(string path)
 {
   System.Media.SoundPlayer player = new System.Media.SoundPlayer();
   player.SoundLocation = path;
   player.Load();
   player.Play();
 }

6.Bây giờ, hãy chạy ứng dụng chỉ bằng cách Nhấn F5 để chạy mã.

7. nhấp vào nút và chọn một tệp âm thanh. Sau khi tải tệp, âm thanh sẽ phát.

Tôi hy vọng đây là ví dụ hữu ích cho người mới bắt đầu ...


1

Tôi nghĩ trước tiên bạn phải thêm tệp .wav vào Tài nguyên. Ví dụ: bạn có tệp âm thanh có tên Sound.wav. Sau khi bạn thêm tệp Sound.wav vào Tài nguyên, bạn có thể sử dụng mã này:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(Properties.Resources.Sound);
player.Play();

Đây là một cách khác để phát âm thanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.