Hallo liebe Mitglieder des Forums,
mit einem kleinen Programm sende ich diverse Midi Daten. Die Midi Daten
werden in einem Text-Editor eingegeben, verarbeitet und dann zu
gegebener Zeit gesendet.
Aktuell sieht die Syntax zB so aus:
1
1 on c#1 100
2
1.1 off c#1 100
3
2 on c#1 100
4
2.1 off c#1 100
5
3 on c#1 100
6
3.1 off c#1 100
7
4 on c#1 100
8
4.1 off c#1 100
Jetzt ist mir aufgefallen, dass das eventuell etwas idiotisch ist, weil
die Zahlen vorne, die Zeitangaben, eh schon JavaScript verwenden um
Berechnungen und Variablen zu unterstützen.
Ich hätte daher die Idee, statt der selbst gemachten Syntax einfach
Javascript zu verwenden und meinen eigenen Parser zu beerdigen.
Meine JavaScript Kenntnisse liegen bei 0.5 auf der Skala von 0 bis 10.
Hier sind doch bestimmt eine Menge Leute mit profunden Javascript-
Kenntnissen. Könnte vielleicht jemand so nett sein, einen Vorschlag zu
machen, wie das in Javascript aussehen könnte? Mit möglichst wenig
syntaktischem Overhead? Ich habe leider nicht viel Erfahrung mit
Javascript.
Ich möchte gern alle "normalen" Midi Objekte unterstützen, cc, pp, etc.
Ich kann von meinem Programm aus Objekte und Funktionen injizieren, die
müssen also nicht als Text in der Benutzereingabe auftauchen. Ich kann
auch auf neu angelegte Objekte zugreifen.
Was ich suche ist eine bequeme und sprechende Formulierung, die es
vielleicht auch erlauben würde, obiges in eine Schleife zu packen?
JSON zB würde ich auf den ersten Blick für etwas unübersichtlich halten:
wäre doch gut? Oder gibt es da eine Falle? Gibt es weitere sinnvolle
Vorschläge?
Schön wäre, wenn es am Ende eben ein Objekt gäbe, aus dem ich die
Informationen für die Kommandos auslesen kann.
Vielen Dank für jeden sachdienlichen Hinweis.
vlg
Timm
BobbyX schrieb:> Was willst du überhaupt machen? Grundsätzlich ist JavaScript für MIDI> denkbar ungeeignet.
ja sorry, mir war das klar :-)
Habe folgende Erläuterung ergänzt:
> Die Midi Daten werden in einem Text-Editor eingegeben,> verarbeitet und dann zu gegebener Zeit gesendet.
Von daher ist Javascript egal, es ersetzt praktisch den Piano-Roll
Editor
Abgesehen davon ist die Behauptung so wohl unhaltbar. Eine ganze Reihe
DAWs unterstützen zB JavaScript für Midi. Aber zB die LPX Syntax ist für
meine Zwecke viel zu aufgebläht.
Timm R. schrieb:> BobbyX schrieb:>> Abgesehen davon ist die Behauptung so wohl unhaltbar. Eine ganze Reihe> DAWs unterstützen zB JavaScript für Midi. Aber zB die LPX Syntax ist für> meine Zwecke viel zu aufgebläht.
Keine DAW sendet MIDI Daten mit JavaScript. Kein Betriebsystem hat eine
MIDI API für JavaScript. Daran, dass niemand sonst nicht einmal auf
dein Anliegen antwortet solltest du merken wie abwegig deine Idee ist.
BobbyX schrieb:> Timm R. schrieb:>> BobbyX schrieb:>>>>> Abgesehen davon ist die Behauptung so wohl unhaltbar. Eine ganze Reihe>> DAWs unterstützen zB JavaScript für Midi. Aber zB die LPX Syntax ist für>> meine Zwecke viel zu aufgebläht.>> Keine DAW sendet MIDI Daten mit JavaScript.
LPX kann selbstverständlich Midi Daten per Javascript senden und das
habe ich auch schon des öfteren gemacht.
> Kein Betriebsystem hat eine> MIDI API für JavaScript.
Chrome hat eine Midi API für JavaScript, wie Opera auch.
Da die Android Webview ebenfalls die W3C Midi Api unterstütz, ist
allerdings sogar die Behauptung
> Kein Betriebsystem hat eine MIDI API für JavaScript
schlicht offensichtlich falsch.
Vom W3C gibt es im Web MIDI API sogar Javascript Beispiele, aber das hat
alles absolut nichts mit meiner Fragestellung zu tun. Wie beschrieben
und auch im Nachhinein nochmals erläutert, will ich JavaScript einfach
nur zur offline Beschreibung der Events einsetzen.
Was soll denn Deiner Meinung nach technisch dagegen sprechen?
> wie abwegig deine Idee ist.
Hör doch vielleicht mal auf einfach Behauptungen rauszuhauen, und
liefere einen einzigen vernünftigen Grund, warum es abwegig sein sollte
midi events offline per JS zu generieren?
Dass niemand antwortet liegt einfach daran, dass meine Fragestellung zu
langweilig und speziell ist. Was ich sehr gut verstehen kann.
Timm R. schrieb:> sowas wie> midi.on(1, "c#1", 100)> midi.off(1.1, "c#1", 100)>> wäre doch gut? Oder gibt es da eine Falle?
Ja. Generell eine gefährliche Idee, Daten in einem ausführbaren Format
zu speichern.
Was macht dein Programm, wenn der dritte Midi-Befehl dann ein
require('child_process').exec('FORMAT C:') ist?
Sowas nachträglich abzudichten ist sehr fehleranfällig, Versuche durch
Regex-Negativlisten 'böse' Befehle wegzufiltern fordert nur die
Kreativität der Angreifer heraus, du erwischst nie alle.
Mit Positiv-Listen, die exakt die erlaubten Zeilen durchlassen und sonst
nix sieht es etwas besser aus, aber dann hast du deinen Parser doch eh
schon fertig, und musst das File gar nicht mehr durch den JS-Interpreter
schicken.
Εrnst B. schrieb:> Timm R. schrieb:>> sowas wie>> midi.on(1, "c#1", 100)>> midi.off(1.1, "c#1", 100)>>>> wäre doch gut? Oder gibt es da eine Falle?>> Ja. Generell eine gefährliche Idee, Daten in einem ausführbaren Format> zu speichern.>> Was macht dein Programm, wenn der dritte Midi-Befehl dann ein>> require('child_process').exec('FORMAT C:') ist?
danke, ein interessanter Punkt, aber hier nicht relevant.
Der JavaScript Kern enthält kein Node.js, dieses Beispiel ist so auf
keinen Fall ausführbar. Der Kern ist für Application Scripting gedacht
und von Natur aus gegen sowas abgedichtet.
Abgesehen davon, dass ich ja eh schon JavaScript erlaube, bisher aber
nur für die Zeit.
Aber, wie gesagt: Ein sehr guter Punkt! Dankeschön.