[JAVA] referentie naar midikeyboard

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Fishbeast
  • Registratie: Oktober 2001
  • Laatst online: 16:44
Ik ben aan het proberen om een programma te maken in Java dat ervoor zorgt dat je dmv een voetpedaal van een midi-keyboard een trigger naar de computer kan sturen om het afspelen van een geluidsopname te starten.

Via google ben ik druk aan het zoeken geweest, en je vindt heel veel voorbeelden,maar die voorbeelden spelen alleen maar dingen af, en gebruiken niet externe hardware. ik zou verwachten dat je vanaf een keyboard een of ander event zou moeten kunnen ontvangen, of een of andere stream zou moeten openen om dit te kunnen.

Heeft een van jullie hier ervaring met de java.sound api (of moet ik heel ergens anders kijken?), en kan mij wat handvaten geven om dit werkend te krijgen?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat vind je precies lastig aan simpelweg de java sound api documentatie?

[ Voor 74% gewijzigd door .oisyn op 09-02-2009 15:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Fishbeast
  • Registratie: Oktober 2001
  • Laatst online: 16:44
Dat er niet duidelijk in voorbeelden wordt aangegeven hoe je dus een referentie van hardware, in dit geval een keyboard, kan krijgen. ik het al wat zitten spelen, door javax.sound.midi.MidiSystem.getMidiDeviceInfo() aan te roepen. je krijgt dan een array terug met instanties van MidiDevice.Info erin.
deze heb ik dan middels een loopje uitlezen, maar er komt helemaal niets zinnigs uit.
en aan het object MidiDevice heb ik ook niets, imho, omdat daar geen methodes in zitten die ik kan gebruiken.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik heb de api daarnet even door zitten lezen (heb er zelf geen ervaring mee), maar het lijkt me dat je pedaal een Transmitter is, en geen Receiver, Sequencer of Synthesizer. Een Transmitter heeft een methode setReceiver(), en die Receiver ontvangt vervolgens de messages van de Transmitter. Het lijkt me dat je dus zelf een Receiver moet implementeren, die moet koppelen aan de Transmitter, en dan zul je events krijgen van je pedaal.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Fishbeast
  • Registratie: Oktober 2001
  • Laatst online: 16:44
Aha, ik zal het vanavond eens gaan proberen, ik houdt je op de hoogte.

Acties:
  • 0 Henk 'm!

  • Fishbeast
  • Registratie: Oktober 2001
  • Laatst online: 16:44
Ik heb gisteren wat code geschreven om te kijken of ik bij de hardware kan komen.
dit had ik verzonnen, en had het gewoon even in een main methode gezet:
Java: Main.java
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        Sequencer seq;
        Synthesizer synth;
        MyReceiver receiver = new MyReceiver();
        Transmitter trans;
        try {
            trans = MidiSystem.getTransmitter();
            trans.setReceiver(receiver);
            seq = MidiSystem.getSequencer();
            synth = MidiSystem.getSynthesizer();
            trans.setReceiver(receiver);
            seq.open();
        } catch (MidiUnavailableException e) {
            e.printStackTrace();
        }


Java: MyReceiver.java
1
2
3
4
5
6
7
8
9
10
11
public class MyReceiver implements Receiver {

    public void close() {
        System.out.println("close called");
    }

    public void send(MidiMessage message, long timeStamp) {
        System.out.println("send called");
    }

}



alleen dat stukje in de main methode produceerde de volgende stacktrace:

code:
1
2
3
4
5
6
7
8
javax.sound.midi.MidiUnavailableException
    at javax.sound.midi.MidiSystem.getDefaultDeviceWrapper(MidiSystem.java:1078)
    at javax.sound.midi.MidiSystem.getTransmitter(MidiSystem.java:280)
    at Main.main(Main.java:22)
Caused by: java.lang.IllegalArgumentException: Requested device not installed
    at javax.sound.midi.MidiSystem.getDefaultDevice(MidiSystem.java:1130)
    at javax.sound.midi.MidiSystem.getDefaultDeviceWrapper(MidiSystem.java:1076)
    ... 2 more


ik heb op internet een beetje zitten speuren, en op een forum van een of ander opensource linux gitaarprogramma, kwam het door dat een andere applicatie de hardware bezet houdt/in gebruik heeft.
ook heb ik gelezen dat er in een properties-file aan te geven is welk device bij welke methode hoort. maar dat is nou juist iets wat ik niet wil. 't moet gewoon overal starten-lopen zijn.
iemand een idee hierover?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom haal je al die default dingen op? Waar heb je überhaupt een sequencer en synthesizer voor nodig? Wat je imho moet doen is alle midi devices aflopen adhv getMidiDeviceInfos(), die filteren op Transmitters (device instanceof Transmitter), en waarschijnlijk hou je er dan 1 over wat jouw pedaal is. Vervolgens zet je daarop jouw Receiver en open je 'm.

Heb je dit trouwens doorgelezen?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1