MIDI + openGL auf Mac und Windows - aber welche Sprache?

  • Ich kenn mich mit Programmiersprachen bzw. deren Lauffähigkeiten auf verschiedenen Plattformen wenig aus, deswegen hätt ich eine Frage:

    Es soll eine Software entwickelt werden, die MIDI-Daten empfangen kann und allerlei graphisches über OpenGL ausgibt. Das Problem dabei: es sollte sowohl auf Windows, als auch aufm Mac (und vielleicht auch auf Linux) rennen.
    VC++ fällt da schonmal aus, bei Java mach ich mir Sorgen wegen der Performance. vorallem weiß ich nicht was der Unterschied zwischen Java3D und JOGL ist. Soweit ich das verstanden hab ist JOGL die Basis für die aktuelle Java3D-Version, sofern diese überhaupt noch weiterentwickelt wird.

    Irgendwelche Tipps?

  • Soweit ich das verstanden hab ist JOGL die Basis für die aktuelle Java3D-Version, sofern diese überhaupt noch weiterentwickelt wird.

    hmm ... also Java3D hat als unterbau DirectX und/oder OpenGL ... je nachdem was auf den OS unterstützt wird ... zumindest war es früher so

    JOGL, soweit ich weiss, schleift nur alle funktion calls auf die OpenGL-dlls um und bietet halt die ganzen Interfaces etc. damit das möglich ist ... sogar shader support wird geboten (angeblich kann man auch CG (nividia C for graphics) mit jogl verwenden) ... ich glaub kaum das viel weniger performant ist, als wenn man die OpenGL functions über Java called, als gleich aus C/C++

  • Portable OpenGL-Programme schreiben sollte keine Probleme bereiten, eher Sorgen machen würd ich mir da um den MIDI-Support - ich schätze mal die Files sollen auch abgespielt werden? (weil du nur sagtest "empfangen"...)
    Meiner Erfahrung nach sind MIDI Files unter Linux immer noch "a pain in the ass", wie das aufm Mac ist kann ich nicht sagen ;)

    Aber warum fällt C++ aus? "VC++" ist ja nur eine Entwicklungsumgebung von Microsoft, aber mir der Sprache an sich kann man sehr wohl plattformunabhängig programmieren, wär ja schlimm wenn nicht!

    Grüße,
    fieselschweif

  • Vielleicht musst Du ja auch nicht "von null weg" programmieren, sondern kannst eine der realtime-multimedia-entwicklungsumgebungen verwenden:

    kommerziell, auf windows und Mac: Max/MSP

    http://en.wikipedia.org/wiki/Max_%28software%29

    oder lieber open source, auf Win+Mac+Unix: Pure Data (PD)

    http://en.wikipedia.org/wiki/Pure_Data

    Brigitte Jellinek - http://multimediatechnology.at/web-communities/
    Ich unterrichte in einem Medieninformatik-Studium (BSc, MSc) mit Schwerpunkt Web Development
    Meine Themen: Ruby on Rails, Javascript, SCRUM, git, Test Driven Development,...

  • Als Programmiersprache wuerde ich, wie immer, die abstrakteste Sprache nehmen die Du findest. Wenn die Zeit knapp ist, dann besser die abstrakteste Sprache die Du bereits kennst. Und relativ populär sollte sie schon sein. Python, Ruby oder sowas. Auf jeden Fall würde ich mir zweimal überlegen, ob Du Dir hier wirklich Java oder sogar C++ antun musst. Die meisten Implementierungen von OpenGL sind sowieso in C implementiert.

    Als Plattform empfehle ich Java oder CPython.

    Fuer CPython gibt es z.B. http://pyopengl.sourceforge.net

    Fuer Java gibt es das schon angesprochene http://en.wikipedia.org/wiki/Java_OpenGL .

  • Naja ich hätte da schon an Java gedacht, da ich damit doch schon einige Erfahrungen hab (Eprog, SE, DSLab, MM1), vorallem gäbe es da für MIDI das Java Media Framework für Windows, angeblich auch für Mac, ich hoffe das funzt da auch gscheit.

    Da das ganze im Rahmen eines Praktikums aufm VrVis stattfindet, kann ich da nicht irgendwas fertiges verwenden. Und Max/MSP/PD gehen da ein bissl in eine andere Richtung.
    Meine Zweifel hab ich bei Java halt immer in der Performance ;-), aber bei opengl müsst das ja anders sein, schließlich macht ja die Graka da die meiste Arbeit.

    2 Mal editiert, zuletzt von Stephe (8. Juni 2008 um 11:24)

  • Naja ich hätte da schon an Java gedacht, da ich damit doch schon einige Erfahrungen hab (Eprog, SE, DSLab, MM1)

    Dann ist Java sicher eine solide Option. Nicht, dass es kontraproduktiv waere eine abstraktere Sprache dazuzulernen. Aber das wuerde auf jeden Fall ersteinmal Zeit kosten.


    vorallem gäbe es da für MIDI das Java Media Framework für Windows, angeblich auch für Mac, ich hoffe das funzt da auch gscheit.

    Java ist der Name fuer eine Programmiersprache, sowie fuer eine Softwareplattform. Das Java Media Framework ist Teil der Softwareplattform Java, d.h. Du kannst das mit jeder Programmiersprache benutzen, die es fuer Java gibt. Z.b. Java, aber auch Python, Ruby, Scala, Scheme und viele weitere.

    Und als Randnotiz: APIs fuer MIDI Verarbeitung gibt es eigentlich auf allen grösseren Softwareplattformen.

    lg, Benjamin Ferrari, bookworm.at

    5 Mal editiert, zuletzt von a9bejo (8. Juni 2008 um 11:43)

  • Meine Zweifel hab ich bei Java halt immer in der Performance ;-), aber bei opengl müsst das ja anders sein, schließlich macht ja die Graka da die meiste Arbeit.

    Vergiss die Gerüchte über die Performance von Java. Ich hab letztes Semester in der LVA Game Design ein komplettes 3D-OpenGL-Spiel in Java implementiert (mit jmonkeyengine und lwjgl), das ist einwandfrei gelaufen, obwohl ich mich um Performance überhaupt nicht gekümmert hab aus Zeitmangel (mein Profiler hat ergeben, dass die größte Performancebremse die Grafikkarte war, nicht der Java-Teil).
    Wenn dus ausprobieren willst, das Spiel ist hier: http://monitzer.com/moriarty/ (Java Webstart)

    Die MIDI-API ist unter Mac OS X, Windows und ich nehm an auch Linux völlig unterschiedlich, wenn du nicht sowas wie das Java Media Framework verwendest, musst du dich drauf einstellen, das ganze 3x zu programmieren.

    Übrigens könnte es sein, dass das ganze je nach Anforderungen am Mac sogar ohne textuelles Programmieren gehen würde mit dem Quartz Composer (Teil von den Developer Tools), der verwendet nämlich OpenGL für die Ausgabe, und unterstützt MIDI als input. Das ist mehr oder weniger eine graphische Programmiersprache, wo man einen Datenfluss mit der Maus zusammenklicken kann. Ist evtl ganz praktisch für einen Prototypen, aber unter Windows/Linux hast damit natürlich keine Chance.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

    Einmal editiert, zuletzt von hal (8. Juni 2008 um 12:52)

  • Naja Gerüchte, Java ist bewiesenermaßen langsamer als so manch andere Sprache, aber egal. Es dürfte für die Zwecke reichen.
    Sofern JMF aufm Mac vernünftig funktioniert wird das auch eingesetzt. Windows hat außerdem eh Vorrang, erstens weil nur mein Kollege einen Mac hat und ich nicht, und außerdem werden wir am VrVis wahrscheinlich garkeinen Apfel zur Verfügung haben. Also fällt dieses Quartz-Tool sowieso weg.

  • Naja Gerüchte, Java ist bewiesenermaßen langsamer als so manch andere Sprache

    Es ist auch bewiesen worden, dass Java schneller als C++ ist (durch den Hotspot-Compiler). Glaube keiner Studie, die du nicht selbst gefälscht hast.

    Wo du noch aufpassen musst ist, dass das JMF am Mac nur eine beta oder sowas in der Art ist, teste das also mal vorher, bevor du da groß zum Programmieren anfängst.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Naja Gerüchte, Java ist bewiesenermaßen langsamer als so manch andere Sprache, aber egal.

    Geruechte. Programmiersprachen haben praktisch sehr wenig bis gar keinen Einfluss auf die Geschwindigkeit einer Software. Und was Compiler betrifft: Da wird dir jeder Ruby/Python/Erlang/Smalltalkprogrammierer bestaetigen, dass die Softwareplatform Java eher zu den schnelleren Lösungen gehört.

    Wegen OptimizeLater ist das nicht besonders wichtig; Und wenn doch, dann würde ich jede Zeile Code in hochoptimiertem Assembler schreiben.

    lg, Benjamin Ferrari, bookworm.at

    3 Mal editiert, zuletzt von a9bejo (8. Juni 2008 um 17:31)

  • Programmiersprachen haben praktisch sehr wenig bis gar keinen Einfluss auf die Geschwindigkeit einer Software.

    Naja, bei Java gehts ja nicht nur um die Programmiersprache, sondern um eine ganze Umgebung (Programmiersprache+Compiler+VM). Und die Umgebung kann sehrwohl einen Einfluss haben, siehe zB die lahme Krücke namens QuickBasic.

    Zitat

    Und wenn doch, dann würde ich jede Zeile Code in hochoptimiertem Assembler schreiben.

    Das ist heutzutage gar nicht mehr so einfach, da du auch so Dinge wie Caches, OoO und die Anzahl der processing Units eines bestimmten Typs berücksichtigen musst. Da kanns schon passieren, dass ein C/C++-Compiler (speziell die der Prozessorhersteller selber) dir effizienteren Code ausspucken, als du selber schreiben würdest.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Naja, bei Java gehts ja nicht nur um die Programmiersprache, sondern um eine ganze Umgebung (Programmiersprache+Compiler+VM).

    Stephe hat aber ganz deutlich von der Sprache Java gesprochen, nicht von der Plattform:

    Zitat von Stephe


    Java ist bewiesenermaßen langsamer als so manch andere Sprache, aber egal.

    Ich weiss natuerlich wie er es gemeint hat: Darum hatte ich dann auch gleich meine Meinung zu gängigen Java Compilern und VMs dazu geschrieben.


    Das ist heutzutage gar nicht mehr so einfach, da du auch so Dinge wie Caches, OoO und die Anzahl der processing Units eines bestimmten Typs berücksichtigen musst. Da kanns schon passieren, dass ein C/C++-Compiler (speziell die der Prozessorhersteller selber) dir effizienteren Code ausspucken, als du selber schreiben würdest.

    Sicher musst du für hoch optimierten Assemblercode sehr viel Zeit investieren. Aber Du musst ja auch viel mehr Zeit in dein C++ Programm investieren als in dein Java Programm, und in Dein Java Programm mehr als in Dein Ruby Programm. Ich sage nur das wenn Geschwindigkeit das kritische Kriterium ist, dann musst Du halt in den sauren Apfel beißen und andere Dinge vernachlässigen.

    In Wirklichkeit ist "schnell" natürlich meistens viel weniger interessant als "funktionell","günstig" oder "sicher". Und die meisten tatsächlichen Geschwindigkeitsprobleme hängen nicht einmal mit dem Compiler zusammen, sondern die Bottlenecks liegen im Algorithmus. Noch dazu beschränken die Geschwindigkeitsprobleme in der Regel auf weniger als 5% der Codebasis.

    Womit wir wieder bei OptimizeLater wären. Schreib das Zeug in der abstraktesten Sprache die Du kennst. Und wenn Du dann die Performance unzureichend ist - Dann such dir mit einem Profiler die 2% vom Code die ganze Performance versauen und lager die in gut optimierten C Code aus.


    PS: Ich kriege Moriarty's Empire am Mac/Java 5 leider nicht zum Laufen: Schwarzer Screen. Unter Linux/Java 6 laeuft es aber ganz prima ( und macht auch Spass! ).

    lg, Benjamin Ferrari, bookworm.at

    2 Mal editiert, zuletzt von a9bejo (8. Juni 2008 um 19:52)

  • PS: Ich kriege Moriarty's Empire am Mac/Java 5 leider nicht zum Laufen: Schwarzer Screen. Unter Linux/Java 6 laeuft es aber ganz prima ( und macht auch Spass! ).

    Das Spiel funktioniert nur auf ATI- und Nvidia-Grafikkarten, diese GMA-Chips reichen nicht (ist auch eine Verarschung, was die unter OpenGL-Support verstehen). Vielleicht liegt da das Problem? Das ganze Spiel ist nämlich auf einem Mac entwickelt worden, sollte also da auch gehen.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!