Toon posts:

[Java-J2ME] Midi programmeren

Pagina: 1
Acties:
  • 36 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,

Om te oefenen voor een aankomend tentamen heb ik een standaard programma (van de docent) gekregen waarin 2 Miditones zijn geprogrammeerd. Nu wil ik graag extra toontjes toevoegen maar op de een of andere manier lukt me dit niet. Ik heb al wat zitten rotzooien met de getallen maar ik krijg het niet voor elkaar. Het programma werkt wel en speelt keurig de 2 noten af die het zonder bewerken deed maar de derde speelt ie gewoon weg niet af. Heeft iemand een idee wat ik fout doe?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import javax.microedition.io.*;

import java.lang.*;
import java.io.*;

public class AppForm extends Form {

    Player p;

    public AppForm (String title) {
        super (title);
        this.append (new StringItem ("sound", "midi"));

        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream ();
            baos.write (0x4d); // M
            baos.write (0x54); // T
            baos.write (0x68); // h
            baos.write (0x64); // d

            baos.write (0x00); // Length of the MThd chunk is always 6
            baos.write (0x00);
            baos.write (0x00);
            baos.write (0x06);

            baos.write (0x00); // The Format type is 0
            baos.write (0x00);

            baos.write (0x00); // There is 1 chunk
            baos.write (0x01);

            baos.write (0x00); // Each increment of delta-time represents a millisecond
            baos.write (0xf0);

            baos.write (0x4d); // M
            baos.write (0x54); // T
            baos.write (0x72); // r
            baos.write (0x6b); // k

            baos.write (0x00); // Length of the MTrk chunk
            baos.write (0x00);
            baos.write (0x00);
            baos.write (0x24);

            baos.write (0x32);

            baos.write (0x00); // At

            baos.write (0xc0); // Instrument
            baos.write (0x18);

            baos.write (0x00); // At

            baos.write (0xe0); // Pitch bend
            baos.write (0x00);
            baos.write (0x00);

            baos.write (0x00); // At

            baos.write (0x90); // Note On
            baos.write (0x3c);
            baos.write (0x40);

            baos.write (0x83); // At
            baos.write (0x74);

            baos.write (0x90); // Note Off
            baos.write (0x3c);
            baos.write (0x00);

            baos.write (0x00); // At

            baos.write (0xc1); // Instrument
            baos.write (0x18);

            baos.write (0x00); // At

            baos.write (0xe1); // Pitch bend
            baos.write (0x00);
            baos.write (0x40);

            baos.write (0x00); // At

            baos.write (0x91); // Note On
            baos.write (0x3c);
            baos.write (0x40);

            baos.write (0x83); // At
            baos.write (0x74);

            baos.write (0x91); // Note Off
            baos.write (0x3c);
            baos.write (0x00);

            baos.write (0x00); // At

            baos.write (0xff); // Note Off
            baos.write (0x2f);
            baos.write (0x00);

//Hier probeer ik dus een extra toon in te voegen.
                                    baos.write (0x00); // At

                                    baos.write (0xc0); // Instrument
                                    baos.write (0x12);

                                    baos.write (0x00); // At

                                    baos.write (0xe2); // Pitch bend
                                    baos.write (0x00);
                                    baos.write (0x00);

                                    baos.write (0x00); // At

                                    baos.write (0x92); // Note On
                                    baos.write (0x3c);
                                    baos.write (0x40);

                                    baos.write (0x83); // At
                                    baos.write (0x74);

                                    baos.write (0x92); // Note Off
                                    baos.write (0x3c);
                                    baos.write (0x00);

            ByteArrayInputStream bais = new ByteArrayInputStream (baos.toByteArray ());
            p = Manager.createPlayer (bais, "audio/midi");
            p.start ();
        } catch (Exception e) {
            System.out.println (e.toString ());
        }
        System.out.println ("AppForm called ...");
    }

}

[ Voor 0% gewijzigd door een moderator op 15-05-2007 19:39 . Reden: code=java fix ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En dat is hier dus nadrukkelijk niet de bedoeling (Quickfix); andermans code 'lenen', dan aanpassingen doen en er achter komen dat het niet werkt en ons dan laten zoeken naar het probleem :P Die ballon gaat hier niet op ;)

Lees onze Programming Beleid Quickstart eens door en zie wat wij hier verwachten van een Topicstart in [PRG]. Je bent hier van harte welkom met een nieuw topic, maar houd je dan wél aan de betreffende quickstart a.u.b. ;)

Nog een tipje: lees code tags even door; dan zul je zien dat je ook [code=java] kunt doen, wat weer leuk is voor de syntax-highlighting ;)

En als laatste tip: ik vermoed (zonder iets van het MIDI formaat te weten) dat het zit in regel 45-48 :Y) Het ziet er naar uit dat je opgeeft hoe lang de data is die gaat komen; en als je dat niet aanpast zal 'ie (vermoed ik) alle data na die lengte negeren. Zorg dan dat je regel 26 ook in acht neemt ;) Toch niet; die heeft betrekking op de MIDI header :P

[ Voor 3% gewijzigd door RobIII op 15-05-2007 19:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.