2013-04-14 24 views
5

Mam następujący kod, który próbuje załadować bank dźwiękowy. Przetestowałem kod w systemie Windows 7 z JRE 1.6.03 i 1.6.43. Stara wersja JRE (1.6.03) działa dobrze, ale nowa wersja zgłasza wyjątek. Co się dzieje?Nowsza wersja JRE nie ładuje soundbank, ale starsza wersja ma

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) 

Można pobrać soundbanks stąd: http://www.oracle.com/technetwork/java/soundbanks-135798.html

+0

Jestem po prostu ciekawy, czy próbowałeś Java 1.7? – Zyerah

+2

Wyszukaj [błąd DB] (http://bugs.sun.com/). Jeśli nic nie ma, podnieś nowe. –

+0

@Telthien Ten sam błąd w 1.7 – gsingh2011

Odpowiedz

0

Kopiuj-Wklej Java Sound API: Soundbanks strona API

Java dźwięku

Ta strona zawiera różne soundbanks które można pobrać i używać z dźwiękiem Java. Soundbanks są niezbędne do poprawnej pracy wewnętrznego syntezatora programowego dostarczanego z dźwiękiem Java Sound. Domyślnie wersja J2RE dla systemu Windows nie jest dostarczana z bankiem dźwiękowym, więc musisz ręcznie zainstalować jeden, aby użyć silnika MIDI Java Sound. Java Dźwięk ma mechanizm awaryjny, który wykorzystuje sprzętowy port MIDI, jeśli brak jest banku dźwięku , ale zapobiega niezawodnemu i konsekwentnemu odtwarzaniu MIDI , więc instalacja soundbanku jest zalecana dla Javy Dźwięku.

Jak widać, Java Sound API wymaga instalacji, więc jeśli zainstalowałeś nowszy JDK, musisz redo the installation.

Błąd wydaje się być blisko swojego problemu: 4887447, obejście istnieje, ale nie wtedy, gdy banksound jest w słoiku

+0

Załaduję plik soundbank.gm jako zasób, więc nie trzeba instalować go osobno. – gsingh2011

0

I zostały posiadające ten sam problem, i od tego, co znalazłem, najnowszych wersji Java (1.7+), przy czym soundbanks GM nie są już obsługiwane

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

realizacja syntezator oprogramowanie do pakietu Java dźwięku został zastąpiony otwartej wersji pozyskiwane. W związku z wymianą następujące funkcje zostały usunięte: Wsparcie dla banków dźwięku GM, Obsługa odtwarzania plików RMF, Obsługa OSS (Open Sound System) na platformie Linux. Nowa implementacja syntezatora obsługuje dźwięki w formatach DLS i SoundFont (SF2).

Jak mówi, obsługuje DLS i formaty SF2 Soundbank (które próbowałem z tym, co robisz i to działało). Rozejrzyj się w Internecie pod kątem takich plików, jak tutaj: http://www.ronimusic.com/smp_ios_dls_files.htm