Durchbruch el grande

Juhuuuuu, endlich habe ich das größte Problem beseitigen können, daß ich noch hatte: Nämlich die Audio-Aufnahme innerhalb meines Java-Programmes auf dem Handheld. Dabei hat sich gleich ein weiteres kleines Problem miterledigt, das der mp3-Wiedergabe….

Wir erinnern uns: Bisher war ich bei J2ME, der Java-Edition für Mobilgeräte, immer von der sogenannten “Mobile Media API” abhängig; das ist eine optionale Bibliothek, die die notwendige Funktionalität mitbringt, um auf Mobilgeräten Audio-Daten aufzunehmen und auch komplexere Dinge als Wave-Files wiederzugeben.

Da auf dem Handheld, für das ich meinen Prototypen entwickle, keine virtuelle Maschine für Java-Programme vorinstalliert war, mußte ich mich notgedrungen nach einer kommerziellen Alternative umsehen. Gefunden habe ich diese zwar, aber entweder vertreiben die nur relativ “nackte” VMs ohne jedwede optionalen APIs oder sie ist für Einzelnutzer (und auch für Universitätsinstitute!) nicht zu bekommen.

Mein Betreuer ist zwar noch dran, aber ich sah nur noch minimale Chancen, eine MMAPI an Land zu ziehen, weswegen ich mich in den letzten eineinhalb Wochen verstärkt in die letzte Möglichkeit eingearbeitet habe: Das Schreiben einer dynamischen Bibliothek (DLL) in einer hardwarenahen Programmiersprache, um die Funktionen darin dann aus Java per Native Interface (JNI) heraus anzusprechen. Da ich die meiste Ahnung noch von C++ habe, entschied ich mich für diesen Weg.

Ich trieb mich dann stundenlang vor allem auf dem MSDN herum, um mich in die Materie einzuarbeiten. Microsoft deswegen, weil der Prototyp für “Windows Mobile” entwickelt wird, und die ein freies Tool zur Programmierung für diese Geräte bereitstellen – das “eMbedded Visual C++ 4.0”. Dieses zog ich mir dann auch sogleich gemeinsam mit dem Service Pack 4 (!) für eVC4, einem SDK für den PocketPC und noch zwei weiteren optionalen Paketen mit Emulatorbildchen und weiteren Tools. Hier könnt Ihr sehen, was Ihr braucht, wenn Ihr auch für Handhelds oder Smartphones mit Windows Mobile entwickeln wollt. 😉

Zuletzt schaute ich mich noch nach einer Bibliothek um, die sich mit dem Thema Audio befasst. Natürlich kann man auch schon mit den Standard-Bibliotheken Audio-Programme entwickeln, aber eine fremde Bibliothek hat verschiedene Vorteile. Zum einen fungiert sie sozusagen als eine Art Puffer oder “User Interface” 😉 zwischen C++ und dem Programmierer. Die Entwickler einer solchen Bibliothek haben schon die grundlegendsten Klippen umschifft und stellen recht abstrakte Funktionen zur Verfügung, mit denen man schnell zum Ziel kommt. Der zweite Vorteil ist, daß solche Bibliotheken oftmals eine gute Dokumentation und vielleicht sogar Tutorials mitbringen. Im Idealfall gibt es dann noch eine aktive Community.

Zuerst stieß ich auf SDL, eine Bibliothek zur Spieleprogrammierung. Die wird sehr häufig genutzt und sieht auch wirklich bombastisch aus. Allerdings würde bei der Nutzung dieser Bibliothek sehr viel Overhead anfallen, da dort auch Funktionen zur 3D- und sonstiger Grafik-Programmierung sowie zahlreicher anderer Kram, der eben bei der Spieleprogrammierung notwendig ist, enthalten ist. Wär eine schöne Kanone für meinen Spatz gewesen, aber dann doch lieber was Kleineres…

Nach weiterem Suchen stieß ich dann auf FMOD (deutsche Webseite), und das war genau das, was ich suchte. 🙂 Eine kleine, aber feine Bibliothek mit dem Thema Audio. Die zugehörige Webseite ist ebenfalls sehr gut, und liefert Dokumentation, Tutorials und ein aktives Forum. Letzteres war aber gar nicht notwendig: Innerhalb vergleichsweise kurzer Zeit habe ich eine DLL basteln können, die ich auf dem Handheld aus Java heraus ansprechen konnte und die mir drei Sekunden Gelaber aufgenommen und wiedergegeben hat. 😉 Zusätzlich klappte auch die Wiedergabe eines mp3-Files. 🙂

Fazit: Viel (über eine Woche) Such- und Entwicklungszeit für vielleicht dreissig Zeilen Source-Code. Aber wenigstens bin ich um eine Sorge ärmer. 😉

3 Kommentare

  • hunique schrieb:

    hi,

    beschäftige mich ebenfalls bzgl. diplomarbeit mit j2me. hab allerdings bis jetzt nur ne grobe idee im kopf (ohne anwendungsszenario). das playback von mp3-streams auf entsprechend fähigen handys mittels der mmapi sollte doch keine probleme machen, oder ist die mmapi nur dafür geeignet den stream an einen nativen handy-mp3-player weiterzugeben? hab dazu irgendwie widersprüchliche kommentare im netz gelesen.

    wäre schön vielleicht per mail von dir zu hören. ansonsten an gleicher stelle. besten gruss.

  • Wenn die MMAPI auf den Handies vorinstalliert ist, ist das absolut kein Problem, denke ich. 🙂 Sicherheitshalber solltest Du hier mal schauen, welche Handies die MMAPI unterstützen und welche nicht.

    http://www.j2mepolish.org/devices/devices-mmapi.html

    Wie das jetzt intern in der MMAPI realisiert ist, ob das an einen Handy-mp3-Player geht oder ob die MMAPI selbst das mp3 wiedergibt, ist sicher auch von Implementation zu Implementation unterschiedlich, was die widersprüchlichen Infos erklären dürfte.

  • Nachdem ich im letzten Artikel berichtet hatte, daß sich das letzte große Problem erledigt hatte, konnte ich mich beruhigt wieder daran machen, das Programm weiter zu implementieren. Wir erinnern uns: Dadurch, daß ich jetzt JNI zur Sound-Aufnahme und –

Schreibe einen Kommentar

Deine E-Mail-Adresse wird niemals weitergegeben.Erforderliche Felder sind mit einem * markiert.