Hallo zusammen, meine Frage wäre, ob sich ein Bash Datei , die auch unter einem Subsystem auf Windows läuft sich grundsätzlich auch in ein ausführbares Programm unter Python umsetzen lässt. Der Hintergrund ist der, nicht auf allen Windows Rechnern ist ein Subsystem installiert und die BASH Routine sollte gerne unter Windows als ausführbares Programm laufen. Es ist gedacht, um eine Registrierungs-Datei aus, einen Roland V-Akkordeon in seine einzelnen Blöcke zu zerlegen. Wäre schön, wenn hierauf einmal jemand antworten könnte Gruß Christian aus NF
Christian P. schrieb: > Hallo zusammen, meine Frage wäre, ob sich ein Bash Datei , die auch > unter einem Subsystem auf Windows läuft sich grundsätzlich auch in ein > ausführbares Programm unter Python umsetzen lässt. Ja. > Der Hintergrund ist der, nicht auf allen Windows Rechnern ist ein > Subsystem installiert und die BASH Routine sollte gerne unter Windows > als ausführbares Programm laufen. Es heißt "Windows Subsystem for Linux", auch wenn es eigentlich ein Linux-Subsystem für Windows ist. Davon abgesehen benötigt so ein Python-Programm natürlich einen Python-Interpreter, ist der auf den Systemen installiert? > Es ist gedacht, um eine Registrierungs-Datei > aus, einen Roland V-Akkordeon in seine einzelnen Blöcke zu zerlegen. > Wäre schön, wenn hierauf einmal jemand antworten könnte Was auch immer so eine "Registrierungs-Datei" ist... vielleicht lädst Du die "Registrierungs-Datei" und das Shellskript einfach einmal hier als Anhang an, dann hast Du sicherlich bessere Chancen.
Es gibt auch (mehr als eine) bash für Windows. Mir fallen spontan MinGw und CygWin ein. Da bash Dateien typischerweise von Programmen abhängen, die sie aufrufen, wird die Verfügbarkeit dieser Programme wohl eher der Knackpunkt sein.
Hallo Christian, Versuch doch mal das bash script ChatGPT oder Github Cpilot zu geben, mit der Anweisung das von bash nach python(3?) zu konvertieren unter der Angabe der Rahmenbedingungen im original Post. Das Konvertieren von Scripten in Sprache A nach Sprache B können die mittlerweile ganz gut. Dennoch solltest Du das Ergebnis ausführlich testen um sicher zu stellen dass das neue Script auch das macht was Du haben willst.
Ich habe hier mal die Bash Routine vom Greg hochgeladen, genau so wie die Datei mit der Endung UPA die kleine Datei ist für den Roland Fr4x und zerlegt den Registrierungsfile (musische Einstellungen in 98 einzelne Daten das sind 7 Blöcke mit je 14 Registrierungen. Eine Datei mit der Endung heißt User Programm All wird dann zerlegt in UPB = user Programm Bank, das sind 8 Stück, ein UPB beinhaltet UPG = user Programm , das sind 14 einzelne Dateien, also zusammen 98 Für das größere Roland Modell den FR8X ist die Datei größer und beinhaltet 98 Blöcke mit insgesamt 1400 Datenblöcken. Es gibt von Roland keine Software zum Zerlegen, damit man die einzeln bearbeiten kann. Daher hat mein Bekannter in den Staaten, der Gree V. eine Routine in einer Bash Datei geschrieben, er ist eingefleischter Linux Schreiber und somit haben alle Anwender hier das Problem, dass sie entweder Linux auf einem Rechner haben oder nichts geht. Daher habe ich mal die Software angefügt. Wäre echt super , wenn sich ein toller Programmierer oder rin das mal anschaut. Ich füge mal den Text zum File von Greg an *********************************************************************** Updated Version 8.8 Please use/test this version and let me know if there are any issues. Release notes: [Corrected typo on help screen] [Corrected index error in processing 4x UPG's from UPB's.] This utility will convert UPA files to UPB's or UPG's or UPB's to UPGs. download and unzip the file This is a bash script. the file runs natively on MAC and Linux computers. ( nothing needed). on windows computers you will need to add the WSL 2 ubuntu from the microsoft store or elsewhere - you need to have the bash interpreter installed. You will open a bash terminal window and from the command line run one of the commands below. Here is the help screen. Definitions: UPG = User Program ( 1 UPG = just one User Program) UPB = User Program Bank ( 1 UPB = 14 User Programs) UPA = User Program ALL ( 1 UPA = 1400 User Programs or 100 banks each containing 14 User Programs) This program extracts user programs or user banks from a UPA file or user programs from a UPB file Usage: ./makeupgs.sh -u UPG_ALL.UPA The above line will create all user programs (UPG's) from the .UPA file ./makeupgs.sh -b UPG_ALL.UPA The above line will create all the user banks (UPB's) from the .UPA file ./makeupgs.sh -u UPG_ALL.UPB The above line will create all user user programs (UPG's) from the .UPB file ./makeupgs.sh -h The above line will display this help screen Remember the.... 8x/Evo contain 1400 User Programs / 100 Banks 4x contains 98 User Programs / 7 banks This program will autodetect whether the input file is a 4x or 8x/Evo The output files are put in a sub folder containing the date the program was run. You can run from a USB drive or internal dirve. Remember the -u option generates user programs (UPA or UPB files) Remember the -b option generates user banks (UPA files Have fun ************************************************************************ ich danke euch für eure freundliche Hilfe Christian
Ich würd das auch mal mit KI versuchen. Klar, wenn du ein bischen Bash und Python kannst, kriegst du das selber besser hin, aber selbst das allerkleinste, kostenlose, nicht-Coding-Optimierte KI-Model kriegt da was hingefrickelt, auch wenn man das File Stückchen/Funktionsweise reinfüttern und explizit Anweisungen ("ersetze den 'sed' Aufruf durch nativen Code") geben muss. Händisch weiteroptimieren kann man danach immer noch.
Christian P. schrieb: > Ich habe hier mal die Bash Routine vom Greg hochgeladen, genau so wie > die Das ist ja nur ein bisschen print und dd plus Stringverarbeitung. Das solltest Du schnell in Python konvertieren können.
Guten Morgen. Ob die Bash Routine nun in PYTHON oder einer anderen Sprache läuft ist im Prinzip egal, schön wäre es wenn man die Routine unter Windows laufen lassen könnte. Es gibt ein ganzes Reihe von Kollegen aus dem Bereich der Musik, die benutzen eben Windows und da wäre es sehr hilfreich wenn man es direkt davon als kleines Programm starten könnte. ich selbst bin eher der Elektroniker und HF-Techniker als der Programmierer Und habe dort doch Recht grosse Schwierigkeiten mich mühsam in Programmiersprachen durch zu beißen. wäre schön wenn dort jemand evlteinwenig Hilfe leisten könnte. danke Gruss Christian
In diesem Thread [1] von 2023 geht es um dasselbe Thema, dort finden sich auch eine Beschreibungen und weitere Beispieldateien. Wenn ich das richtig sehe, bestehen diese UPA und UPD-Dateien jeweils aus einem Header-String ("ef bb bf 00 00 03 5e" für UPG_ALL.UPA, "ef bb bf 00 00 03 33" für vom_8_UPG_ALL.UPA). Danach folgt ein XML-Teil, vermutlich ist das ein Header zur Beschreibung der danach folgenden binären Daten. Ich werd mal die vorhandenen Beschreibungen lesen, dann sehen wir weiter. :-) Grundsätzlich kann man das natürlich mit Python machen, allerdings möchte ich aus verschiedenen Gründen lieber Go(lang) eine Chance geben. :-) [1] Beitrag "BASH -Code auf Linux Mint ausführen, brauche bitte Hilfe"
@ Ein T.
>möchte ich aus verschiedenen Gründen lieber Go(lang) eine Chance geben.
Die da wären?
Kannst Du das bitte etwas erläutern.
Danke
Es wäre vielleicht zielführender wenn man genau beschreibt was das Programm mit den Daten machen soll. Dann könnte man vielleicht ein Phyton Programm schreiben das das viel besser oder einfacher macht. Das gewünschte Vorgehen ist irgendwie als wenn man jetzt statt eines Hammers einen Schraubendreher nehmen will, damit aber versucht den Nagel einzuschlagen, statt eine Schraube zu benutzen.
Markus W. schrieb: > Die da wären? > > Kannst Du das bitte etwas erläutern. Gerne. Erstens lassen sich mit Golang leicht statisch gelinkte Executables erzeugen, also Programme, die keine (dynamisch gelinkten) Libraries benötigen. Wer also diese eine Datei für sein Betriebssystem hat, kann sie direkt ausführen. Zweitens lassen sich in Golang mit dem Package "embed" ganz besonders einfach Dateien und sogar Dateisysteme in das Executable einbetten. Das erscheint mir für die Byte- und XML-Header sinnvoll. Drittens macht es Golang sehr einfach, Programme für andere Betriebssysteme zu erzeugen, indem zwei Umgebungsvariablen für Betriebssystem und CPU-Architektur des Zielsystems gesetzt werden. Eine weitere Idee wäre viertens, Golangs "Build Tags" zu benutzen, um zwei verschiedene Versionen zu erzeugen: eines für die Kommandozeile und eines mit einem eingebauten Webserver für Leute, die sich mit Kommandozeilen nicht wohl fühlen -- oder die diese Software lieber auf ihrem NAS oder in einem Docker Container mit ihrem Webbrowser benutzen wollen. Mal schauen. :-)
Warum nicht einfach die für das Bash Skript erforderlichen Programme bzw. DLLs aus z.B. Cygwin nehmen? Das werden wohl so um die 20 Dateien sein, die vermutlich ohne Installation laufen und das Bash Skript ausführen könnten.
Udo S. schrieb: > Es wäre vielleicht zielführender wenn man genau beschreibt was das > Programm mit den Daten machen soll. Wenn ich das [1] bisher richtig verstanden habe, geht es darum, die Binärdaten von den Byte- und XML-Headern zu befreien. Außerdem geht es anscheinend darum, diese Binärdaten danach anhand definierter Offsets zu splitten. @TO: - Ist das korrekt? - Gibt es eine Möglichkeit, die erzeugten Dateien auf Korrektheit zu prüfen, ohne sie in ein Roland-Gerät zu laden und es damit womöglich zu beschädigen? [1] https://www.mikrocontroller.net/attachment/588400/Roland_FR4x_file_beschreibung_bitte_lesen.txt
@Ein T. Danke für Deine Erlaeuterung. >Erstens lassen sich mit Golang leicht statisch gelinkte Executables >erzeugen, also Programme, die keine (dynamisch gelinkten) Libraries >benötigen. Wer also diese eine Datei für sein Betriebssystem hat, kann >sie direkt ausführen. Das war mir bekannt uns sehe ich auch als Vorteil, einfach ein Binary weiter geben. So ist es z.B. mit dem Backup-Programm restic, welches ich schon seit Jahren so verwende. >Zweitens lassen sich in Golang mit dem Package "embed" ganz besonders >einfach Dateien und sogar Dateisysteme in das Executable einbetten. Das >erscheint mir für die Byte- und XML-Header sinnvoll. Wusste ich nicht, da ich in der Go-Materie nicht so drin bin. >Drittens macht es Golang sehr einfach, Programme für andere >Betriebssysteme zu erzeugen, indem zwei Umgebungsvariablen für >Betriebssystem und CPU-Architektur des Zielsystems gesetzt werden. War auch bekannt, aber noch nie in Anspruch genommen. >Eine weitere Idee wäre viertens, Golangs "Build Tags" zu benutzen, um >zwei verschiedene Versionen zu erzeugen: eines für die Kommandozeile und >eines mit einem eingebauten Webserver für Leute, die sich mit >Kommandozeilen nicht wohl fühlen -- oder die diese Software lieber auf >ihrem NAS oder in einem Docker Container mit ihrem Webbrowser benutzen >wollen. Mal schauen. :-) Hört sich auch interessant an. Gruß Markus
>Wenn ich das [1] bisher richtig verstanden habe, geht es darum, die >Binärdaten von den Byte- und XML-Headern zu befreien. Außerdem geht es >anscheinend darum, diese Binärdaten danach anhand definierter Offsets zu >splitten. So habe ich das auch verstanden. Splitten an den jeweiligen Stellen und Header voranstellen und mit entsprechendem Namen (Prefix + Bank-Idx+Reg-Idx) in bestimmten Verzeichnis ablegen. Markus
Wenn ich das hier [1] richtig sehe, gibt es insgesamt fünf Dateitypen mit jeweils spezifischen Byte-Headern (die ersten sieben Byte der Dateien): UPS: 0xef 0xbb 0xbf 0x0 0x0 0x3 0x28 UPB: 0xef 0xbb 0xbf 0x0 0x0 0x3 0x29 UPA: 0xef 0xbb 0xbf 0x0 0x0 0x3 0x5e SET: 0xef 0xbb 0xbf 0x0 0x0 0x3 0x28 ALL: 0xef 0xbb 0xbf 0x0 0x0 0x8 0x2f Nun bin ich ein wenig verwirrt hinsichtlich der Angabe, daß die Byte-Header von UPS- und SET-Dateien dieselben sein sollen. Kann mich jemand erhellen? Außerdem wäre es schön, für jeden der Dateitypen eine Beispieldatei und -- wo möglich -- eine kleine Beschreibung dazu zu haben. Lieber TO, kannst Du dabei vielleicht behilflich sein? Dankeschön! [1] https://www.mikrocontroller.net/attachment/588400/Roland_FR4x_file_beschreibung_bitte_lesen.txt
Guten Tag ich versuche dort noch einmal einzugreifen Also Fakt ist mein bekannter in den Vereinigten Staaten hat eine Routine in erstellt als sogenannten bash script Dieser bestritt kann auch unter Windows ausgeführt werden wenn dort ein Windows Subsystem Linux mit eingebunden wird. Diese best Datei führt folgendes aus es nimmt eine Datei mit der Endung UPA oder UPG die von einem Roland musikinstrument erstellt wird und zerlegt die in kleinere Blöcke und speichert sie dann in einem Verzeichnis wieder ab. Das ist eigentlich alles Es wäre allerdings schön wenn diese Skript Datei auch direkt unter Windows ausführbar wäre ohne dass dort irgendetwas anderes geladen werden muss das heißt also ein Programm das direkt von Windows ausgestattet werden kann ohne dass man erst Linux hinzufügen muss dazu sind die meisten Anwender die auch Musiker sind nicht in der Lage. Ich selber bin nicht der Programmierer sondern eher in dem Bereich nachrichtentechnik und Elektronik angesiedelt und kann dieses leider nicht machen. Meine Frage war ob jemand in der Lage ist diese beschdatei einfach in ein Windows ausführbares Programm umzusetzen oder zu kompilieren oder übersetzen wie immer auch. Ich füge dieser Message hier noch mal eine Datei bei die von meinem Roland Instrument stammt die lässt sich dann mit der skript-datei von dem Gregor zerlegen , dazu muss ich nachher aber erst einmal kurz an meinen PC gehen weil das von dem Smartphone aus hier per spracheingabe nicht möglich ist Wäre echt toll wenn da etwas positives mit eurer Hilfe bei rauskommt danke schön Gruß Christian
Hallo Markus Diese Skript Datei von meinem Kollegen aus den Staaten ist nur dazu da die Dateien vom Roland erfr acht mit der Endung UPA in einzelne Blöcke zu zerlegen und dann wieder abzuspeichern diese Blöcke sind dann einzeln in dem Instrument ladbar sonst kommst du an die Sachen nicht ran bei dem großen Instrument dem FR8 besteht eine User Programm all Datei aus 1400 Eintragungen wenn jemand die alle von Hand bearbeiten will sitzt der ewigs dabei dieses Skript Datei zerlegt die dann einfach in einzelne Blöcke so dass jeder sich das dann rauspicken kann und ich wollte eigentlich nur dass dieser bash script unter Windows ausführbar ist das war erstmal das Anliegen Gruß Christian
Das sind da in dem Script doch Linux Standardprogramme. echo, mkdir, read, sleep, printf, dd, for .. do Bei dd bin ich mir unsicher (gleich beim installieren im Setup kontrollieren) aber der Rest wird normal direkt über die Bash, hier Cygwin, zur Verfügung gestellt. Ob da nun Python oder etwas anderes installiert werden muss, sollte doch egal sein. Wird etwas geändert, müsstest du das in deinem Code nachpflegen. Windows Subsystem for Linux wurde schon genannt und ist eigentlich ein Overkill. Die Antwort gab es doch gleich ganz oben. Nemopuk schrieb: > Es gibt auch (mehr als eine) bash für Windows. Mir fallen spontan MinGw > und CygWin ein. Hier der Link: https://www.cygwin.com/install.html Cygwin startet eine Shell und kann auch auf die normalen Windows-Ordner zugreifen. Script und Daten in den Ordner kopieren. Sollte ein Programm fehlen. Setup starten und das Programm da noch zusätzlich installieren. Für andere dann dokumentieren. Mit "wget <Internetpfad>" kann man sich das Skript auch direkt herunterladen. Das umzuschreiben ist wahrscheinlich mehr Aufwand. Ich habe jetzt keine Zeit das selber zu testen. Der einzige Aufwand ist zu schauen wo der Standard-Cygwin-Ordner ist.
Christian P. schrieb: > Diese Skript Datei von meinem Kollegen aus den Staaten ist nur dazu da > die Dateien vom Roland erfr acht mit der Endung UPA in einzelne Blöcke > zu zerlegen und dann wieder abzuspeichern diese Blöcke sind dann einzeln > in dem Instrument ladbar sonst kommst du an die Sachen nicht ran bei dem > großen Instrument dem FR8 besteht eine User Programm all Datei aus 1400 > Eintragungen wenn jemand die alle von Hand bearbeiten will sitzt der > ewigs dabei dieses Skript Datei zerlegt die dann einfach in einzelne > Blöcke so dass jeder sich das dann rauspicken kann und ich wollte > eigentlich nur dass dieser bash script unter Windows ausführbar ist das > war erstmal das Anliegen Gruß Christian Okay, ich bin jetzt soweit, daß ich eine UPA-Datei lesen, den XML-Header sauber heraus pflücken und alles sauber in eine Datenstruktur parsen kann. Der nächste Schritt wird sein, die Blöcke aus dem Inhalt zu extrahieren. Dazu werde ich mir morgen zunächst einmal die Offsets anschauen. Schauen wir mal. Wenn Du, lieber TO, Dir bitte ein wenig mehr Mühe mit Deinen Beiträgen geben (Satzzeichen wie Punkte und Kommata existieren, und dürfen sie ohne Aufpreis benutzt werden ;-)) und womöglich sogar meine Fragen beantworten könntest, dann wäre sicherlich schon viel gewonnen. Bekommen wir das hin? Danke.
Ist das nicht genau derselbe Quark wie hier? Beitrag "Wer kann helfen und weiss wie die Compilierung geht"
Harald K. schrieb: > Ist das nicht genau derselbe Quark wie hier? > Beitrag "Wer kann helfen und weiss wie die Compilierung geht" Nein. Ähnlicher Kontext, aber andere Frage.
Christian P. schrieb: > Wäre schön, wenn hierauf einmal jemand antworten könnte Ich habe das Bash Skript in ein Windows Konsolen Programm kompiliert. Mit deinem UPG_ALL.UPA File als Eingabe erzeugt es UPG und UPB Files, die binär identisch sind. Schreib mal ob das so passt. Ich kann das nicht testen, ich habe kein Roland Akkordeon und auch keine Ahnung davon. Ich glaube aber das das Bash Skript noch Fehler hat. Wenn eine Bank von Programmen aus dem UPA File extrahiert wird (ein UPB Files), und im zweiten Schritt UPG Files aus dem UPB extrahiert werden, dann stimmen die UPG Files NICHT mit denen überein, die man erhält, wenn man in einem Schritt die UPG Files erzeugt. Ich habe das in meinem Programm geändert. Gruss Udo
:
Bearbeitet durch User
Ein T. schrieb: > Wenn Du, lieber TO, Dir bitte ein wenig mehr Mühe mit Deinen Beiträgen > geben (Satzzeichen wie Punkte und Kommata existieren, und dürfen sie > ohne Aufpreis benutzt werden ;-)) und womöglich sogar meine Fragen > beantworten könntest, dann wäre sicherlich schon viel gewonnen. Bekommen > wir das hin? Danke. Okay, der TO scheint sich nicht mehr zu melden, aber ich möchte das kleine Projektlein trotzdem noch nicht aufgeben. Deswegen habe ich jetzt Greg Vee und Steve Palm angeschrieben und um Informationen zu den Dateiformaten gebeten. Schauen wir mal, ob da vielleicht etwas zurück kommt.
Udo K. schrieb: > Ich habe das Bash Skript in ein Windows Konsolen Programm kompiliert. Wow, cool. Darf ich fragen, wie Du das gemacht hast?
Ein T. schrieb: > Deswegen habe ich jetzt Greg Vee und Steve Palm angeschrieben und um > Informationen zu den Dateiformaten gebeten. Da steht doch schon fast alles wichtige: https://github.com/hyphz/fr8x-editor/wiki/FR8x-set-file https://github.com/hyphz/fr8x-editor/wiki/FR8X-User-Program-File-(.UPG) Und das dekompilierte Java des Roland-Editors gibt ebenfalls Einblicke.
:
Bearbeitet durch User
Ein T. schrieb: > Udo K. schrieb: >> Ich habe das Bash Skript in ein Windows Konsolen Programm kompiliert. > > Wow, cool. Darf ich fragen, wie Du das gemacht hast? Mit meiner natürlichen Intelligenz und einem kleinen C Programm :-) Ich habe die XML Struktur ignoriert, und stupide Blöcke mit fixer Größe aus dem UPA File extrahiert, genauso wie es das Bash Skript macht. Das Eingangsfile wird erstmal in den Speicher gemappt, in das Ausgansgsfile wird als erstes der XML Header geschrieben, dann werden in einer Schleife die Blöcke aus dem Eingangsfile mit memcpy statt dd kopiert und an das Ausgabefile drangehängt. Am Anfang gibt es noch eine Überprüfung des Dateiformats. Bei den Kommandozeilenoptionen habe ich noch vorgesehen, dass man die Nummer der Bank oder des Programms angeben kann, damit man nicht immer alles extrahieren muss (bis zu 1400 Files). Wobei da auch noch was nicht stimmt, das FR-8X Beispielfile "vom_8_UPG_ALL.UPA" vom TE ist etwa zu klein, es gehen nur maximal 99 Blöcke, nicht 100.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.