Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Kein Ton bei MIDI (https://www.delphipraxis.net/158921-kein-ton-bei-midi.html)

EWeiss 8. Mär 2011 06:22


Kein Ton bei MIDI
 
Woran kann es liegen das ich keinen Ton bei midi erhalte?
Alle Gesendeten messagen sind positiv aber Ton kommt keiner.

Habe direkt mit MMSystem versucht.
Danach mit der Midi Komponente aus dem Forum hier, kein Erfolg.

Meine Soundkarte ist in Ordnung.

Delphi-Quellcode:
  WM_COMMAND:
    begin
      case LoWord(wP) of
        ID_KEY_ARRAY_FIRST..ID_KEY_ARRAY_LAST:
          PutShortMidi($90, byte((wp - 200) + 1), volume);
      end;
Eigentlich sollte jetzt ein durchgehender Ton zu hören sein.
Alle anderen Samples incl. das von FAlter funktionieren hier.

Nicht einmal der einfachste aufruf führt zum erfolg.
Einfaches Sample
Funktioniert auch nicht

gruss

Bummi 8. Mär 2011 06:58

AW: Kein Ton bei MIDI
 
Zitat:

Funktioniert auch nicht
bei mir schon ....

EWeiss 8. Mär 2011 07:08

AW: Kein Ton bei MIDI
 
Zitat:

Zitat von Bummi (Beitrag 1086697)
Zitat:

Funktioniert auch nicht
bei mir schon ....

Ja es funktioniert ;)
Aber nicht mit meinem Window.

Die frage ist also latency, Callback oder was sonst für ein Problem.
Alle Messagen sind True also kein Fehler trotzdem kein Ton. (NUR in meinem Projekt)

Zitat:

Sollte den MIDI-Empfänger nach diesen 300 ms keine MIDI-Information mehr erreichen, geht er davon aus, dass die MIDI-Verbindung unterbrochen, z. B. das Kabel durchgeschnitten wurde und löscht seinen MIDI-Puffer
Auch gültig für mein Window?


gruss

himitsu 8. Mär 2011 07:31

AW: Kein Ton bei MIDI
 
Sicher daß dein ID_KEY_ARRAY_FIRS... überhaupt aufgerufen wird?

Funktioniert das PutShortMidi, wenn es z.B. über einen Button direkt aufgerufen wird?

EWeiss 8. Mär 2011 07:37

AW: Kein Ton bei MIDI
 
Zitat:

Zitat von himitsu (Beitrag 1086703)
Sicher daß dein ID_KEY_ARRAY_FIRS... überhaupt aufgerufen wird?

Funktioniert das PutShortMidi, wenn es z.B. über einen Button direkt aufgerufen wird?

Zitat:

ID_KEY_ARRAY_FIRS...
Wird Hundertprozentig aufgerufen. ;)
Wie gesagt beim debuggen werden alle Messagen positiv übergeben.

Zitat:

wenn es z.B. über einen Button direkt aufgerufen wird?
Ich rufe es über einen Button auf allerdings nonvcl.

EDIT:
Hab mal nen VCL Button addiert
Kein Ton.

gruss

shmia 8. Mär 2011 11:09

AW: Kein Ton bei MIDI
 
Hast du mit einer Software, die erwiesenermaßen MIDI-Töne ausgeben kann auf deinem Rechner getestet?
Also z.B. mit dem Windows Media Player eine Midi-Datei abspielen.

Dass deine Soundkarte in Ordnung ist, ist ja noch kein BEWEIS, dass auch das Midi-Subsystem wirklich funktioniert.
Ich hoffe du hast das Prinzip verstanden:
Traue niemanden, nicht mal Dir selbst! Bei Problemen gehe zurück auf Los und beweise dass es funktioniert.
Hast du deine MIDI-Funktionen in einer VCL-Anwendung getestet?
Falls nicht: schwerer Fehler!
Mit einer VCL-Anwendung kann man wesentlich einfacher testen als mit einer NonVCL-Anwendung.
Deshalb sollte man Code, der etwas komplizierter ist zuerst in eine VCL-Anwendung packen und testen.

EWeiss 8. Mär 2011 11:28

AW: Kein Ton bei MIDI
 
Zitat:

Zitat von shmia (Beitrag 1086757)
Hast du mit einer Software, die erwiesenermaßen MIDI-Töne ausgeben kann auf deinem Rechner getestet?
Also z.B. mit dem Windows Media Player eine Midi-Datei abspielen.

Dass deine Soundkarte in Ordnung ist, ist ja noch kein BEWEIS, dass auch das Midi-Subsystem wirklich funktioniert.
Ich hoffe du hast das Prinzip verstanden:
Traue niemanden, nicht mal Dir selbst! Bei Problemen gehe zurück auf Los und beweise dass es funktioniert.
Hast du deine MIDI-Funktionen in einer VCL-Anwendung getestet?
Falls nicht: schwerer Fehler!
Mit einer VCL-Anwendung kann man wesentlich einfacher testen als mit einer NonVCL-Anwendung.
Deshalb sollte man Code, der etwas komplizierter ist zuerst in eine VCL-Anwendung packen und testen.

Gut gemeinte Vorschläge.. Danke
Zitat:

Alle anderen Samples incl. das von FAlter funktionieren hier.
Siehe was ich oben geschrieben habe.
Zitat:

einfacher testen als mit einer NonVCL-Anwendung.
Das ist Ansichtssache.
Ich habe keine Probleme damit ;)

Summa summarum.
Wurde alles bis auf's kleinste genau so, vorher schon geprüft, wie du vorgeschlagen hast.

Und in VCL Anwendungen zu prüfen (Da geht es ja) wenn ich mit NonVCL arbeite macht keinen sinn.
Das muss hier laufen.

Zitat:

Deshalb sollte man Code, der etwas komplizierter ist zuerst in eine VCL-Anwendung packen und testen.
Drei zeilen bzw.. nur eine um einen MIDI Ton ausgeben zulassen ist nicht gerade schwer oder?

gruss

shmia 8. Mär 2011 13:58

AW: Kein Ton bei MIDI
 
Zitat:

Zitat von EWeiss (Beitrag 1086761)
Drei zeilen bzw.. nur eine um einen MIDI Ton ausgeben zulassen ist nicht gerade schwer oder?

Es scheint aber nicht zu funktionieren. :|

Ich versuche Dir nur zu erklären wie man es richtig macht.
1.) sämtlicher Code für die Ansteuerung für MIDI gehört in eine eigene Unit.
2.) In dieser Unit gibt es eine Klasse mit diversen Methoden wie z.B. NoteOn(), NoteOff(),...
Es kann nur eine Klasse sein, denn die API-Funktion MidiOutOpen() liefert ein Handle zurück, dass man für alle weiteren API-Aufrufe aufbewahren muss.
Dafür braucht man eine Klasse; eine globale Variable wäre unprofesionell, da es mehr als ein MIDI-Device geben kann.
3.) diese Unit muss getestet und schrittweise verbessert werden.
Das ist keine Zeitverschwendung sondern absolut notwendig.
4.) zum Testen könnte man eine VCL, NonVCL oder Konsolenanwendung verwenden.
Sinnvoller Weise verwendet man eine VCL-Anwendung.
5.) die Testanwendung wird nicht weggeworfen, sondern zusammen mit der NonVCL-Anwendung für spätere Tests aufbewahrt.
6.) Die MIDI-Out-Klasse stellt eine Abstraktionsschicht um die Windows-API dar.
In der Anwendung finden sich daher keine Konstanten wie z.B. $90(=Note-On).

Schau Dir mal die Unit JclMidi aus der Jedi Code Library an. So muss das aussehen!
Wobei du für deine Zwecke die MIDI-Klasse etwas einfacher halten kannst.

EWeiss 8. Mär 2011 14:23

AW: Kein Ton bei MIDI
 
Zitat:

Ich versuche Dir nur zu erklären wie man es richtig macht.
Deine Erklärungen gehen voll am thema vorbei.
Sorry.

Das sind alles mir bekannte Dinge die mußt du mir nicht erklären.
Hier geht es um etwas anderes.
Aber trotzdem Danke.

Das Event Play wird einfach nicht ausgelößt.
Obwohl alle funktionen gegengeprüft und einen True part zurückliefern.

Es hat nichts mit MIDI in dem sinne zu tun sondern mit meinem Window
Es läßt die Messagen nicht durch.
Meine vermutung ist das es an meinen Interfacen innerhalb der DLL liegt
in der meine Funktionen für das erstellen meines Skin Windows enthalten sind.

Es dauert wohl zu lange bis alles abgearbeitet ist und das deshalb die 300ms überschritten werden
und das Handle vom MidiOut nicht mehr existiert.

Das ist meine einzige erklärung für das Problem.
In einem anderen Project (auch mit meinem Window Skin aber ohne DLL) funktioniert das abspielen.

gruss

vergessen 8. Mär 2011 17:38

AW: Kein Ton bei MIDI
 
Hast Du Dein Programm mal ohne/außerhalb der IDE getestet?

Bei mir klemmt manchmal Drag&Drop, wenn die IDE noch läuft :twisted:

MfG

EWeiss 8. Mär 2011 18:35

AW: Kein Ton bei MIDI
 
Zitat:

Zitat von vergessen (Beitrag 1086854)
Hast Du Dein Programm mal ohne/außerhalb der IDE getestet?

Bei mir klemmt manchmal Drag&Drop, wenn die IDE noch läuft :twisted:

MfG

Es ist wie ich sagte.
Ein Controll hat verhindert das die Messagen weitergeleitet wurden.
Midi hat ja funktioniert (hab ich oben ja auch gesagt .. NUR nicht mit meinem Window.

Ich lade das mal unter Freeware hoch erstmal ohne source dann kann ja mal jemand testen wenn er will.
EXE ist nur 72 KB groß

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz