
Giới thiệu về API âm thanh Java
Java Sound API là một bộ công cụ mạnh mẽ được thiết kế để cung cấp hỗ trợ âm thanh trên tất cả các nền tảng. Nó đi kèm với Bộ công cụ phát triển Java (JDK) và cho phép các nhà phát triển phát, ghi và xử lý các tệp âm thanh ở nhiều định dạng khác nhau. Trong bài viết này, chúng ta sẽ tập trung vào những kiến thức cơ bản về phát âm thanh trong các ứng dụng Java bằng cách sử dụng các lớp AudioClip và AudioSystem, là một phần của Java Sound API.
Java Sound API có thể được phân loại thành hai gói chính: javax.sound.sampling và javax.sound.midi. Gói lấy mẫu được sử dụng để xử lý các chức năng âm thanh cơ bản như phát, ghi và tổng hợp dữ liệu âm thanh, trong khi gói midi được thiết kế để quản lý các bản nhạc và bản nhạc dựa trên MIDI.
Phát âm thanh bằng AudioClip
Để bắt đầu, hãy khám phá cách phát các tệp âm thanh bằng Clip âm thanh giao diện, là một phần của java.applet bưu kiện. Mặc dù giao diện AudioClip ban đầu được tạo cho các applet, nó vẫn phù hợp và hữu ích để phát các tệp âm thanh nhỏ trong các ứng dụng Java.
import java.applet.AudioClip;
import java.net.URL;
public class SoundPlayer {
public static void main(String[] args) {
AudioClip sound;
URL soundURL = SoundPlayer.class.getResource("sound.wav");
sound = java.applet.Applet.newAudioClip(soundURL);
sound.play();
}
}
Trong đoạn mã trên, chúng tôi đã nhập Clip âm thanh giao diện và URL lớp học. Các lớp này cho phép chúng tôi tải tài nguyên âm thanh và phát nó bằng phương thức play() của phiên bản AudioClip. Để sử dụng AudioClip, hãy đảm bảo đặt tệp “sound.wav” trong cùng thư mục với tệp Java của bạn hoặc cung cấp đường dẫn tệp chính xác.
Tuy nhiên, nếu bạn đang làm việc với các tệp âm thanh lớn hơn hoặc cần kiểm soát phát lại phức tạp hơn, giao diện AudioClip có thể không đủ và bạn nên cân nhắc sử dụng lớp AudioSystem.
Phát âm thanh bằng lớp AudioSystem
Hệ thống âm thanh lớp là một phần của gói javax.sound.sampled và cung cấp khả năng phát lại âm thanh nâng cao hơn. Ví dụ sau minh họa cách phát tệp âm thanh bằng lớp AudioSystem:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.File;
import java.io.IOException;
public class SoundPlayer {
public static void main(String[] args) {
try {
File soundFile = new File("sound.wav");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
// Keep the application running till the sound is played completely
Thread.sleep(clip.getMicrosecondLength() / 1000);
} catch(LineUnavailableException | UnsupportedAudioFileException | IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Trong ví dụ này, trước tiên chúng tôi đã nhập các lớp và giao diện được yêu cầu từ javax.sound.sampling bưu kiện. Sau đó, chúng tôi đã tạo ra một AudioInputLuồng đối tượng để đọc dữ liệu âm thanh từ tệp và một Cái cặp dụ để giữ dữ liệu âm thanh trong bộ nhớ. Sau khi mở clip, chúng ta gọi phương thức start() để phát âm thanh.
Cách tiếp cận này cung cấp nhiều quyền kiểm soát hơn đối với việc phát lại âm thanh, bao gồm khả năng tạm dừng, tiếp tục, lặp lại và dừng âm thanh, làm cho nó phù hợp với nhiều ứng dụng.
Tóm lại, chúng ta đã thảo luận về hai cách tiếp cận khác nhau để phát âm thanh trong Java bằng cách sử dụng các lớp AudioClip và AudioSystem. Giao diện AudioClip phù hợp với các tệp âm thanh nhỏ trong các ứng dụng đơn giản, trong khi lớp AudioSystem cung cấp khả năng phát lại âm thanh nâng cao cho các tình huống phức tạp hơn. Tận dụng các thư viện mạnh mẽ của Java đảm bảo chức năng âm thanh liền mạch và trải nghiệm người dùng nâng cao trên các ứng dụng khác nhau.