Wer kann helfen und weiss wie die Compilierung geht

OP #7921602
Lesenswert?

Schönen guten Tag, mein Name ist Christian und ich komme aus der Nähe von Husum in NF Ich begeisterter Hobbyelektroniker und auch Musikfreund zum Beispiel Das V-Akkordeon von Roland FR-8x. Eigentlich ein Aranger-Keybord in Form eines Akkordeons. Es ist schon einige Jahr auf dem Markt und die Software zum Bearbeiten der Files und Registrierungen ist ein Graus und wurde von der Firma Roland unter Java veröffentlicht. Seit langen suche ich nach einer Möglichkeit die Registrings-dateien zu bearbeiten. Bei den Google Groups habe ich für den FR8x etwas gefunden, einen Dateieditor. Ich habe diesen hier mal als ZIP Datei angefügt und würde gerne mal jemanden bitten dort einmal darauf zu schauen und mir evtl. zu sagen , wie mal das Ding kompilieren könnte oder zum Verwenden bekommt. Das wäre richtig große Klasse und ich würde mich sehr freuen, wenn sich dort mal einer von euch Fachleuten meiner erbarmen würde , Danke. Ich freue mich über jede Rückantwort, auch sonstige Hinweise von Leuten, die evtl. die gleichen Interessen vertreten bezüglich V-Akkordeon von Roland mit freundlichen Grüßen und auf eure Hilfe hoffend Christian aus der Nähe von Husum in Nordfriesland

Angehängte Dateien:
Persönliche Seite #7921620
Lesenswert?

Christian P. schrieb:

Bei den Google Groups habe ich für den FR8x etwas gefunden, einen Dateieditor. Ich habe diesen hier mal als ZIP Datei angefügt und würde gerne mal jemanden bitten dort einmal darauf zu schauen und mir evtl. zu sagen , wie mal das Ding kompilieren könnte

Vermutlich mit dem Factor Compiler:

https://factorcode.org/

Der Code im Archiv ist ziemlich klein. Das wird kein nutzbarer Editor sein. Eher ein Versuch die Datenformate zu reverse-engineeren. Auf dieser Basis könnte man einen eigenen Editor entwickeln.

Christian P. schrieb:

unter Java veröffentlicht.

Es gibt jedenfalls um viele Größenordnungen mehr Java-Programmierer als Factor-Programmierer... Und ebenso mehr Literatur, Frameworks, Tools...

#7921671
Lesenswert?

Nun hat das Kätzchen versucht, mal die fr8x-format in C++ umzusetzen:

Ob sich das compilieren läßt? Ich probier es morgen mal aus.


Ich kann Ihnen helfen, das FACTOR-Programmierbeispiel in C++ zu übersetzen. Das Beispiel zeigt eine Implementierung eines Datenformats namens "ROLAND". Hier ist eine mögliche Übersetzung in C++:

#include <iostream> #include <vector> #include <string> #include <bitset> #include <sstream> #include <iomanip>

// Helper functions std::vector<bool> reverse(const std::vector<bool>& bits) { std::vector<bool> reversed = bits; std::reverse(reversed.begin(), reversed.end()); return reversed; }

std::vector<bool> append(const std::vector<bool>& a, const std::vector<bool>& b) { std::vector<bool> result = a; result.insert(result.end(), b.begin(), b.end()); return result; }

std::vector<bool> padbitseq(const std::vector<bool>& bitseq) { size_t len = bitseq.size(); if (len % 8 != 0) { size_t padding = 8 - (len % 8); std::vector<bool> paddingBits(padding, false); return append(bitseq, paddingBits); } return bitseq; }

std::vector<uint8_t> dumpbitseq(const std::vector<bool>& bitseq) { std::vector<bool> padded = padbitseq(bitseq); std::vector<uint8_t> bytes; for (size_t i = 0; i < padded.size(); i += 8) { uint8_t byte = 0; for (size_t j = 0; j < 8; ++j) { byte = (byte << 1) | padded[i + j]; } bytes.push_back(byte); } return bytes; }

// Bitstream reader class class BitStreamReader { public: BitStreamReader(const std::vector<bool>& bits) : bits_(bits), pos_(0) {}

1
bool readBit() {
2
    if (pos_ >= bits_.size()) {
3
        throw std::out_of_range("Read past end of bitstream");
4
    }
5
    return bits_[pos_++];
6
}
7

8
std::vector<bool> readBits(size_t count) {
9
    std::vector<bool> result;
10
    for (size_t i = 0; i < count; ++i) {
11
        result.push_back(readBit());
12
    }
13
    return result;
14
}

private: std::vector<bool> bits_; size_t pos_; };

// Example usage int main() { // Example bit sequence std::vector<bool> bitseq = {true, false, true, true, false, false, true, false};

1
// Pack bits
2
std::vector<bool> packed = append(reverse(bitseq), bitseq);
3

4
// Dump to bytes
5
std::vector<uint8_t> bytes = dumpbitseq(packed);
6

7
// Print results
8
std::cout << "Original bits: ";
9
for (bool bit : bitseq) {
10
    std::cout << bit;
11
}
12
std::cout << "\nPacked bits: ";
13
for (bool bit : packed) {
14
    stdcout << bit;
15
}
16
std::cout << "\nDumped bytes: ";
17
for (uint8_t byte : bytes) {
18
    std::cout << std::hex << static_cast<int>(byte) << " ";
19
}
20
stdcout << std::endl;
21

22
return 0;

}

Diese Übersetzung enthält grundlegende Funktionen, die in der FACTOR-Implementierung verwendet werden, wie reverse, append, padbitseq und dumpbitseq. Darüber hinaus habe ich eine einfache BitStreamReader-Klasse implementiert, die ähnliche Funktionalität wie der bitreader in FACTOR bietet.

Bitte beachten Sie, dass diese Übersetzung eine vereinfachte Version des Originalcodes ist und möglicherweise nicht alle Funktionen oder Details des FACTOR-Codes reproduziert. Wenn Sie spezifische Fragen oder zusätzliche Funktionen benötigen, lassen Sie es mich wissen!

mfg Lotta.

Persönliche Seite #7921703
Lesenswert?

Lotta  . schrieb:

Das Beispiel zeigt eine Implementierung eines Datenformats namens "ROLAND". Hier ist eine mögliche Übersetzung in C++:

Wenn dein Problem darin besteht, bitgenau binäre Datenformate einzulesen, kann ich dir wärmstens meine durch biologische Intelligenz¹ erstellte Bibliothek für genau diesen Zweck empfehlen:

https://github.com/Erlkoenig90/uSer

Ist natürlich nur der allererste Schritt für diese Aufgabe.

[1] Wird es eigentlich demnächst ein Qualitätsmerkmal sein, wenn ein Werk vor 2018 veröffentlicht wurde, d.h. bevor GenAI auf die Welt losgelassen wurde...?

#7921721
Lesenswert?

Niklas meinte:

Wenn dein Problem darin besteht, bitgenau binäre Datenformate einzulesen, kann ich dir wärmstens meine durch biologische Intelligenz¹ erstellte Bibliothek für genau diesen Zweck empfehlen:

https://github.com/Erlkoenig90/uSer Geil!! die wird besichtigt!

Ist natürlich nur der allererste Schritt für diese Aufgabe.

Hey, bist Du ein Hellseher? Wir schreiben gerad ne Library, die ne Datei in byteweisen Zugriff durchnustern kann. Dabei wird sie abschnittsweis in nen Puffer eigelesen, so das das gewünschte Byte immer in der Mitte des Puffers ist.

[1] Wird es eigentlich demnächst ein Qualitätsmerkmal sein, wenn ein Werk vor 2018 veröffentlicht wurde, d.h. bevor GenAI auf die Welt losgelassen wurde...?

Offenbar! Damals wurde noch speicherergonomisch geproggt. Wenn ich sehe, das in dem obrigen Proggy ne Bitsetklasse benutzt wird, oh, Mann. Aber das kann natürlich refactorisiert werden.

Ich wollte eigendlich nur sehen, ob Lumo das übersetzen kann. Ich hab dabei an Harmonikamusik gedacht, speziell an Meera Nam Joker...

mfg

#7921747
Lesenswert?

Niklas G. schrieb:

Lotta  . schrieb:

Bitsetklasse

Na die wird ja eben nicht benutzt... Der Header wird inkludiert aber die std::bitset Klasse dann nicht genutzt, stattdessen vector<bool>. std::bitset wäre ja sogar effizient. Naja, auf einem modernen PC spielt es sowieso keine Rolle sofern du nicht die gesamte Musikgeschichte so abbilden möchtest

Siehste, soweit war ich noch gar nicht, das wäre mir dann morgen erst beim Durchsteppen des Codes aufgefallen. Wären nicht Makros oder Inlinefunktionen speichergenügsamer als ne Klasse? Ich würde keine Musikgeschichte abbilden wollen, aber wenn man das Dateiformat verstehen könnte...

@Christian, was sind denn eigendlich die Registrierungsdaten, was machen die denn? Musik wird doch eigendlich mittels MIDI weitergegeben?

Mfg

Persönliche Seite #7921750
Lesenswert?

Lotta  . schrieb:

Wären nicht Makros oder Inlinefunktionen speichergenügsamer als ne Klasse?

Makros sind nur simple Textersetzung und haben selten Vorteile gegenüber Inline -Funktionen, aber viele Nachteile, und sollten sparsam eingesetzt werden.

Inline-Funktionen (und Makros) sind genau so wenig ein Ersatz für Klassen wie ein Lenkrad kein Ersatz für einen Katalysator ist.

Lotta  . schrieb:

aber wenn man das Dateiformat verstehen könnte...

Das kannst du auch in Python, Java, C# und jeder anderen verbreiteten Sprache.

Wie groß ist denn so eine typische Datei die du einlesen möchtest?

Lotta  . schrieb:

beim Durchsteppen des Codes aufgefallen.

Strg+F tut's auch...

OP #7921758
Lesenswert?

Die Registrierungen bei den Roland V Akkordeons , das sind voll elektronische Geräte, aber mit Blasebalg, die sind eigentlich Aranger Keyboards nur in Akkordeonform, ja und dort werden die Stimmen, die Stimmlagen, die Orchesterstimmen(fast 300 Instrumente gesampelt) in Registrierungen zusammen gestellt und abgespeichert. Alles recht komplex diese Dateiblöcke mit den Einstellungen sind in größeren Blöcken zusammen gesetzt. Der Anwender hat nun die Möglichkeit, mit einem Editor von Roland, (bald 15 Jahre alt) die Dateien zu bearbeiten. Ein Graus hoch 3 Die Software wurde unter Java entwickelt und es gibt leider keine andere Software weltweit zum Bearbeiten der Dateien, mit Ausnahme einer kleinen Software als BASH Routine zum Block-zerlegen in kleinere Blöcke. Gruß Christian

re

Persönliche Seite #7921760
Lesenswert?

Lotta  . schrieb:

Unsere Library, die ich erwähnt hab, sollen exen und DLLs einlesen können

Das gibt's doch schon ewig, da musst du keine eigene Abhandlung des Formats implementieren... libbfd?

Christian P. schrieb:

der Dateien, mit Ausnahme einer kleinen Software als BASH Routine

Die ruft bestimmt nur "dd" auf o.ä. Das wäre somit wahrscheinlich sehr simpel in nahezu jede andere Sprache poetierbar.

Lu schrieb:

. Ein Compiler kann auch viel unnützes Zeug mitliefern und den knappen Speicher alter Geräte überfordern. :-)

Welcher Compiler und welches alte System soll das sein? C# Compiler und Z80?

#7921767
Lesenswert?

Klar, Niklas, es gibt schon alles. Aber eine kleine Group aus behinderten Kids möchten ihre eigenen Proggys haben und bei der Implementierung lernen. Und das, bevor sie 18 Jahre alt werden...

Stell Dir vor, ne 15- jährige schreibt einen algo, der einen Block in den Puffer lädt, dann das Byte ändert. Wenn jetzt nen Byte an anderer Stelle geändert werden soll, wird automatisch der Block zurückgeschrieben, der neue Block geladen ind das neue Byte bearbeitet...

@Christian, gibt es das Java-Proggy bei Dir?

mfg

Persönliche Seite #7921813
Lesenswert?

Lotta  . schrieb:

Aber eine kleine Group aus behinderten Kids möchten ihre eigenen Proggys

Was ist eigentlich ein "Proggy"? Der Nachfolger von "Apps"? Gibt's die im ProggyStore?

Lotta  . schrieb:

Und das, bevor sie 18 Jahre alt werden...

Na dann sollten die unbedingt mit C++ eine der komplexesten Programmiersprachen nutzen.

Lotta  . schrieb:

Stell Dir vor, ne 15- jährige schreibt einen algo, der einen Block in den Puffer lädt, dann das Byte ändert. Wenn jetzt nen Byte an anderer Stelle geändert werden soll, wird automatisch der Block zurückgeschrieben, der neue Block geladen ind das neue Byte bearbeitet...

Ob ein Python Programm das in 0.0001s oder ein C++ Programm das in 0.00001s macht, spielt keine große Rolle.

#7922040
Lesenswert?

Christian P. schrieb:

Hier ist die URL für den FR8 editor

https://www.roland.com/de/support/by_product/fr-8x/updates_drivers/6a228ef1-e666-4754-89bc-1c0a9e4a45b9/

Um diese Datei ausführen zu können muss Java auf einem Windows Rechner installiert sein

Richtig. Um dann die JAR-Datei in Quelltext zu sehen, muß ein Java Decompiler installiert sein, wenn es in Deinem Link den Quelltext nicht schon gibt. Das kann ich aber erst von zuhause feststellen. Ich melde mich dann.

Gruß Lotta.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren