Melodie notenweise per Tastendruck über MIDI senden

  • Ersteller Magnard
  • Erstellt am
M
Magnard
Registrierter Benutzer
Zuletzt hier
15.11.21
Registriert
10.03.14
Beiträge
9
Kekse
0
Hey Leute, ich möchte gerne die auf Papier vorhandenen Noten verschiedener (monophoner) Melodien in den Computer übertragen. Per se ist das natürlich kein Problem. Knifflig ist folgendes:
Die so gespeicherten Noten möchte ich nacheinander abspielen (bzw. an einen ALSA-Clienten über QjackCtl vermitteln können [Eure Anleitung darf aber auch gerne für Windows sein]), und zwar soll jede einzelne Note durch das Niederhalten beliebiger Tasten meines Midi-Keyboards getriggert werden.

Beispielsweise könnte ich also nur durch das wiederholte Drücken der Taste "ges" ein Präludium einer Cellosuite von J.S.Bach spielen - die Tonhöhen des Stücks müsste ich vorab speichern, die jeweiligen Tonlängen könnte ich "live" machen (die Velocity gern auch).
So, hoffentlich habt Ihr Ideen! Danke.
 
Eigenschaft
 
Eine Software mit einer solchen Funktion ist mir nicht bekannt. Ich halte die von dir gewünschte "Performancetechnik" auch für praktisch kaum umsetzbar, weil sich damit bestimmte Spielweisen, z.B. Legato, kaum umsetzen lassen.
 
Danke für die Antwort! Legatospiel wäre damit doch genau so gut möglich, wie bei herkömmlichem Spiel.
 
Wenn du wiederholt nur eine Taste drückst, wie willst du dann Legato spielen? Legato auf dem Keyboard = eine zweite Taste wird gedrückt während die erste (noch) gehalten wird.
 
Mit nur einer Taste geht das natürlich nicht - stimmt. Aber wenn jeder beliebige Tastenanschlag die jeweils nächste Note aus der gespeicherten Melodie abruft, geht das natürlich durchaus - dann drückt man einfach vor dem Loslassen der letzten Taste irgendeine Nachbartaste stattdessen.

Sowas ist mit einem kleinen Skript sicher schnell gemacht - die meisten DAWs bieten ja so ziemlich alles an Midi-Beeinflussung, was man sich vorstellen kann. Man muss sich in die jeweilige "Programmiersprache" nur einarbeiten.

Für KARMA gibt es sowas ähnliches, was sich hervorragend für recht realistische Gitarrenparts (Fingerpicking / Strumming) einsetzen lässt: nennt sich dort "Manual Advance". Da wird die jeweils nächste Note der von KARMA generierten Sequenz von jedem x-beliebigen Tastendruck getriggert. Dort kann man zwar so direkt keine ganzen Stücke vorab einprogrammieren, aber das Prinzip ist das selbe.

Ich meine auch, so eine Funktion schonmal in irgend so einem "Leuchttasten-Keyboard" gesehen zu haben.

Also - ja, es geht. Womit das fertig out-of-the-box geht, da habe ich gerade keine Lösung parat. Wenn man in irgend einer Programmiersprache eine Handvoll Zeilen unfallfrei zusammenkriegt, sollten das aber maximal 30-40 Zeilen Code sein, wenn man auf Bibliotheken für die low-level-MIDI-Funktionen zurückgreift:
Einlesen des gewünschten Songs als MIDI-File, extrahieren der Notenwerte (Tonhöhe reicht) in ein Array, und dann reicht man jeden eingehenden Note-on-Befehl mit der Tonhöhe aus diesem Array weiter.

Man müsste sich lediglich überlegen, wie man das beim Legatospiel handhaben möchte: Soll der jeweils nächste Note-Off-Befehl den zuletzt angeschlagenen Ton beenden oder den "ältesten" noch klingenden - oder soll das Loslassen jeder Taste genau den Ton beenden, den sie auch getriggert hat? Dafür braucht man dann ggf. noch ein paar Puffer (sinnvolle Anzahl: 10, bei Pedaleinsatz u.U. auch mehr), in denen man sich die Zuordnung merkt, welche Taste zu welchem gerade klingenden Ton gehört.

PS: Wenn ALSA, QJackCtl etc. bekannte Baustellen sind, dann gehe ich mal davon aus, dass grundlegende Programmierkenntnisse vorhanden sind. Dann ist eigentlich nur noch die Frage, welche Programmiersprache man am ehesten mag. Sollte eigentlich in so ziemlich jeder Umgebung gehen: Java, Python, C++ - vielleicht kriegen das Könner sogar in einem Perl-Skript oder gar in einem Shell-Befehl unter. Das Ersetzen der Tonhöhe in einem Midi-Befehl sollte nämlich sogar per grep oder awk funktionieren ;)
 
Ich meine auch, so eine Funktion schonmal in irgend so einem "Leuchttasten-Keyboard" gesehen zu haben.

So tief muß man überhaupt nicht absteigen:
Bei Kawai haben auch die durchaus hochpreisigen Digitalpianos (wie z. B. derzeit das CA-95) eine sogenannte "Concert Magic"-Funktion, bei der man aus 176 vorgefertigten Klavierstücken von Mary Had A Little Lamb über Home on the Range bis zu (Debussys) Clair de lune, Aases Tod oder diverser leichter klassischer Muse Stücke auswählen kann, die jeweils durch beliebige Tastendrücke "weitergeschaltet" werden:



Viele Grüße
Torsten
 
