![]() |
MIDI Klavier
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe auf meiner Festplatte noch eine uralte MIDI-Komponente gefunden und wollte sie ausprobieren. Bis jetzt ist dabei das herausgekommen, was hier anhängt. (Die Komponente hängt mit an.) Man spielt über die Tastatur. Die Töne werden über das gewählte MIDI-Gerät ausgegeben. Die Standard-Tastenbelegung: untere Reihe beginnt bei <, obere bei q, schwarze schräg darüber. Wer eine nicht-deutsche Tastatur hat, muss die Belegung anpassen. Die Einstellungen werden in einer INI gespeichert*, die Registry bleibt also sauber (außer dem Unistaller-Eintrag, um es über Systemsteuerung/Software deinstallieren zu können.) Auch hier zu finden: PC-Welt: ![]() MSN (über PC-Welt): ![]() AOL (über PC-Welt): ![]() Freeware.de (über Upload.de): ![]() Updates.de (Über Upload.de): ![]() Shareware.de (Über Uploads.de): ![]() Infos in meinem Blog: ![]() Mfg FAlter Neueste Version: V 1.0 - Final Eventuell erneut runterladen von ![]() Es wurden noch zwei weitere kleine Testtools beigelegt. *) unter <user>\Anwendungsdaten\FAlterSoft\MIDI-Klavier |
Re: MIDI Klavier
Hey, nicht schlecht. (nur mal die Exe angeschaut)
Aber die Initialisierung der Tasten wird erst nach einem Neustart aktiv. (ne' Programminterne Vorbelegung währe auch noch gut) Interesant wird es noch mit einer Aufnahme.- und Wiedergabefunktion (Tastendrucklänge, Pausenlänge messen und ab in ein File oder so) |
Re: MIDI Klavier
lol...ich glaub ich schmeiß mein echtes Keyboard weg ;)
Vorschläge: Midi-Files aufnehmen und wiedergeben Tasten nicht erst nach neustart ändern Vorbelegung Auf die Tasten (Bilder9 klicken können. |
Re: MIDI Klavier
Zitat:
Zitat:
Zitat:
Zitat:
Und jetzt lade ich ein Update hoch, die neue Version kann Instrumentenwahl. //Edit: Fertig. Bei der neuen Version solltet ihr keine zu kleine Bildschirmauflösung eingestellt haben, um die 128 Instrumente auf den Bildschirm zu bekommen (nicht 640x480). Aber heutzutage ist ja sowieso größeres Standard. |
Re: MIDI Klavier
Ich finds klasse: :thumb:
Könntest du evtl. noch eine kure Erklärung zu der Komponente geben oder den Quelltext kommentieren? Ich finde diese Art der Soundausgabe für weitere Projekte sehr Interessant. Dann muss man keine Sounddateien mitliefern... |
Re: MIDI Klavier
Irgendwie macht die Source bei mir Probleme, da steht dauernd system.pas nicht gefunden. Aber die Koponente selbst funzt und auch deine exe geht bei mir... naja, liegt vielleicht daran das die kompo mit Delphi7 nicht so gut zusammenarbeitet oder so.
|
Re: MIDI Klavier
Zitat:
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:
Sie mal in mein FormCreate:
Delphi-Quellcode:
MidiOut ist hier die Komponente (TMidiOutput).
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; 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:
Delphi-Quellcode:
Datenbytes gehen im Bereich von 0 bis 127 (oberstes Bit immer gelöscht).
MidiOut.PutShort(Message, DataByte1, DataByte2);
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:
|
Re: MIDI Klavier
Zitat:
Nur: Ich kann unter Delphi die Komponenten einbinden, und compilieren. Ich kann unter meinem Windows auch die exe ausführen. Wenn ich aber die souce in D7 lade erhalte ich system.pas nicht gfeunden, übrigens ohne eine angabe einer Zeile. Ein sehr seltsamer Fehler den ich so noch nicht hatte. In jedem anderen projekt wird die system.pas problemlos gefunden, eben sogar wenn ich die Midi-Kompon reinpack... echt merkwprdig. Wäre gut wenn mal jemand unter WinXP / D7 die Source testet... |
Re: MIDI Klavier
Wie gesagt, bei mir war das irgendwann plötzlich da, keine Ahnung warum...* Und einzige Abhilfe war es, das in den Bibliothekspfad einzutragen oder in den Suchpfad. Das Problem trat bei ALLEN Projekten auf...
Trag einfach mal dein Lib-Verzerichnis in den Suchpfad ein und sieh nach, was dann passiert. Wenn es dann geht, ist es doch OK... ________ *) Ich glaube, ich hatte da gerade das Update 2 fpr D3 installiert :gruebel: |
Re: MIDI Klavier
Hi...
Jetzt habe ich wieder 'ne neue Version hochgeladen. Änderungen: 1. Eine Zeile Code hinzugefügt und somit Bug gefixt, der das zuletzt verwendete Gerät nicht korrekt wiederhergestellt hat. 2. Standardtastenbelegung implementiert. 3. Mausklicks auf Tasten implementiert. TODO sind immernoch: 1. Drumspur einstellen, speichern, laden... 2. Aufnahme und Wiedergabe, Speichern, laden... Mfg FAlter |
Re: MIDI Klavier
Zitat:
Code:
diesen fehler hatte ich WIRKLICH einmal selbst. Schaut ihn euch an!
Interner Fehler: <ErrorCode>
|
Re: MIDI Klavier
Hi,
Zitat:
Einmal hatte ich so einen Internen Fehler gemeldet bekommen, obwohl es nur ein Syntaxfehler war beim Einbinden einer DLL-Funktion (Start-Time Linking). Aber ich glaube, wir werden jetzt ziemlich dolle OT. Also thematisch zurück zu meinem MIDI Klavier ;) Mfg FAlter |
Re: MIDI Klavier
Hi,
Es gibt wieder eine neue Version... 1. Programmsymbol geändert... 2. Statt GetAsyncKeyState wurde GetKeyState verwendet. 3. Aufnahme / Wiedergabe, laden/speichern im eigenen Format... Der Versuch, MIDI zu verwenden, ist leider gescheitert, es kamen nur Dateien zustande, bei denen der Windows Media Player abgestürzt ist, andere Player meldeten Division durch Null... Da muss ich noch daran arbeiten... 4. :gruebel: Ich kann mich gar nicht mehr an alle Änderungen erinnern... Felix MIDI Klavier Dateiformat Ist gaaanz einfach aufgebaut! Die Datei besteht aus beliebig vielen Einträgen, die in zeitlicher Reihenfolge sortiert sein mussen. Ein Eintrag ist 7 Bytes groß: 4 Bytes Integer-Wert little endian beschreibt relativ zum Dateianfang (welcher 0 ist) die Vergangene Zeit in 50-ms-Schritten. 1 Byte MIDI-Message 2 Bytes Daten (auch, wenn nur eines benötigt ist, das andere kann zum Verstecken von geheimen Informationen verwendet werden ;) ) Beispiel: Integer-Wert ist 100 -> 5 Sekunden nach Wiedergabestart MIDI-Message ist Ton An, Channel 1 Daten sind Ton c', Lautstärke 127 Integer-Wert ist 200 -> 10 Sekunden nach Wiedergabestart MIDI-Message ist Ton Aus, Channel 1 Daten sind Ton c', Unwesentliches Byte Dann wird c' 5 Sekunden lang gespielt, und zwar beginnt der Tun 5 Sekunden nach Wiedergabestart... Mfg FAlter |
Re: MIDI Klavier
Unter XP läufts wieder nicht :kotz:
|
Re: MIDI Klavier
Zitat:
Ausserdem kann ich das Gegenteil bestätigen: WinXP Professional mit SP2 läuft perfekt. @FAlter Wenn du das Programm irgendwann mal richtig ausbauen willst, dann hab ich was für dich: Schreiben von richtigen Noten (siehe Finale, Sibelius, etc.). Das wäre auch ganz toll :) . Vllt. kannst du ja nen Projekt starten oder so ;) |
Re: MIDI Klavier
Zitat:
[EDIT]Der Fehler ist unter XP bekannt :wink:[/EDIT] [EDIT2]Außerdem sollte es überall laufen :wink:[/EDIT2] |
Re: MIDI Klavier
:bounce2:
WinXP Professional mit SP1 + Soundkarte :zwinker: ...läuft perfekt. ( Sollte der Probe-Button nicht Stop heissen & kannste auch irgend wann mal MIDI-Format speichern ? ) |
Re: MIDI Klavier
Hi,
Zitat:
Zitat:
Zitat:
Mfg FAlter |
Re: MIDI Klavier
Hi,
Zitat:
Ich hatte erst Stopp dastehen, aber das "pp" dabei gefällt mir nicht. Und Stop wäre Englisch, da es im deutschen neuerdings eben mit 2 p geschrieben wird. "Angehalten" oder ähnlich wäre noch eine Alternative, wie wäre es damit? Das MIDI-Format werde ich noch versuchen, kennt jemand eine gute Doku über das Dateiformat? Meine Doku hat mir nicht geholfen, wie gesagt, WMP stürzt ab, andere Mediaplayer melden Division durch Null... Außerdem weiß ich, dass man den Tracks in MIDIs Namen geben kann, das war in der Doku nicht enthalten... Mfg FAlter |
Re: MIDI Klavier
Zitat:
|
Re: MIDI Klavier
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
"Anhalten" ist doch auch noch eine Alternative. Probe ist nicht eindeutig //edit Zur Midi-Format-Docu. hab ich leider nur noch die Adresse: ![]() Habe auch noch ne' Unit(s), siehe Anhang, event. was für dich. |
Re: MIDI Klavier
Jetzt muss ich mich auch nochmal zu Wort melden: bei mir funzt es unter WinXP / D7 nicht aus unbekannten Gründen. Windows XP hat mit dem Programm dagegen alleine keine Probleme.
|
Re: MIDI Klavier
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein Screenshot von allen Einstellungen.
|
Re: MIDI Klavier
Hi,
und was bringt mir der Screenshot jetzt? Deine Windows-Einstellung für MIDI dürfte OK sein, das habe ich nice bezweifelt. Im Programm kannst du auch andere Geräte einstellen, check das mal ab (Menü "Synthesizer"). Mfg FAlter |
Re: MIDI Klavier
Hi,
es gibt hier im Forum einen, nein, viele Nette Menschen. Einer davon ist turboPASCAL. Er hat sich die Mühe gemacht und die uralte Komponente überarbeitet. Wer bisher Probleme mit der Komponente hatte, eventuell sind sie ja jetzt passé (oder wie man das schreibt). Mfg FAlter, der gerade beim Coden der MIDI-Datei-Speicherung ist. |
Re: MIDI Klavier
es gibt hier im Forum einen, nein, viele Nette Menschen. Einer davon ist turboPASCAL. Er hat sich die Mühe gemacht und die uralte Komponente überarbeitet. [/quote]
Das ist wirklich nett von ihm, aber hat er die Komponente vielleicht auch irgendwo bereitgestellt? //Edit: Sorry, jetzt hab ichs. habe nur dein Posting nicht verstanden... aber egal
Delphi-Quellcode:
DAS kompiliert! Warscheinlich benutzt es nicht system.pas :) (das war ein Scherz!). Jedenfalls funzt es. Hast du die MIDI-s selbst geschrieben oder setzt es immer noch auf den oldy-kompos auf?
Hi,
es gibt hier im Forum einen, nein, viele Nette Menschen. Einer davon ist turboPASCAL. Er hat sich die Mühe gemacht und die uralte Komponente überarbeitet. Wer bisher Probleme mit der Komponente hatte, eventuell sind sie ja jetzt passé (oder wie man das schreibt). |
Re: MIDI Klavier
Hi,
Zitat:
Mfg FAlter |
Re: MIDI Klavier
Hi,
ihr könnt jetzt auch als MIDI speichern (nicht öffnen!). Aber leider scheint die MCI-Schnittstelle von Windows nicht korrekt zu arbeiten. Mit Winamp kann ich die MIDIs anhören, mit WMP oder delphis TMediaPlayer nicht. Ich habe mich bisher auf das mindeste beschränkt, die Dateien sollten also eigentlich überall laufen. Wenn jemand weiß, was man tun muss, damit auch WMP die Datei läd wäre ich über Infos darüber sehr dankbar. Mfg FAlter |
Re: MIDI Klavier
Hi, FAlter.
Das ging ja fix mit der Implementierung von MIDI! Dass das Midi-File nicht im WMP (Windows Media Player) wiedergegeben wird könnte daran liegen, das die (Wiedergabe)Geschwindigkeit nicht stimmt. Midi mit Winamp ist ok. Habe es in zwei Midi-Editoren Geöffnet (es wurde nicht gemeckert!) und jedes mal war die Geschwindigkeit auf dem untersten Grenzwert. Nach welcher Midi-Docu. hast du die Routine geschrieben? Noch was, ist mir auf dem **** eingefallen, wie währe es mit einem Polyphon–Handy-Midi-Editor. Dein Pgr. erinnert mich irgend wie daran. :zwinker: |
Re: MIDI Klavier
Hi,
Zitat:
Mein Header Zitat:
Ich habe den Link verwendet, den du gepostet hast. Mfg FAlter |
Re: MIDI Klavier
Hi FAlter!
Vielen vielen Dank für Deinen Thread und Deine Komponenten! Damit hast Du mir Antworten auf einige Fragen gegeben die mich schon sehr lange beschäftigten! Damit werden jetzt endlich Programme möglich die mit einem Algorhitmus Musik komponieren ohne das man die Noten eingeben muß. Man schreibt einfach ein Programm und das macht dann Musik! Endlich kann ich mir einen Midi-Sequencer basteln mit ungewöhnlichen Takt- und Zeit-Verhältnissen die man in der üblichen Notation nicht darstellen kann! Ich habe Deine MidiOut-Komponente gründlich getestet. Bei meinem alten Rechner, Pentium III MMX 450 Mhz mit TerraTec-Soundkarte unter Windows ´98 SE, klappt Deine MidiOut-Komponente sowohl mit Delphi 3.0 als auch 7.0 und verschiedenen Devices einwandfrei :thumb: ! Hier im Internet-Cafe unter Windows XP kommt allerdings bei keiner Midi-Device auch nur ein Piep! Keine Fehlermeldung erscheint! Deine MidiIn-Komponente kann ich nit testen weil ich leider kein Midi-KeyBoard hab. Allerdings habe ich da mal zwei Fragen: 1.) Mit welchem Code kann man das Panning eintstellen, also Stereo, ob der Sound Links oder Rechts kommen soll. Auch im Midi-Kurs habe ich dazu nix gefunden oder es nit verstanden... 2.) Gibt es auch eine Möglichkeit eine Note beliebieger Frequenz, z.B. 1000 Hertz, abzuspielen oder kann man immer nur festgelegte Frequenzen verwenden? Grüße von TOC :stupid: |
Re: MIDI Klavier
Hi!
Ach so geht das also: Der zweite Daten-Wert der zusammen mit der Note bei 'NoteOn' übermittelt wird ist die Anschlagstärke, nicht die Lautstärke! Die Lautstärke des Kanals setzt man also mit '$Bn,$07,LautStärke' wobei 'n' die Kanalnummer (0-15) ist! --------------------------------------------------------------------------------------------------- [Edit] Eine aktuelle verbesserte Version von MidiOut Test findest Du hier: ![]() Grüße von TOC :stupid: ! |
Re: MIDI Klavier
Zitat:
1.) Das Panning (die Position im Stereofeld) setzt man ebenso wie die Kanallautstärke über eine "Control Change" Nachricht, also $Bn,$0A,Panning. Gültige Werte sind wie üblich 0..127, wobei 0 für total links und 127 für total rechts steht. 2.) Du kannst nicht direkt Noten mit beliebigen Frequenzen spielen. Allerdings könntest du Pitch Bending benutzen, um die Frequenz zu manipulieren. |
Re: MIDI Klavier
Hi!
Zitat:
Grüße von TOC :drunken: ! |
Re: MIDI Klavier
|
Re: MIDI Klavier
Hi!
Zitat:
Grüße von TOC :stupid: ! |
Re: MIDI Klavier
Ich find echt GEIL..hab schon ein paar Musikszücke damit kreiert :)
|
Re: MIDI Klavier
Erstmal: Super Programm! Echt gute Arbeit!
So, jetzt mal zu meinem Problem: ich arbeite mit Delphi 7 und habe die Midikomponente installiert, Midi In und Out werden auch angezeigt. Nur wenn ich die Klavier Projektdatei kompilieren will sagt der Compiler mir folgendes: [Warnung] UMain.pas(309): Unsicherer Typ 'PChar' [Warnung] UMain.pas(309): Unsicherer Typ 'PChar' [Warnung] UMain.pas(600): Unsicherer Code 'ASM' [Fehler] UMain.pas(602): Inline Assembler Syntaxfehler [Warnung] UMain.pas(780): Der Vergleich ergibt immer Falsch Ich blick da jetzt nicht durch, kann mir jemand helfen? |
Re: MIDI Klavier
respekt, geiles programm....
|
Re: MIDI Klavier
Das mit dem PChar geht nicht anders, die MessageBox-Funktion der Win-API kommt nicht mit Delphi-Strings klar, daher... Du kannst ja stattdessen Application.MessageDlg nehmen.
Und das mit dem Assembler kam mir am einfachsten vor zur Umwandlung little endian <--> big endian. Delphi 3 compiliert es problemlos, keine Ahnung, was D7 für Probleme hat (kennt es bswap nicht?) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz