2013-04-14 49 views
5

Tôi có mã sau đây cố tải một soundbank. Tôi đã thử nghiệm mã trên Windows 7 với JRE 1.6.03 và 1.6.43. Phiên bản cũ của JRE (1.6.03) hoạt động tốt nhưng phiên bản mới ném một ngoại lệ. Chuyện gì vậy?Phiên bản mới hơn của JRE không tải soundbank nhưng phiên bản cũ hơn

public Main() { 
    try { 
     Synthesizer synth = MidiSystem.getSynthesizer(); 
     synth.open(); 
     BufferedInputStream soundBankStream = new BufferedInputStream(
       getClass().getClassLoader().getResourceAsStream(
         "soundbank.gm")); 
     synth.loadAllInstruments(MidiSystem.getSoundbank(soundBankStream)); 
    } catch (MidiUnavailableException e) { 
     e.printStackTrace(); 
    } catch (InvalidMidiDataException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

.

F:\>java -version 
java version "1.6.0_03" 
Java(TM) SE Runtime Environment (build 1.6.0_03-b05) 
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode) 

F:\>java -jar Test2.jar 

F:\>"C:\Program Files\Java\jre6\bin\java.exe" -version 
java version "1.6.0_43" 
Java(TM) SE Runtime Environment (build 1.6.0_43-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode) 

F:\>"C:\Program Files\Java\jre6\bin\java.exe" -jar Test2.jar 
javax.sound.midi.InvalidMidiDataException: cannot get soundbank from stream 
     at javax.sound.midi.MidiSystem.getSoundbank(Unknown Source) 
     at com.gulshansingh.test.Main.<init>(Main.java:24) 
     at com.gulshansingh.test.Main.main(Main.java:14) 

Bạn có thể tải soundbanks từ đây: http://www.oracle.com/technetwork/java/soundbanks-135798.html

+0

Tôi chỉ tò mò, bạn đã thử Java 1.7 chưa? – Zyerah

+2

Tìm kiếm [lỗi DB] (http://bugs.sun.com/). Nếu không có gì, hãy nâng cấp cái mới. –

+0

@Telthien Lỗi tương tự trong 1.7 – gsingh2011

Trả lời

0

Copy-Paste từ Java Sound API: Soundbanks trang

Java Sound API

Trang này cung cấp soundbanks khác nhau mà bạn có thể tải về và sử dụng với Java Sound. Soundbanks là cần thiết cho hoạt động chính xác của tổng hợp phần mềm nội bộ đi kèm với Java Sound. Theo mặc định, phiên bản Windows của J2RE không phát hành với soundbank, vì vậy bạn cần phải cài đặt thủ công một phiên bản để sử dụng công cụ MIDI của Java Sound. Java Âm thanh có cơ chế dự phòng sử dụng cổng MIDI phần cứng nếu không có thanh âm nhưng có thể ngăn phát lại MIDI đáng tin cậy và nhất quán, do đó, nên cài đặt soundbank cho Java Âm thanh.

Như bạn có thể thấy, Java Sound API cần cài đặt, vì vậy nếu bạn đã cài đặt JDK mới hơn, bạn phải redo the installation.

Một lỗi dường như là gần vấn đề của bạn: 4887447, một cách giải quyết tồn tại nhưng không nếu banksound là trong một JAR

+0

Tôi tải tệp soundbank.gm làm tài nguyên, vì vậy tôi không cần phải cài đặt riêng nó. – gsingh2011

0

Tôi đã được gặp cùng một vấn đề, và từ những gì tôi đã tìm thấy, phiên bản mới nhất của java (1.7+), các soundbanks GM không còn được hỗ trợ

http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#incompatibilities

các bộ tổng hợp phần mềm thực hiện trong gói Java Sound đã được thay thế bằng một phiên bản sourced mở. Do thay thế, các tính năng sau đã bị giảm: Hỗ trợ soundbank của GM, Hỗ trợ phát lại tệp RMF, Hỗ trợ OSS (Hệ thống âm thanh mở) trên nền tảng Linux. Việc thực hiện bộ tổng hợp mới hỗ trợ soundbanks trong các định dạng DLS và SoundFont (SF2).

Như đã nói, nó hỗ trợ định dạng âm thanh DLS và SF2 (mà tôi đã thử với những gì bạn đang làm và nó hoạt động). Có một cái nhìn xung quanh trên internet cho những tập tin này như ở đây: http://www.ronimusic.com/smp_ios_dls_files.htm

Các vấn đề liên quan