1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Musik an Midi Port schicken

  • phudy
  • 24. August 2007 um 21:12
  • Unerledigt
  • phudy
    10
    phudy
    Mitglied
    Reaktionen
    12
    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 :grinning_squinting_face:


    hilfe hilfe hilfe!

  • Stephe
    24
    Stephe
    Mitglied
    Reaktionen
    43
    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
    10
    phudy
    Mitglied
    Reaktionen
    12
    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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern