Problem mit Midi/Sequencer

Status
Nicht offen für weitere Antworten.

Mofi

Bekanntes Mitglied
huhu ihr,
also ich les grad so in meinem java buch und kam zu dem kapitel mit den midi sachen 🙂
das erste Beispielprogramm hab ich also abegtiptt und wollt es ausprobieren, allerdings bekam ich erstmal eine flut an fehlermeldungen...

der code wäre
[HIGHLIGHT="Java"]import javax.sound.midi.*;

public class MiniMiniMusikProg{

public static void main(String[] args){
MiniMiniMusikProg mini = new MiniMiniMusikProg();
mini.spielen();
} // main schließen

public void spielen(){
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();
Thread.sleep(5000);
player.close();
}catch(Exception e){
e.printStackTrace();
}
} // spielen schließen
} // Klasse schließen[/HIGHLIGHT]

ich bin mir relativ sicher mich nicht verschrieben zu haben
Code:
java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian is supported.
	at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)
	at javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:604)
	at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:906)
	at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:881)
	at com.sun.media.sound.SoftSynthesizer.getReceiverReferenceCounting(SoftSynthesizer.java:1165)
	at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:431)
	at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:365)
	at MiniMiniMusikProg.spielen(MiniMiniMusikProg.java:12)
	at MiniMiniMusikProg.main(MiniMiniMusikProg.java:7)

DAS sind meine fehlermeldungen 🙂

ich arbeite unter linux(ubuntu 8 wars glaub ich)

vllt kann mir ja wer auf die sprünge helfen 🙂
 
SourceDataline hat eigentlich nichts mit "javax.sound.midi" zu tun... Ich tippe mal auf einen echten Bug. Ich reis aus aktuellem Anlass gerade "com.sun.media.sound" auseinander. Daraus geht schon mal hervor, das "javax.sound.midi" im Prinzip auf "javax.sound.sampled" aufsetzt. Da werden die Instrumente je nach Reihenfolge in der Midisequenz in ein AudioFormat gebracht und in eine Line ("DirectSDL") geschrieben. Daher rührt dann wohl auch der Fehler, an dem man afaik erst mal nichts rütteln kann.
Ganz banal könnte man aber auch mal die Soundkarte korrekt konfigurieren... Auf sowas komm ich allerdings ganz zuletzt... ich geh' halt davon aus, das das schon geschehen ist.
 
Zuletzt bearbeitet von einem Moderator:
huhu ihr,
also ich les grad so in meinem java buch und kam zu dem kapitel mit den midi sachen 🙂
das erste Beispielprogramm hab ich also abegtiptt und wollt es ausprobieren, allerdings bekam ich erstmal eine flut an fehlermeldungen...

Na wenn das Buch mal nicht aus der Head First-Reihe ist ;-)

ich arbeite unter linux(ubuntu 8 wars glaub ich)

vllt kann mir ja wer auf die sprünge helfen 🙂

Hast du die Möglichkeit das mal unter Windows zu kompilieren? Ich hatte an der selben Stelle ein ähnliches Problem. Auf debian lief es nicht, unter Windows schon.

Gruß
frapo
 
Ich hab das hier noch entdeckt:Midi not working in Java - Ubuntu Forums (englisch)
Irgendwie scheints doch am System zu liegen. vllt. tuts ja diese Zeile die dort gepostet wird bei dir auch.
Sonst versuch mal eine Wave-Datei mit den Eigenschaften aus der Exception in Java abzuspielen. Das sollte dann auch der Einfachheit halber mit der Klasse "Clip" gehen, da diese auch 'ne "DirectSDL" verwendet.
 
Na wenn das Buch mal nicht aus der Head First-Reihe ist ;-)



Hast du die Möglichkeit das mal unter Windows zu kompilieren? Ich hatte an der selben Stelle ein ähnliches Problem. Auf debian lief es nicht, unter Windows schon.

Gruß
frapo

hehe jap genau diese reihe (halt auf deutsch 😛) ganz ehrlich ich hatte noch nie soviel spaß beim java lernen *g*

ja klar hab ich auch einen windows rechner 😉 (linux ist nur für tagsüber weils aufm netbook ist)

und tada unter windows funktioniert *seufz*

hm woran könnts liegen? soundkarte? hab da echt keinen plan *g*
 
Zuletzt bearbeitet:
hehe jap genau diese reihe (halt auf deutsch 😛) ganz ehrlich ich hatte noch nie soviel spaß beim java lernen *g*

Ging mir genauso bzw. geht mir immer noch genauso, denn andere Titel der Reihe finde ich ebenso gelungen (Entwurfsmuster und OOA & OOD).

