mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Timm R. (Firma: privatfrickler.de) (treinisch)
Datum:

Bewertung
0 lesenswert
nicht 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   on  c#1 100
1.1 off c#1 100
2   on  c#1 100
2.1 off c#1 100
3   on  c#1 100
3.1 off c#1 100
4   on  c#1 100
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:
{
  "score": [
       { "time":1 , "command":"on", "pitch":"c#1", "velocity":100 },
       { "time":1.1 , "command":"off", "pitch":"c#1", "velocity":100 }, 
  ]
}

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? 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
Autor: BobbyX (Gast)
Datum:

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

Autor: Timm R. (Firma: privatfrickler.de) (treinisch)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: BobbyX (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timm R. (Firma: privatfrickler.de) (treinisch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Εrnst B. (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timm R. (Firma: privatfrickler.de) (treinisch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.