Forum: PC-Programmierung Beratung: Syntax Javascript Midi Daten anlegen


von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

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:
1
{
2
  "score": [
3
       { "time":1 , "command":"on", "pitch":"c#1", "velocity":100 },
4
       { "time":1.1 , "command":"off", "pitch":"c#1", "velocity":100 }, 
5
  ]
6
}

sowas wie
1
  midi.on(1, "c#1", 100)
2
  midi.off(1.1, "c#1", 100)

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

: Bearbeitet durch User
von BobbyX (Gast)


Lesenswert?

Was willst du überhaupt machen? Grundsätzlich ist JavaScript für MIDI 
denkbar ungeeignet.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

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.

: Bearbeitet durch User
von BobbyX (Gast)


Lesenswert?

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.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Ε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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.