ja klar hab ich auch einen windows rechner 😉 (lnux ist nur für tagsüber weils aufm netbook ist)

und tada unter windows funktioniert *seufz*

hm woran könnts liegen? soundkarte? hab da echt keinen plan *g*

Ich bin da auch nicht wirklich weitergekommen bzw. mir ist es nicht sooo wichtig gewesen MIDI auf Linux ans laufen zu bekommen.

Vermutlich wird die Soundkarte nicht richtig ins System eingebunden oder das System erkennt nicht korrekt die MIDI-Möglichkeiten der Karte. Der Rest an Sound funktioniert ja. Es gibt da wohl noch die Möglichekeit einen reinen Software-Synthesizer zu installieren und einzurichten. In diese Richtung würde ich mal forschen.

Gruß
frapo
 
Schaut euch den Stacktrace da oben mal an... Da wird bereits eine Software-Lösung von Java verwendet ("SoftSynthesizer"). Daraus resultiert dann auch, das die oben besagte SourceDataLine verwendet wird, welche dann das Format "44100Hz, Stereo, 16 Bits pro Sample" nicht unterstützt. SourceDatalLine verwendet definitiv einen (Nicht-Midi-) Hardware-Mixer.
 
Schaut euch den Stacktrace da oben mal an... Da wird bereits eine Software-Lösung von Java verwendet ("SoftSynthesizer"). Daraus resultiert dann auch, das die oben besagte SourceDataLine verwendet wird, welche dann das Format "44100Hz, Stereo, 16 Bits pro Sample" nicht unterstützt. SourceDatalLine verwendet definitiv einen (Nicht-Midi-) Hardware-Mixer.

Hm.. ich denke du hast da recht. Nur wie geht man mit dem Problem um? Was genau kann man tun? Kann man z.B. einen anderen Software-Synth. nutzen? Wenn ja, wie? Eine andere Frage ist warum wird der Hardware-Mixer benutzt, wo doch einer vorhanden ist?

Mit Java und MIDI habe ich mich nun wirklich noch gar nicht beschäftigt.

Gruß
frapo
 
Eine andere Frage ist warum wird der Hardware-Mixer benutzt, wo doch einer vorhanden ist?
Die Frage stellst du jetzt nicht wirklich... soll etwa ein Software-Mixer verwendet werden? 🙂
Glücklicherweise ahne ich was du fragen wolltest. Der Hardware-Midi-Synthesizer wird offensichtlich von Java nicht gefunden. Deswegen wird der Java interne "SoftSynthesizer" verwendet, welcher die Ausgabe auf ein gefundenes AudioDevice leitet. Das AudioDevice könnte nun ebenfalls ein "SoftDevice" sein (das mit dem "Hardware-Mixer" ist bei nochmaligem überlegen, eher Unfug). Das geht aus der Fehlermeldung nicht hervor. Fakt ist, das dieses Device das vom "SoftSyntesizer" gewählte AudioFormat nicht unterstützt. Da jene Soundkarten, die dieses besagte Format noch nicht unterstützen, kaum noch in heutige Rechner passen, (wie hiess dieser 16-Bit-Bus doch gleich? Na Egal...) gehe ich stark davon aus, das deine Soundkarte von Java nicht gefunden wurde. Noch angemerkt: AudioDevice und MidiSynthesizer (sofern vorhanden) sind auf jeder Soundkarte zwei verschiedene Geräte. Nun bin ich mit Linux leider nicht auf dem laufenden. Sofern deine Soundkarte aber korrekt konfiguriert ist, fehlt möglicherweise nur ein Link im "/dev"-Verzeichnis, welcher auf die Soundkarte zeigt (z.B. "/dev/snd -> /dev/snd0" bzw. "/dev/midi -> /dev/midi0").
 
Zuletzt bearbeitet von einem Moderator:
Nun bin ich mit Linux leider nicht auf dem laufenden. Sofern deine Soundkarte aber korrekt konfiguriert ist, fehlt möglicherweise nur ein Link im "/dev"-Verzeichnis, welcher auf die Soundkarte zeigt (z.B. "/dev/snd -> /dev/snd0" bzw. "/dev/midi -> /dev/midi0").

Hey, genau das könnte es eigentlich sein.. ein fehlender Link /dev ..da werde ich mal forschen.

Ach ja.. herzlichen Dank für deine Anteilnahme hier 🙂. Auch wenn ich nicht der ursprüngliche Threadersteller war, habe ich durch deine Beiträge, einiges mehr zum Thema Midi, Synth (ob HW oder SW) begriffen.

Gruß
frapo
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben