2011-04-18 17 views
18

Bir kavanoza bir kaynak olarak bir midi soundbank aldım bir süre önce yaptım ve ses bankasında bulunan enstrüman isimlerini almak için kullanır bir keyboard application10 yaptım. Bu, güneş java 6 ile windows 7 ve güneş java 6 kullanarak Windows 7 kullanan makinelerde iyi çalışıyor gibi görünüyor. Ancak, bu java aynı sürümünü kullanarak windows xp kullanarak makinelerde çalışmıyor gibi görünüyor. Oluyor gibi görünen şey, getInstrumentName() yöntemi çağrıldığında cihaz dizisinin yüklenmemiş olmasıdır. Alet dizisi DefaultControl sınıfının yapıcısına yerleştirilir (ikinci kod örneği). Birisi, neden böyle olacağını anlamak için bana yardımcı olabilir mi ve neden makine bağımlısı gibi görünüyor? midi klavye tüm platformlarda çalışmıyor

böyle cari enstrüman adını almak:

data.setControls(new DefaultControls()); 
data.setKeyboard(new KeyboardPanel(data.getPressed())); 
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName()); 

alıyorum ve bunun gibi SoundBank yüklemek: Bu isim yüklenmesi denir yöntemdir

this.synth=MidiSystem.getSynthesizer(); 
synth.open(); 
synth.loadAllInstruments(
    MidiSystem.getSoundbank(
    getClass().getResourceAsStream("soundbank.gm"))); 

this.instrument=synth.getAvailableInstruments(); 
this.channels=synth.getChannels(); 

şudur:

public String getInstrumentName(){ 
    return instrument[selected_instrument].getName(); 
} 
+1

İstisnalar var mı? Olası JDK hatası mı? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4444193 – monojohnny

+0

Atılan dizgeden istisna dışında bir dizi dizini. Onun tuhaf çünkü sadece bir hata atılmış ve ses bankası başarıyla yüklendi eğer isim çağrılırdı. –

+0

Bu, başvuru yapacağınız hata ile ilgili olabilir. –

cevap

1

MIDI ses bankaları, Java'da lisans kısıtlamalarına tabidir ve varsayılan olarak gönderilmez. Tüm platformlar için t (http://java.sun.com/products/java-media/sound/soundbanks.html) ve çalışmak için ayrı bir indirme ve çok adımlı kurulum gerektirir.

Cevap: Gervill

http://java.net/projects/gervill/pages/Home

Gervill Java için jenerik synthesizer olacak şekilde tasarlanmıştır. Sınıfınıza gervill.jar ekleyerek, , MidiSystem.getSoundBank() kullanarak SoundFonts/DLS dosyalarını yükleyebilmelidir. Ve MidiSystem.getSynthesizer(), Gervill Synthesizer öğesinin iade örneğini içermelidir.

Bu açık kaynak kodlu genel MIDI ses bankalarının% 100 saf java uygulamasıdır. Sınıf yolunda gervill.jar'ı bırakın ve işte bu kadar. Gm ses bankalarınız uygulamanıza sunulacak.

+0

Sorun olduğundan emin değilim. Midi soundbank'ı kavanozdan bir kaynak olarak okuyorum. Varsayılan sistemler soundbank'ı yüklemiyorum. Sorun bazı işletim sistemlerinde daha fazla bir sınıf yükleyici sorunu gibi görünüyor. Sadece sınıf oluşturulduktan sonra gerçekleşen getInstrumentName çağırmaya çalıştığımda (dizi yapıcı içinde doldurulmalıdır). Bu, aynı sürüm java'yı çalıştıran farklı makinelerde test edilmiştir. –

İlgili konular