2012-01-23 18 views
7

Có ai có thể chỉ cho tôi đúng hướng là tại sao mã này sẽ không phát clip âm thanh này liên tục không? Nó chơi nó một lần và dừng lại.Clip âm thanh sẽ không lặp liên tục

final Clip clip = AudioSystem.getClip(); 
final AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("Alarm_Police.wav")); 
clip.open(inputStream); 
clip.loop(Clip.LOOP_CONTINUOUSLY); 
+0

Bạn đã thử thực hiện vòng lặp() trước khi mở() chưa? Tôi đã không thử nó nhưng nó có thể làm việc. –

+0

Tôi chỉ thử nó ở đây và nó có vẻ làm việc ... bạn có bắt gặp bất kỳ ngoại lệ nào trong khối thử nên được vượt qua mã này không? – Timst

+0

Xin chào, tôi đã thử điều này và nó hoạt động. Bạn có ngoại lệ som sau vòng đầu tiên? – hudi

Trả lời

12

Nếu bạn đang chạy ứng dụng lớn hơn, câu trả lời này có thể không áp dụng. Nhưng đối với một thử nghiệm đơn giản chỉ với đoạn mã đó, số này có thể trợ giúp:

Clip.loop() bắt đầu chuỗi riêng của nó, nhưng chuỗi đó sẽ không giữ JVM hoạt động. Vì vậy, để làm cho nó hoạt động, hãy chắc chắn rằng clip không phải là chủ đề duy nhất.

Nếu tôi bỏ qua Thread.sleep (..) từ đoạn mã này, tôi sẽ gặp vấn đề tương tự như bạn;

import java.io.File; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 

public class Snippet { 
    public static void main(String[] args) throws Exception { 

     AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("notify.wav")); 
     Clip clip = AudioSystem.getClip(); 
     clip.open(inputStream); 
     clip.loop(Clip.LOOP_CONTINUOUSLY); 
     Thread.sleep(10000); // looping as long as this thread is alive 
    } 
} 
+0

Cảm ơn Frank, theo như Tôi hiểu nếu tôi nhấn phím mũi tên lên nó thêm vào 'danh tiếng' của bạn hoặc một cái gì đó, nhưng tôi không có đủ bài viết để cho phép tôi làm như vậy. Tôi nhấn dấu kiểm màu xanh lục, điều tôi hy vọng có nghĩa là tôi chọn câu trả lời của bạn để trả lời câu hỏi. – daveed007

+0

Bạn nói đúng, tôi rất vui vì tôi có thể giúp bạn! – Paaske

1

Để phát tệp âm thanh hoàn chỉnh, bạn cần biết khoảng thời gian để ngủ. Một giải pháp thay thế sẽ là:

while(clip.isRunning()) 
{ 
    Thread.sleep(100); 
} 

Điều này tiếp tục ngủ (tăng 100ms) cho đến khi trạng thái isRunning() đã chuyển thành false. Bạn có thể cần một giấc ngủ ban đầu trước vòng lặp này để trạng thái isRunning() có thời gian để thiết lập.

1

Tệp âm thanh của tôi chứa 20 giây tiếng bíp báo thức. Tôi cần nó liên tục để đổ chuông. Thay vì sử dụng chuỗi, tôi đã tiếp tục với đoạn mã được hiển thị bên dưới.

 while(true){ 
      clip.start(); 
      clip.loop(clip.LOOP_CONTINUOUSLY);    
     } 

Hãy nghĩ điều này sẽ hữu ích. Cảm ơn.