Eure Vorschläge sind super. Leider habe ich sehr wenig Ahnung vom Programmieren, habe mich aber mal zusammengenommen und Python installiert, dann alle auf der python-rthmidi-Seite unter "installation" aufgeführten requirements für Linux, und dann das python-rthmidi-Paket selbst. Wenn ich aber mit Python das example-Skript ausführe, kommt:

File "/home/marius/Schreibtisch/python-rtmidi-0.4.3b1/50.py", line 3, in <module>
import rtmidi
File "/home/marius/Schreibtisch/python-rtmidi-0.4.3b1/rtmidi/__init__.py", line 4, in <module>
from ._rtmidi import *
ImportError: No module named _rtmidi

Ja, ich weiß, sind nicht die besten Voraussetzungen, nicht mal die Beispiele ans Laufen zu bekommen... Aber das Problem haben andere offenbar auch: https://groups.google.com/forum/#!topic/pygame-mirror-on-google-groups/svhCJghB2FE

ich werde mich mal tiefer einarbeiten bzw. nach anderen Methoden sehen.
 
Da hast du Glück, dass der Entwickler dir das selbst empfohlen hat - er kann bestimmt weiterhelfen ;) (strogon)
 
das müsste doch mit Max, bzw Max 4 Live auch machbar sein
 
bei Casio heisst die Funktion zwar 'one key play' wird aber mit 2 (extra) Tasten umgesetzt, die abwechselnd gedrückt werden
ua auf dem VL1 ('Da Da Da') und dem SK-1 Sampler zu finden... und sicher noch öfter verwendet :D
für die Programmierung nicht ganz uninteressant, weil sich damit auch 'legato' umsetzen lässt (vorige Taste noch gedrückt)
die Funktion ist weniger idiotisch als man im ersten Moment meint:
man speichert eine Melodie (mit den normalen Tasten) und arbeitet danach das timing aus (oder variiert es)

cheers, Tom
 
File "/home/marius/Schreibtisch/python-rtmidi-0.4.3b1/50.py", line 3, in <module>
import rtmidi
File "/home/marius/Schreibtisch/python-rtmidi-0.4.3b1/rtmidi/__init__.py", line 4, in <module>
from ._rtmidi import *
ImportError: No module named _rtmidi

Das liegt höchstwahrscheinlich daran, dass du das Example-Skript aus dem Distributionsverzeichnis python-rtmidi-0.4.3b1 heraus ausführst. Dann findet Python, wenn es nach dem Python-package 'rtmidi' sucht, zuerst dasjenige im aktuellen Verzeichnis. Dort ist aber nicht die C-Extension '_rtmidi.so' drin, denn die wird erst bei der Installation mit "python setup.py install" in das Python Site-packages-Verzeichnis (sytemweit oder in einem virtualenv) installiert.

Die einfachste Lösung ist, zur Ausführung der Tests und Examples einfach ins "examples"-Vereuchnis oder in dein Homedirectory zu wechseln.
Ja, ich weiß, sind nicht die besten Voraussetzungen, nicht mal die Beispiele ans Laufen zu bekommen... Aber das Problem haben andere offenbar auch: https://groups.google.com/forum/#!topic/pygame-mirror-on-google-groups/svhCJghB2FE

Ich vermute, Martin hatte im o.g. Thread das selbe Problem.

Aber Vorsicht: python-rtmidi ist nicht das gleiche wie pygame.midi. python-rtmidi ist ein Python-Binding für die RtMidi C++-Bibliothek, während pygame.midi ein Python-Bindung für die portmidi C-Bibliothek ist. An dem Code für pyportmidi war ich zwar auch beteiligt, der ist aber unabhängig. Ich habe python-rtmidi entwickelt, weil pyportmidi m.E. einige Schwächen hat und die Maintainer-Situation unklar war/ist.


Chris
 
Danke für Eure Mithilfe, ich habe meine Idee nun umsetzen können. Ich habe mir nun die Demoversion von Ableton und Max for Live besorgt und damit mein Glück versucht. Mein Vorhaben war auch damit knifflig genug (an der Wiedergabepolyphonie habe ich ziemlich lange knobeln müssen), auf anderem Wege hätte ich das wahrscheinlich gar nicht geschafft. Wahrscheinlich müssen gestandene Max for Live-Kenner etwas schmunzeln, wenn sie meinen Patch sehen, sicher hätte man ihn auch weniger umständlich verfassen können, aber das Programm ist ja neu für mich. Gerne hätte ich eine Lösung ohne die Pipe am Anfang gefunden...

Wenn man den Code kopiert hat: Max for Live -> File -> New from Clipboard
Datenwust gelöscht.
Du kannst das in eine txt-Datei kopieren und als Anhang posten.

McCoy,
(Moderator)
 
Zuletzt bearbeitet von einem Moderator:
Wenn die Demoversion von Max ausgelaufen ist, versuche mal Pure Data.
 
Schöne Problemstellung. Jetzt hab ich direkt Lust, an meinem Projekt weiterzuschreiben, Konkurrenz belebt das Geschäft :great:
 
Wie geil ist das denn? So eine Art, Code weiterzugeben, habe ich ja ewig nicht mehr gesehen. Das ist ja fast wie Listings abtippen zu den guten alten C64-Zeiten :D Gut, immerhin jetzt per Copy&Paste, aber Binärcode als ASCII, das ist Retro... Ist das so gedacht?
 
OK, dann hier als .txt
Ja, ich habe auch meine Freude daran, mir bliebe ja auch die Möglichkeit, die Projektdatei zu posten... habe aber diese Art des Austausches schon in einem anderen Forum gesehen.
 

Anhänge

  • Jethrik.txt
    43,6 KB · Aufrufe: 237
  • Gefällt mir
Reaktionen: 2 Benutzer

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben