Softwaresynthesizer Performance?

justchris

Mitglied
Hallo,

ich möchte einen kleinen Softwaresynthesizer schreiben, also kein großes Projekt. Nun zu meiner Frage, ich würde es gerne plattformunabhängig gestalten und stehe vor der Wahl C++/Qt oder Java.

Könnte Java da bei der Performance wenigstens zu 50% mit C++ mithalten? Ich habe auch vor Echtzeitfilter alla FIR einzubinden.

Danke für eure Antworten.
 

Antoras

Top Contributor
Um die Geschwindigkeit von Java würde ich mir keine Gedanken machen. Die JVM verfügt über einen JIT-Compiler der auch dynamische Codeoptimierung erlaubt.
Die Frage ist eher ob du dir bewusst bist, dass selbst ein kleiner Software-Synthesizer ein schon etwas größeres Projekt ist.
 

justchris

Mitglied
Um die Geschwindigkeit von Java würde ich mir keine Gedanken machen. Die JVM verfügt über einen JIT-Compiler der auch dynamische Codeoptimierung erlaubt.
Die Frage ist eher ob du dir bewusst bist, dass selbst ein kleiner Software-Synthesizer ein schon etwas größeres Projekt ist.

Danke für die Antwort, ich werde das dann mal austesten. Zu dem größeren Projekt kann ich nur sagen das ich erstmal die elementaren Dinge implementiere wie Soundserver, Waveformgenerator und FIR-Filter. Die ersten beiden Dinge habe ich noch mit C++ und WinAPI in 2 Tagen hinbekommen, also ist das nicht das Riesen-Projekt am Anfang. Es ist ja auch erstmal nicht für die Allgemeinheit gedacht, wenn es dann mal so wird wie man sich einen Softsynth kennt werde ich sicherlich schon ein paar Monate dran basteln.

Ist der JIT-Compiler so gut dass er im Millisekundenbereich verschiedene Methoden so heftig optimieren kann? Ich habe ja vor das alles mehrstimmig wird und natürlich in weicher Echtzeit ablaufen soll. Das bedeutet das innerhalb von z.B 20ms verschiedene Waveforms gemischt und mit Effekten versehen werden. Wenn Java das auch nur halb so gut schafft wie C++ bin ich echt begeistert.

Gruß Chris
 

justchris

Mitglied
entschuldigt die anfängerzwischenfrage, aber was genau versteht man unter einen Softwaresynthesizer? Was soll der können?
Mit einem Synthesizer kannst du Musikinstrumente synthetisch nachbilden, das geht soweit als das garnicht mehr versucht wird irgendwas nachzubilden sondern die sehr eigenen Sounds schon selbst Kult sind. Beispiele für synthetische Musik findest du z.B bei Depeche Mode oder beim alten C64 oder die TB-303 in der Technoszene, aber auch in vielen modernen Titeln wird damit gearbeitet.

Ein Softwaresythesizer versucht nun eine oder mehrere Technologien der elektronischen Tonerzeugung rein per Software nachzubilden.

Ich hoffe das war einigermaßen verständlich erklärt, wenn nicht einfach nachfragen.

Gruß Chris
 

JanHH

Top Contributor
Ich hab auch schon die These gehört dass java bei sowas sogar schneller als nativ kompilierte Sprachen ist, weil die jvm den Code je nach Anforderung und Plattform dynamisch optimieren kann.

Meine Sorge wäre eher, ob und wie sich so eine recht hardwarenahe Sache mit einer eigentlich plattformunabhängigen Sprache realisieren lässt. Also ob eine Schnittstelle für die performante Ausgabe der erzeugten Sounds zur Verfügung steht.

Ansonsten ziemlich crazy zu sowas unter "Anfängerfragen" zu fragen..
 
M

maki

Gast
Performance im Vergleich zu C++ sollte kein Problem darstellen, 100% zu C++ ist kein unrealistisches Ziel.
Ausser man meint "eigentlich" C anstatt C++ ;)
Aber wenn es richtig schnell gehen soll, wäre die GPU vielleicht das Mittel der Wahl, wundert mich das Marco13 das noch nicht erwähnt hatte *g*

Ich hab auch schon die These gehört dass java bei sowas sogar schneller als nativ kompilierte Sprachen ist, weil die jvm den Code je nach Anforderung und Plattform dynamisch optimieren kann.

Meine Sorge wäre eher, ob und wie sich so eine recht hardwarenahe Sache mit einer eigentlich plattformunabhängigen Sprache realisieren lässt. Also ob eine Schnittstelle für die performante Ausgabe der erzeugten Sounds zur Verfügung steht.
Java kann auch um einiges schneller sein als C++, kommt immer auf den Anwendungsfall an.
Hatte erst letztens einen C++ Entwickler der mir den Tipp geben wollte, Hashes in Maps zu verwenden, aus Performace Gründen...
Diesen Tipp hab ich mit einem riesen Grinsen beantwortet und den Worten: Das läuft in einer modernen Sprache automatisch so *g*
Der JIT/Hotspot ist übrigens der statischen Optimerung von C/C++ weit überlegen.

Ansonsten ziemlich crazy zu sowas unter "Anfängerfragen" zu fragen..
Ja.
 

justchris

Mitglied
Lass das mit C zu C++ nicht die Leute im cplusplus Forum lesen ;-) In C musst du erst mal hin bekommen so schnell zu sein wie die Standardlib in C++, das ist alles hoch optimiert und z.B. die Vektoren sind exakt so schnell wie z.B. die Arrays über reine Pointer in C. Aber ich will hier kein Flamewar starten.

Das mit der Performance des JITs hört sich toll an, ich werde nachdem die C++ Version einen gewissen Stand hat mal versuchen das in Java umzusetzen und werde bestimmt dabei jede Menge Fragen haben ;-)

Ein Softwaresynth ist eigentlich überhaupt nicht hardwarenah, da alles in einem Buffer passiert und erst nachdem alle Berechnungen wird per xbeliebiger Waveoutfunktion der Audiobuffer ausgegeben. Also 99,9% Hardwareunabhängig, das sollte eigentlich gut funktionieren in einer VM sofern eine Möglichkeit besteht ein Buffer ohne Schnickschackeffekte als Audio auszugeben.

Da ich mich als Java-Anfänger sehe, weil ich noch nicht soo viel mit Java gemacht habe dachte ich dass ich im richtigen Forum war. Sorry wenn ich mich da vertan habe.

Gruß Chris
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Aber wenn es richtig schnell gehen soll, wäre die GPU vielleicht das Mittel der Wahl, wundert mich das Marco13 das noch nicht erwähnt hatte *g*

Natürlich hatte ich bei meiner ersten Nachfrage jcuda.org - JCufft im Hinterkopf. Die gleiche Möglichkeit gäb's ja auch in C. Ob man sie nutzt, bleibt jedem selbst überlassen.

Ich hatte auch mal in Erwägung gezogen, mal zu schauen, was man so mit (JCu)fft und dem Java Media Framework (JMF) so alles machen kann, z.B. eine "Aufnahme" mit dem Mirkofon in Echtzeit manipulieren oder so. Aber ... was ich nicht so alles in Erwägung ziehe :rolleyes:

Für die eigentliche Ausgabe würde sich das JMF dann anbieten, aber da kann schon einiges an Einarbeitung notwendig sein. Wobei es vielleicht bei "einfachem" Audio nicht so dramatisch ist, wie etwa bei Videos....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
N Java-Performance messen Java Basics - Anfänger-Themen 1
B Performance-Vergleich mit C++ Java Basics - Anfänger-Themen 55
P Priority Queue Performance Java Basics - Anfänger-Themen 3
P Performance Array und Liste Java Basics - Anfänger-Themen 13
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
I Erste Schritte Resource Bundle - Alles in einem File oder mehrere? => Faktor Performance Java Basics - Anfänger-Themen 2
E Hilfe zur Performance Verbesserung gesucht Java Basics - Anfänger-Themen 1
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
S Performance-/Stress Test für Webanwendung Java Basics - Anfänger-Themen 2
R Datei kopieren: Performance erhöhen Java Basics - Anfänger-Themen 10
S Wie performance lastig sind rekursionen Java Basics - Anfänger-Themen 13
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
I Anzahl einer Liste (Performance) Java Basics - Anfänger-Themen 2
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
S Performance HashMap<=>Array Java Basics - Anfänger-Themen 17
J Arrays erweitern - Performance vs Speicherverbrauch Java Basics - Anfänger-Themen 6
M Einträge in Dateien zählen - Performance-Problem Java Basics - Anfänger-Themen 10
S unterschied in performance Java Basics - Anfänger-Themen 4
hdi Worst-Performance-Award für Arbeiten mit ListModel Java Basics - Anfänger-Themen 7
hdi Performance Frage (Threads,Swing) Java Basics - Anfänger-Themen 4
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
G import .; - Speicherauslastung, Performance Java Basics - Anfänger-Themen 14
G Performance Java Basics - Anfänger-Themen 18
C Performance IO vs. NIO Java Basics - Anfänger-Themen 5
S dynamic arrays/ performance Java Basics - Anfänger-Themen 2
RaoulDuke Arbeitsweise / Speichernutzung / Performance Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben