Thema: MIDI Klavier

Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#7

Re: MIDI Klavier

  Alt 29. Jun 2005, 12:17
Zitat von tilman:
system.pas nicht gefunden
Diese Unit gehört zu Delphi dazu. Das Problem hast du, wenn aus irgendeinem Grund das Unterverzeichnis Lib des Delphi-Verzeichnisses nicht mehr in den Bibliotheksverzeichnissen und im Suchpfad steht, hatte ich auch schon mal.

Kann aber sein, dass die Kompo nicht gut mit D7 arbeitet. Mit D6 hab ichs noch probiert, das geht... Aber laut Readme ist sie für Delphi 3 (das ich hier auch genommen habe).

Zitat von Nicolai1605:
Könntest du evtl. noch eine kure Erklärung zu der Komponente geben oder den Quelltext kommentieren?
Eigentlich spricht die Komponente für sich - zumindest, soweit ich sie schon genutzt habe.

Sie mal in mein FormCreate:

Delphi-Quellcode:
  Dev := Ini.ReadInteger('Device', 'ID', 0);

  if MidiOut.Numdevs = 0 then
  begin
    Application.MessageBox(PChar(NoDevices), PChar(ErrorTitle),
      MB_OK or MB_ICONSTOP);
    Application.Terminate;
    exit;
  end
  else
  begin
    for I := MidiOut.Numdevs - 1 downto 0 do
    begin
      MidiOut.DeviceID := I;
      MenuItem := TMenuItem.Create(self);
      with MenuItem do
      begin
        Caption := MidiOut.ProductName;
        RadioItem := true;
        Tag := I;
        OnClick := ChangeDevice;

        if Dev = I then
          Checked := true;
      end;
      Gert1.Add(MenuItem);
    end;
  end;
  MidiOut.DeviceID := Dev;
  MidiOut.Open;
MidiOut ist hier die Komponente (TMidiOutput).

Erst wird aus der INI das zuletzt verwendete Gerät gelesen. Dann wird geprüft, ob kein Gerät vorhanden ist, dann wird das Programm beendet (mit einer Fehlermeldung )
Ansonsten wird in einer Schleife auf das Gerät gewechselt. So kann dessen Name erhalten werden, es wird hier ein entsprechender Menüeintrag generiert.

Allgemein wäre die kürzeste Form der Initialisierung:
Im Objektinspektor 0 als DeviceID einstellen und dann nur MidiOut.Open (beim Programm beenden oder vorm Gerätewechsel MidiOut.Close nicht vergessen). Dann hast du aber immer das gleiche Gerät.

Um jetzt Töne auszugeben:

MidiOut.PutShort(Message, DataByte1, DataByte2); Datenbytes gehen im Bereich von 0 bis 127 (oberstes Bit immer gelöscht).

Da gibt es einmal die Channel-Messages (n steht für die Channelnummer, es gibt 16 Channels von 0 bit 15, in Hex 0 bos F):
Hex - Funktion:
§8n - Note Off (Datenbyte 1 ist Note, Datenbyte 2 brauchst du hier nicht (Lautstärke))
$9n - Note On (Datenbyte 1 ist Note, Datenbyte 2 ist Lautstärke, wieder von 0 bis 127)
$Cn - Program Change (Instrumentenwechsel, Sie Instrumente stehen in meinem Instrumentenmenü, die Nummer habe ich beim entsprechenden TMenuItem als Tag hinterlegt, Datenbyte 2 wird ignoriert (Bei der MIDI-Schnittstelle wird es, glaube ich, gar nicht übertragenm, wenn du ein externes Gerät ausgewählt hast))

Es gibt noch weitere, aber diese hier habe ich selbst schon verwendet. Über die anderen muss ich mich noch informieren, ebenso wie über globale Messages (nicht Channelbezogen).

Die Noten gehen von 0 bis 127 in Halbtonschritten. 60 ist dabei c'.

Channel 10 (A) ist eine3 Besonderheit: Hier kannst du kein Instrument einstellen, dafür hast du hier das Schlagzeug. Die zugeordneten Instrumente sind:

Zitat von MIDI-Liste über Drums:
MIDI-Drums
Ton Tastennummer Schlaginstrument
B1 35 Acoustic Bass Drum
C2 36 Bass Drum 1
C#2 37 Side Kick
D2 38 Acoustic Snare
D#2 39 Hand Clap
E2 40 Electric Snare
F2 41 Low Floor Tom
F#2 42 Closed High-Hat
G2 43 High Floor Tom
G#2 44 Pedal High Hat
A2 45 Low Tom
A#2 46 Open High Hat
B2 47 Low-Mid Tom
C3 48 High-Mid Tom
C#3 49 Crash Cymbal 1
D3 50 High Tom
D#3 51 Ride Cymbal 1
E3 52 Chinese Cymbal
F3 53 Ride Bell
F#3 54 Tambourine
G3 55 Splash Cymbal
G#3 56 Cowbell
A3 57 Crash Cymbal 2
A#3 58 Vibrastrap
B3 59 Ride Cymbal 2
C4 60 High Bongo
C#4 61 Low Bongo
D4 62 Mute High Conga
D#4 63 Open High Conga
E4 64 Low Conga
F4 65 High Timbale
F#4 66 Low Timbale
G4 67 High Agogo
G#4 68 Low Agogo
A4 69 Cabasa
A#4 70 Maracas
B4 71 Short Whistle
C5 72 Long Whistle
C#5 73 Short Guiro
D5 74 Long Guiro
D#5 75 Claves
E5 76 High Wood Block
F5 77 Low Wood Block
F#5 78 Mute Cuica
G5 79 Open Cuica
G#5 80 Mute Triangle
A5 81 Open Triangle
General-MIDI-Drums
Felix Alter
  Mit Zitat antworten Zitat