Problemas com java sound

8 respostas
Gneto

Olá meus amigos estou com dificuldades de trabalhar com o pacote javax.sound.midi.*;

import javax.sound.midi.*;


public class MiniMiniMusicApp {
	
	public static void main(String[] args){
		try{
			Sequencer player = MidiSystem.getSequencer();
			player.open();
			
			Sequence seq = new Sequence(Sequence.PPQ, 4);
			Track track = seq.createTrack();
			
			ShortMessage a = new ShortMessage();
			a.setMessage(144,1,44,100);
			MidiEvent noteOn = new MidiEvent(a, 1);
			track.add(noteOn);
			
			ShortMessage b = new ShortMessage();
			b.setMessage(128,1,44,100);
			MidiEvent noteOff = new MidiEvent(b, 16);
			track.add(noteOff);
			
			player.setSequence(seq);
			player.start();
		}catch (Exception ex){
			ex.printStackTrace();
		}
	}
}
O erro:

Exception in thread main java.lang.UnsatisfiedLinkError: init_

at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.init_(libgcj.so.10)

at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.(libgcj.so.10)

at java.lang.Class.initializeClass(libgcj.so.10)

at java.lang.Class.newInstance(libgcj.so.10)

at gnu.classpath.ServiceProviderLoadingAction.run(libgcj.so.10)

at java.security.AccessController.doPrivileged(libgcj.so.10)

at gnu.classpath.ServiceFactory$ServiceIterator.loadNextServiceProvider(libgcj.so.10)

at gnu.classpath.ServiceFactory$ServiceIterator.(libgcj.so.10)

at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)

at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)

at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)

at javax.sound.midi.MidiSystem.getMidiDeviceInfo(libgcj.so.10)

at javax.sound.midi.MidiSystem.getSequencer(libgcj.so.10)

at MiniMiniMusicApp.main(MiniMiniMusicApp.java:8)

Se alguem puder dar uma forcinha!!!Obrigaduuu.

8 Respostas

M

O para usar MIDI em Java é preciso de alguns recursos do sistema nativo (além do JRE).

Qual distribuição você está usando? Se for Ubuntu (ou outro Debian based), certifique-se que os pacotes libgcj10 (usado para o Java ter acesso ao dispositivo de reprodução/gravação de áudio) e freepats (biblioteca MIDI) estão instalados.

Gneto

Ok…to usando ubuntu 9.10 mais quais são as bibliotecas MIDI, tenho que adicionar alguma coisa no CLASSPATH? Vlw.

M

Não. Tendo esses 2 pacotes instalados no sistema deve funcionar (pois as bibliotecas são instaladas em /usr/lib, onde a JVM já procura por padrão).

Gneto

Meu amigo marcobiscaro2112 eu chequei os pacotes aki e todos os dois estão instalados e mesmo assim não funcionou…fiz as atualizações dos pacotes e apareceu o seguinte erro na copilação. O que será que pode ser?
Abraços.

Exception in thread main java.lang.UnsatisfiedLinkError: init_

at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.init_(AlsaMidiDeviceProvider.java:53)

at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.(AlsaMidiDeviceProvider.java:178)

at java.lang.Class.initializeClass(natClass.cc:780)

at java.lang.Class.newInstance(Class.h:742)

at gnu.classpath.ServiceProviderLoadingAction.run(ServiceProviderLoadingAction.java:140)

at java.security.AccessController.doPrivileged(AccessController.java:195)

at gnu.classpath.ServiceFactory$ServiceIterator.loadNextServiceProvider(ServiceFactory.java:529)

at gnu.classpath.ServiceFactory$ServiceIterator.(ServiceFactory.java:435)

at gnu.classpath.ServiceFactory.lookupProviders(ServiceFactory.java:305)

at gnu.classpath.ServiceFactory.lookupProviders(ServiceFactory.java:229)

at gnu.classpath.ServiceFactory.lookupProviders(ServiceFactory.java:330)

at javax.sound.midi.MidiSystem.getMidiDeviceInfo(MidiSystem.java:80)

at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:198)

at MiniMiniMusicApp.main(MiniMiniMusicApp.java:7)
M

Agora que estava vendo melhor, sua JDK não é da Sun certo?

O que o comando “java -version” retorna?

Se você procurar por esse erro na Internet verá que ele não é de hoje (e ainda não foi resolvido?!).

Tente desinstalar o GCJ e instalar a JDK da Sun ou a OpenJDK (pacotes sun-java6-jdk e openjdk-6-jdk, respectivamente).

Gneto

Meu amigo marcobiscaro2112 estamos ai denovo!!! Seguinte eu desistalei os pacotes de instalei novamente, compilei meu programa e agora deu esse outro erro!

javax.sound.midi.MidiUnavailableException: Audio Device Unavailable

at com.sun.media.sound.MixerSynth.implOpen(MixerSynth.java:165)

at com.sun.media.sound.AbstractMidiDevice.doOpen(AbstractMidiDevice.java:144)

at com.sun.media.sound.AbstractMidiDevice.openInternal(AbstractMidiDevice.java:134)

at com.sun.media.sound.AbstractMidiDevice.getReceiverReferenceCounting(AbstractMidiDevice.java:339)

at javax.sound.midi.MidiSystem.getReceiver(MidiSystem.java:243)

at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:442)

at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:348)

at MiniMiniMusicApp.main(MiniMiniMusicApp.java:7)

Ele gerou uma Exception não entendi porque…

M

Já evoluímos! Antes ele sequer conseguia acessar as bibliotecas nativas. Agora ele diz que o dispositivo está indisponível.

Isso ocorre pois a JRE da Sun acessa o dispositivo de áudio diretamente (ao contrário do OpenJDK que acessa via Pulseaudio).

Isso quer dizer que você precisa garantir que nenhum outro programa esteja usando recursos de som no momento. Aí seu programa deve rodar sem problemas.

Gneto

Uffa!!! marcobiscaro2112…consegui fazer funcionar ate q enfim. Mandei encerrar as sessões do programa no eclipse e compilei novamente e deu certo!!! Kara vlw mesmo pelas dicas ae aprendi muito com esse erro.
Obrigaduuuu :roll:

Criado 18 de fevereiro de 2010
Ultima resposta 20 de fev. de 2010
Respostas 8
Participantes 2