1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Musik an Midi Port schicken

  • phudy
  • 24. August 2007 um 21:12
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • phudy
    Punkte
    1.087
    Beiträge
    182
    • 24. August 2007 um 21:12
    • #1

    also, grosses problem:

    seit osx 10.4.8 unterstuetzt apple das com.apple.audio.midi package nicht mehr. deshalb hab ich mich mal umgesehen und eine library namens mmj gefunden.
    diese will aber nicht so richtig funktionieren.

    nun meine frage:
    hat jemand von euch erfahrung mit MIDI + Java?!


    ich will naemlich mittels java midi ports anlegen.
    na gut, wenn das nicht geht, dann wie schaffe ich es wenigstens midi an
    diese IAC ports zu schicken, welche man mittels dem Audio Midi Setup programm erstellen kann?

    und JA, es muss java + osx >10.4.8 sein :D


    hilfe hilfe hilfe!

  • Stephe
    Punkte
    6.038
    Beiträge
    968
    • 30. August 2007 um 01:12
    • #2

    schon mal mit dem java media framework (jmf) probiert? bei mir hat das zumindest unter windows schon geklappt.

  • phudy
    Punkte
    1.087
    Beiträge
    182
    • 6. September 2007 um 21:13
    • #3

    ja, das JMF ist unter osx auch so la la :wein:

    generell suckt osx ein bissi wenns um "standard" java geht.
    so seien zb folgende zitate angefuehrt:
    ====================================
    Up to version 1.4.1, there was no Port implementation in the Sun JDK. In 1.4.2, an implementation was added for Windows. In 1.5.0, an implementation was added for Solaris and Linux. (Matthias)
    http://www.jsresources.org/faq_audio.html#sec_ports


    Such control is not presently available for OS X from Java.
    http://archives.java.sun.com/cgi-bin/wa?A2=…interest&P=1392


    Use the old CoreAudio.jar libraries, if you can dig them off an old CD. This works great on PPC machines; CoreAudio-Java had no difficulty identifying devices for the user via AudioHardware.getAudioDevices(). Unfortunately, it was abandoned by Apple in 2003 and does not work on intel-based macs, so java sound programmers are now without a viable solution.
    http://lists.apple.com/archives/java-…y/msg00244.html
    ====================================

    nun gut, dann beantworte ich mir mal meine frage selbst...

    PHP
    public class MidiSpielerei {
    
    	private MidiSpielerei() { }
    
    	private static de.humatic.mmj.MidiOutput openMidiPort(String port) {
            // hier sollte man eigentlich vorher MidiOutputs cachen
    
            de.humatic.mmj.MidiSystem.initMidiSystem(port, port);
    		String[] outputNames = de.humatic.mmj.MidiSystem.getOutputs();
    
            int portIndex = -1;
            for (int i = 0; i < outputNames.length; i++) {
                if(outputNames[i].equals(port)) {
                    portIndex = i;
                    break;
                }
            }
    
            if(portIndex == -1) {
                throw new RuntimeException("could not open port!");
            }
    
            return de.humatic.mmj.MidiSystem.openMidiOutput(portIndex);
        }
    
    	public static void playMidi(File midiFile, String portName) throws Exception {
    		Sequencer sequencer = javax.sound.midi.MidiSystem.getSequencer();
    		sequencer.open();
    
    		Transmitter transmitter = sequencer.getTransmitter();
    		de.humatic.mmj.MidiOutput output = openMidiPort(portName);
    		transmitter.setReceiver(new MyReceiver(output));
    
    		Sequence sequence = javax.sound.midi.MidiSystem.getSequence(midiFile);
    		sequencer.setSequence(sequence);
    
    		sequencer.addMetaEventListener(new MetaEventListener() {
    			public void meta(MetaMessage meta) {
    				if(meta.getType() == 47) {
    					sequencer.stop();
    					sequencer.close();
    				}
    			}
    
    		});
    
    		sequencer.start();
    	}
    }
    
    
    class MyReceiver implements Receiver {
        de.humatic.mmj.private MidiOutput output;
    
        public MyReceiver(MidiOutput output) {
            this.output = output;
        }
    
        public void close() {
    		// nothing to do
        }
    
    
        public void send(MidiMessage message, long timeStamp) {
            this.output.sendMidi(message.getMessage(), timeStamp);
        }
    
    }
    Alles anzeigen

    ps: ich mach jetzt saemtliche restlichen audio sachen ausschliesslich mit dem quicktime package (da man mit java nichtmal den line-in port unter osx aufnehmen kann) und quicktime + apple sich (klarerweise) prima verstehen. in diesem sinne

    Code
    QTSession.open();
  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum