Bitte geben Sie einen Grund für die Verwarnung an
Der Grund erscheint unter dem Beitrag.Bei einer weiteren Verwarnung wird das Mitglied automatisch gesperrt.
RustyPipes Open Source VPO Software
#121
@Dividebysandwich Du musst da grundsätzlich überlegen wie wichtig dir die Funktion eines Sets ist, wenn du dafür so einen Aufwand betreiben musst und die Software dadurch immer unnötig aufbläht. Wenn man 20 Jahre alte Altlasten nutzen möchte, dann kann man auch gleich GrandOrgue nutzen.
GrandOrgue ist ja auch wenn man es bauen möchte eine Abhängigkeitshölle... Vielleicht denkst du einmal über ein Plugin System nach. RustyPipes selbst kann die Basisfunktionen die man erwartet, alle weiteren Funktionen werden in Plugins ausgegliedert die man bei Bedarf einbinden kann. Keine Ahnung wie komplex so eine Umsetzung ist, aber von der Idee wäre es ja gut, wenn man nur das nutzen muss was man selbst auch braucht.
Zitat von Untersatz32 im Beitrag #121
GrandOrgue ist ja auch wenn man es bauen möchte eine Abhängigkeitshölle...
Rusty Pipes zieht sich beim Übersetzen über 400 Libs ("Crates") rein

Zitat von Untersatz32 im Beitrag #121
Vielleicht denkst du einmal über ein Plugin System nach. RustyPipes selbst kann die Basisfunktionen die man erwartet, alle weiteren Funktionen werden in Plugins ausgegliedert die man bei Bedarf einbinden kann.
Das ist eine Überlegung wert. Mit einer guten Architekturschicht sind Erweiterungen sauber integrierbar.
#123
Der Vorteil ist eben: Brauche ich keine Unterstützung für RestAPI, display und co, warum sollte dann dafür Rechenzeit vergeudet werden? Ich denke auch bei einer sauberen Implementierung könnte man selbst ohne viel Aufwand auch Anpassungen vornehmen und im Fehlerfall wohl gut eingreenzen. Vor allem wenn das Projekt immer größer wird.
#124
Eine Plugin-Infrastruktur kostet auch Aufwand und CPU-Zeit. Vorallem wenn du so Sachen machen willst wie Dateiformate supporten etc. ist das ziemlich viel Programmierarbeit. Die REST-API ist von der CPU-Load her irrelevant. Wenn kein Request reinkommt macht das Ding garnichts. Ja RP braucht relativ viele Dependencies, das meiste kommt mit Cpal, Symphonia und egui rein, aber es ist nicht so schlimm wie bei Javascript wo leftpad ein "library" ist ;)
Ich würde mal die Kirche im Dorf lassen. Wavpack support kommt nicht nur weil es eine Plugin-Infrastruktur gibt. Das sollen die Symphonia-Leute machen.
Wer bei RP etwas beitragen will, kann das gerne per Pull Request machen.
Ist schon klar, dass Vorschläge leichter sind, als die Umsetzung. Da du scheinbar ein Audio-Framework verwendest (was mir nicht klar war), gehört so eine Erweiterung ganz klar in das Audio-Framework. Meine Lieblingssprache ist C# und ich habe eigene Freizeit-C#-Projekte, die mir leider keine Zeit für was Anderes lassen.
#126
@Dividebysandwich Wie läuft das eigentlich mit dem Wavpack, wird dies auch per Streaming abgespielt? Ich selbst würde es wohl Intern in etwas anderes umwandeln, womit ich dann sauber arbeiten kann. Also einen Cache aus den originalen erstellen welcher dann umgewandelte Audiodaten enthält. Oder ist genau diese Umwandlung ein Problem?
Ich selbst würde komprimierte Dinge in diesem Kontext ohnehin als schwierig sehen wegen der Performance.
#128
Zitat von Untersatz32 im Beitrag #126
Ich selbst würde es wohl Intern in etwas anderes umwandeln, womit ich dann sauber arbeiten kann.
Genau das mache ich auch. Ich brauche eigentlich nur noch etwas um Wavpack zu lesen, und am liebsten eine reine Rust-Lösung ohne dass ich C-libraries wrappe. Entpacken on the fly beim streamen ist einfach zu rechenintensiv.
Zitat von Montre im Beitrag #127
Was spricht dagegen, die WAVPACK3-Dateien mit wvunpack zu entpacken und mit einer neueren Version zu packen oder die Dateien entpackt zu verwenden?
Ich habe ein shell script welches genau das macht, allerdings mit ffmpeg, und das zerstört leider die Loop Points der Attack Samples. Und ein altes wvunpack Binary zu finden welches auf aktuellem Linux läuft ist garnicht mal so einfach.
Aber wie gesagt es gibt einen PR im Symphonia-Library und mein Plan ist entweder zu warten bis das verwendbar ist und/oder Code beizutragen damit die Loop-Metadaten auch überleben.
EDIT: Vielleicht kann mir jemand verraten wie ich ffmpeg dazu bringe SMPL headers mit den loop points aus dem wavpack zu extrahieren, damit würden die Samplesets zumindest sofort in RP verwendbar. Irgendwie bringe ich das nicht zustande.
Warum ffmpeg? Nach wvunpack -o output.wav input.wv sind die Loops in der WAV enthalten.
Script (KI macht's möglich)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env bash
u32le() {
# liest uint32 little endian aus Datei bei Offset
# $1 = file, $2 = offset
xxd -s "$2" -l 4 -p "$1" | tac -rs .. | tr -d '\n' | awk '{print strtonum("0x"$0)}'
}
for wv in *.wv; do
wav="${wv%.wv}.wav"
echo "▶ $wv"
wvunpack -q -o "$wav" "$wv" || continue
# SMPL-Chunk suchen
smpl_pos=$(grep -abo "smpl" "$wav" | head -n1 | cut -d: -f1)
if [[ -z "$smpl_pos" ]]; then
echo " Kein SMPL-Chunk"
continue
fi
smpl_data=$((smpl_pos + 8))
num_loops=$(u32le "$wav" $((smpl_data + 28)))
if (( num_loops == 0 )); then
echo " Keine Loops"
continue
fi
echo " $num_loops Loop(s):"
loop_base=$((smpl_data + 36))
for ((i=0; i<num_loops; i++)); do
off=$((loop_base + i*24))
start=$(u32le "$wav" $((off + 8)))
end=$(u32le "$wav" $((off + 12)))
echo " Loop $((i+1)): $start → $end"
done
done
#130
Zitat von Montre im Beitrag #129
Warum ffmpeg? Nach wvunpack -o output.wav input.wv sind die Loops in der WAV enthalten.
Die aktuelle und in den meisten Distributionen enthaltene Version unterstützt wohl die alten Varianten davon nicht was bei der Silbermann wohl der Fall ist.
Ich würde ja vorschlagen im Code von GrandOrgue einmal zu schauen wie man dort mit den alten Formaten umgeht, aber man ist dort ja der Meinung, dass Kommentare im Code nicht notwendig sind... Versuche dann mal was zu finden
GO ist architektonisch suboptimal. Der mit WxWidget verseuchte Code ist furchtbar. Es ist wahrscheinlich volle Absicht, das nichts kommentiert ist, damit kein "Fremder" dort "rumpfuscht". Vermutlich gibt es ein Script, dass vor der Veröffentlichung alle Kommentare entfernt.
Ich hatte mal den Wunsch, die WxWidget-Oberfläche vom Kern zu trennen - quasi einen sauberen Audio-Kernel zu erstellen. Aber die WxWidget-Klassen wurden durchgängig verwendet. Diese Idee habe ich dann doch relativ schnell verworfen. Es ist leichter, von vorn zu beginnen. Aber andere Projekte sind mir gerade wichtiger.
Ich habe das File gefunden: https://github.com/GrandOrgue/grandorgue...e/GOWavPack.cpp
#133
Zitat von Montre im Beitrag #131
Ich hatte mal den Wunsch, die WxWidget-Oberfläche vom Kern zu trennen - quasi einen sauberen Audio-Kernel zu erstellen.
Ich erinnere mich da an eine Diskussion in einem anderen Forum von dir

Zitat von Montre im Beitrag #131
Vermutlich gibt es ein Script, dass vor der Veröffentlichung alle Kommentare entfernt.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import re
def remove_c_comments(text):
# Regex: Gruppe 1 sind Strings/Chars, Gruppe 2 sind Kommentare
pattern = r'("(?:\\.|[^"\\])*"|\'(?:\\.|[^\'\\])*\')|(/\*[\s\S]*?\*/|//.*)'
def replace(match):
# Wenn Gruppe 1 (String) existiert, gib ihn zurück (behalten)
if match.group(1):
return match.group(1)
# Sonst war es ein Kommentar (Gruppe 2), also löschen (leeren String zurückgeben)
else:
return ""
return re.sub(pattern, replace, text)
# Test
c_code = """
int main() {
// Das ist ein Kommentar
printf("Hallo Welt!"); /* Das hier bleibt heile */
/* Block
Kommentar */
return 0;
}
"""
print(remove_c_comments(c_code))

Aber warum?
Damit den Source keiner zu schnell versteht und Änderungen einreicht.
Ein Script für macOS:
2
3
4
5
6
7
8
9
10
11
SRC="./Zoeblitz_Std/samples"
DST="./Zoeblitz_Std/samples_unpacked"
find "$SRC" -type f \( -iname "*.wav" -o -iname "*.wv" \) |
while IFS= read -r file; do
rel="${file#$SRC/}"
outdir="$DST/$(dirname "$rel")"
mkdir -p "$outdir"
base="$(basename "$file")"
base="${base%.*}"
wvunpack "$file" -o "$outdir/$base.wav"
done
#135
Zitat von Montre im Beitrag #134
Damit den Source keiner zu schnell versteht und Änderungen einreicht.
Ja, schon klar nur verstehe ich mit meinem wohl beschränkten Verstand den Sinn dahinter nicht. Wenn ich nicht will das mein Programmcode von jemanden genutzt wird, dann zwingt mich ja keiner diesen zu veröffentlichen. In letzter Konsequenz würde das eben bedeutet man muss closed neu anfangen.
- Hauptwerk
- Hauptwerk-Konfiguration, Diskussion
- Hauptwerk-Samplesets
- GrandOrgue
- GrandOrgue-Konfiguration, Diskussion
- GrandOrgue-Samplesets
- Sweelinq
- Sweelinq-Konfiguration, Diskussion
- Sweelinq-Samplesets
- Sonstige Orgelsoftware
- Organteq
- Sonstige Sampler
- Hardware
- Spieltische und Selbstbau
- Zubehör (PCs, Monitore, Interfaces etc.)
- Klangabstrahlung
- Musikalisches
- Noten, Einspielungen, Konzerte
- Sonstige Musikthemen
Jetzt anmelden!
Jetzt registrieren!