Computertastatur zur Erzeugung von Midisignalen.

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Computertastatur zur Erzeugung von Midisignalen.

Beitrag von haderlump »

Hallo zusammen.
Ich habe mir ein chromatisches Knopfakkordeon zugelegt.
Jetzt stellte ich fest, dass die Tasten des Computerkeyboards weitgehend die gleiche Anordnug wie auf dem Akkordeon haben.
Nun würde ich gerne diese Tastatur zur Ansteuerung eines Midi-Keyboards verwenden.
Dazu hätte ich ein paar Fragen

1. Kann man die Tastenwiederholungsfunktion softwaremäßig ausschalten?
2. Kann man mehrere Tasten gleichzeitig drücken?
3. Gibt es eine OS Message, die mitteilt, dass eine bestimmte Taste losgelassen wurde?

Was brauche ich, um Midi-Schnittstellen anzusprechen (die Treiber sind bereits intalliert. )

Gruß Fritz

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von Mathias »

1. Kann man die Tastenwiederholungsfunktion softwaremäßig ausschalten?

Vieleicht hilft dir das Beispiel im Anhang weiter.

2. Kann man mehrere Tasten gleichzeitig drücken?

Ist von der Hardware abhängig. ZB. eine gute Gamingtastatur.

3. Gibt es eine OS Message, die mitteilt, dass eine bestimmte Taste losgelassen wurde?

OnKeyUp im Form.
Dateianhänge
Pacman_Steuerung.tar.gz
(126.87 KiB) 149-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von Winni »

Hallo!

Avra aus dem internationalen Forum hat mal was für Windows gebaut.
Laut Deiner Signatur ist das ja ausreichend.

https://bitbucket.org/avra/ct4laz/downloads/pl_win_midi.zip

Winni

haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von haderlump »

Danke erst mal,
mal schauen wie ich damit zurecht komme.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von siro »

Hallo Fritz,

du kannst die Tastenkontrolle komplett selbst übernehmen
Die Wiederholfunktion wird einfach über ein FLAG geblockt.
Bei KeyDown wird ein Flag gesetzt, bei KeyUp dann wieder gelöscht.
Die Repeatfunktion ist dann per Software ausgefiltert.
Wenn das Flag schon gesetzt ist, reagieren wir einfach nicht mehr auf KeyDown solange bis die Taste wieder losgelassen wurde.
Du benötigst die Unit Windows für die Tastencodes.
Zudem musst Du im Formular bei Eigenschaften KeyPreview auf TRUE setzen, damit das Formulat die Tastencodes abfängt.

Du kannst mehrere Tasten gleichzeitig drücken das funktioniert.
Ich habe zum Testen einfach 3 Checkboxen aufs Formular gesetzt.

Dazu ein Testcode:

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
   Windows;  // wird für die Keycodes benötigt
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Box_A: TCheckBox;
    Box_B: TCheckBox;
    Box_C: TCheckBox;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
var A_pressed,B_pressed,C_pressed: Boolean;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if Key = VK_A then begin          // wenn die Taste "A" gedrückt wurde
    if NOT A_Pressed then begin     // prüfen ob sie schon gedrückt war (Wiederholfunktion ignorieren)
      A_Pressed:=TRUE;              // Taste gedrückt Flag setzen
      Box_A.Checked:=TRUE;          // Ton erzeugen oder was auch immer
    end;
  end;
 
  if Key = VK_B then begin
    if NOT B_pressed then begin  // wenn Taste noch nicht gedrückt war
      B_pressed:=TRUE;           // Flag setzen, nun ist sie gedrückt
      Box_B.Checked:=TRUE;
    end;
  end;
 
  if Key = VK_C then begin
    if NOT C_pressed then begin
      C_pressed:=TRUE;
      Box_C.Checked:=TRUE;
    end;
  end;
end;
 
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_A then begin   // wenn Taste A losgelassen wurde, dann
    A_pressed:=FALSE;        // Taste gedrückt Flag löschen
    Box_A.Checked:=FALSE;    // Ton abschalten
  end;
 
  if Key = VK_B then begin
    B_pressed:=FALSE;
    Box_B.Checked:=FALSE;
  end;
  if Key = VK_C then begin
    C_Pressed:=FALSE;
    Box_C.Checked:=FALSE;
  end;
end;
 
end.
 


Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von Mathias »

Auf die Unit Windows kann verzichtet werden, guck doch mal mein Pacmandemo oben an.
Da wird für die meisten Tasten ein Flag gesetzt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von siro »

sorry Mathias, ich kann mir das unter Windows nicht ansehen. Keine Ahnung was .tar.gz ist, Windows kennt es nicht :cry:
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von Mathias »

Dann ist es höchste Zeit, das du 7zip installierst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von siro »

Ohne jetzt unnötig noch was zu installieren :wink:
habe ich es jetzt selbst rausgefunden.
Nicht Windows sondern "LCLType" wird benötigt.....
In dieser Unit unter der Rubrik "Virtual keys" findet man die benötigten KeyCodes VK_xxx

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Computertastatur zur Erzeugung von Midisignalen.

Beitrag von haderlump »

Danke, das mit der Tastatur klappt jetzt wunderbar.
Aber mit dem Midimodul habe ich noch Probleme.
Hat da schon jemand damit gearbeitet?
Weiß jemand einen Code wo man spionieren kann.
Ich brauche ja nicht viele Funktionen, ich will ja keinen Sequenzer schreiben.
Im wesentlichen brauch ich 3 Funktionen.
1. Ich habe mehrere Midischnttstellen auf dem Rechner. Da müßte ich eine dem Programm zuordnen.
2. Ich brauche den Note on Befehl und den Note Off Befehl. Eventuell noch all_notes_off.

Das wars dann auch schon.

Wäre halt super wenn es irgendwo ein Demoprogramm gäbe.

Gruß Fritz.

Antworten