# mp3 datei in j2me abspielen



## Knexi (21. Dez 2010)

Hallo,

wie kann ich eine .mp3 Daten in ein Java Projekt hinzufügen und diese abspielen?

Danke im Vorraus

MfG Knexi


----------



## patrick-ratz (23. Dez 2010)

geh nochmal zurück und such nach dem POST: Wichtig: Vor dem ersten Posten bitte lesen!

und dannach kickst du das Erste an J2ME Codebeispiele / anklicken LESEN


----------



## The_S (27. Dez 2010)

Das ist aber keine 100pro befriedigende Antwort  . JA, es geht, aber NUR wenn das Handy das unterstützt.


----------



## Knexi (28. Dez 2010)

Die Codebeispiele habe ich natürlich schon probiert.
Was muss ich abändern um im Player eine mp3 statt einer wav abzuspielen? Denn eine wav datei bläst das jar file natürlich viel mehr auf und gibt es ein Größenlimit für .jar Dateien?
Außerdem bin ich natürlich auf der Suche nach einer Methode die auf möglichst vielen Handys funktioniert.

So stehts im guide:

```
try {
      Player player = Manager.createPlayer(getClass().getResourceAsStream("/b.wav"), "audio/x-wav");
      player.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
```

und so sieht meine Abänderung auf mp3 aus die aber nicht funktioniert:

```
try {
      Player player = Manager.createPlayer(getClass().getResourceAsStream("Dateiname.mp3"), "audio/mpeg");
      player.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
```

MfG Knexi


----------



## The_S (29. Dez 2010)

Dein Beispiel passt. "Geht nicht" ist immer eine sehr dämliche Aussage. Du musst schon sagen WAS genau nicht funktioniert, wie du feststellst, dass es nicht funktioniert, was stattdessen passiert, und/oder eine Fehlermeldung. Sicher, dass der Pfad passt? "Dateiname.mp3" und nicht "/Dateiname.mp3"?

Midi können so ziemlich alle Geräte abspielen - allerdings in recht unterschiedlichen Qualitäten. Wenn du wirklich professionell für mehrere/viele Geräte programmieren willst, wirst du nicht drum rum kommen, für jedes Gerät oder zumindest jede "Gerätegruppe" ein eigenes JAR zu erstellen.


----------



## Knexi (29. Dez 2010)

The_S hat gesagt.:


> Dein Beispiel passt. "Geht nicht" ist immer eine sehr dämliche Aussage. Du musst schon sagen WAS genau nicht funktioniert, wie du feststellst, dass es nicht funktioniert, was stattdessen passiert, und/oder eine Fehlermeldung.


Auf dem virtuellen Handy in der Programmierumgebung verschwindet beim starten der app plötzlich das virtuelle handy und es tut sich gar nichts - kein fehler etc. 
Beim ausführen auf meinem Handy kommt folgender Fehler: Java-Fehler, unzulässiges Format
Die MIDP und CLDC Version stimmen jedoch.




The_S hat gesagt.:


> Sicher, dass der Pfad passt? "Dateiname.mp3" und nicht "/Dateiname.mp3"?


hatte den Pfad mit / war nur ein Tippfehler


MfG Knexi


----------



## The_S (29. Dez 2010)

Auch keine Fehlermeldung auf der Konsole? Welches SDK/WTK verwendest du? Das ist ein sehr ungewöhnliches Problem.

Evtl. unterstützt dein Handy das Format ja nicht!?


----------



## Knexi (29. Dez 2010)

The_S hat gesagt.:


> Auch keine Fehlermeldung auf der Konsole? Welches SDK/WTK verwendest du? Das ist ein sehr ungewöhnliches Problem.


Ich verwende Java Netbeans 6.5.1
Es kommt überhaupt keine Fehlermeldung weder beim builden noch beim debuggen. Nur das virtuelle Handy verschwindet beim starten der app.



The_S hat gesagt.:


> Evtl. unterstützt dein Handy das Format ja nicht!?


Da das Handy mp3 dateien im eigenen musikplayer unterstützt glaube ich nicth, dass mit einer selbst geschriebenen java app dies plötzlich nicht mehr funktioniert. Mein Handy ist ein Samsung ST-5230


MfG Knexi


----------



## The_S (30. Dez 2010)

Knexi hat gesagt.:


> Ich verwende Java Netbeans 6.5.1
> Es kommt überhaupt keine Fehlermeldung weder beim builden noch beim debuggen. Nur das virtuelle Handy verschwindet beim starten der app.



Schwer vorstellbar. Poste doch mal den kompletten Inhalt der NetBeans-Konsole (inkl. aller Build- und Startlogs). Trotzdem bleibt die Frage nach dem WTK/SDK offen. NetBeans ist ja nur die IDE.



Knexi hat gesagt.:


> Da das Handy mp3 dateien im eigenen musikplayer unterstützt glaube ich nicth, dass mit einer selbst geschriebenen java app dies plötzlich nicht mehr funktioniert. Mein Handy ist ein Samsung ST-5230



Kann ich jetzt aus dem Stegreif nicht sagen, aber ja, scheint so als könnte das Handy mp3 abspielen. Mach doch mal ein gigantisches try-catch um deinen Code, fange alles ab was geht und gebe dann die Fehlermeldung bspw. auf einem Alert aus.


----------



## Knexi (30. Dez 2010)

The_S hat gesagt.:


> Schwer vorstellbar. Poste doch mal den kompletten Inhalt der NetBeans-Konsole (inkl. aller Build- und Startlogs). Trotzdem bleibt die Frage nach dem WTK/SDK offen. NetBeans ist ja nur die IDE.


*Das SDK müsste das jdk1.6.0_13 von sun sein und WTK J2ME. Hoffe das ist so richtig.

Hier der gesamte Konsoleninhalt:*
pre-init:
pre-load-properties:
exists.config.active:
exists.netbeans.user:
exists.user.properties.file:
load-properties:
exists.platform.active:
exists.platform.configuration:
exists.platform.profile:
basic-init:
cldc-pre-init:
cldc-init:
cdc-init:
ricoh-pre-init:
ricoh-init:
semc-pre-init:
semc-init:
savaje-pre-init:
savaje-init:
sjmc-pre-init:
sjmc-init:
nokiaS80-pre-init:
nokiaS80-init:
nsicom-pre-init:
nsicom-init:
bdj-init:
post-init:
init:
conditional-clean-init:
conditional-clean:
deps-jar:
pre-preprocess:
do-preprocess:
Pre-processing 0 file(s) into D:\sound_mp3_new\build\preprocessed directory.
post-preprocess:
preprocess:
pre-compile:
extract-libs:
do-compile:
post-compile:
compile:
pre-obfuscate:
proguard-init:
skip-obfuscation:
proguard:
post-obfuscate:
obfuscate:
pre-preverify:
do-preverify:
Preverifying 1 file(s) into D:\sound_mp3_new\build\preverified directory.
post-preverify:
preverify:
pre-jar:
set-password-init:
set-keystore-password:
set-alias-password:
set-password:
create-jad:
add-configuration:
add-profile:
do-extra-libs:
nokiaS80-prepare-j9:
nokiaS80-prepare-manifest:
nokiaS80-prepare-manifest-no-icon:
nokiaS80-create-manifest:
semc-build-j9:
do-jar:
Building jar: D:\sound_mp3_new\dist\sound_mp3_new.jar
nsicom-create-manifest:
do-jar-no-manifest:
bdj-build-image:
update-jad:
Updating application descriptor: D:\sound_mp3_new\dist\sound_mp3_new.jad
Generated "D:\sound_mp3_new\dist\sound_mp3_new.jar" is 6453374 bytes.
ricoh-init-dalp:
ricoh-add-app-icon:
ricoh-build-dalp-with-icon:
ricoh-build-dalp-without-icon:
ricoh-build-dalp:
savaje-prepare-icon:
savaje-build-jnlp:
post-jar:
jar:
pre-run:
cldc-run:
Copying 1 file to D:\sound_mp3_new\dist\nbrun837399763331032942
Copying 1 file to D:\sound_mp3_new\dist\nbrun837399763331032942
Jad URL for OTA execution: http://localhost:8082/servlet/org.n...vlet/D:/sound_mp3_new/dist//sound_mp3_new.jad
Starting emulator in execution mode
Running with storage root C:\Users\Knexi\j2mewtk\2.5.2\appdb\DefaultColorPhone
Running with locale: German_Austria.1252
Running in the identified_third_party security domain
java.lang.OutOfMemoryError
Execution completed.
3412231 bytecodes executed
410 thread switches
1668 classes in the system (including system classes)
17789 dynamic objects allocated (536280 bytes)
3 garbage collections (468492 bytes collected)
ricoh-run:
semc-icon-assembly:
semc-ppro-emulator:
semc-do-run:
semc-run:
savaje-run:
sjmc-run:
nokiaS80-run:
nsicom-run:
bdj-run:
run:
BUILD SUCCESSFUL (total time: 15 seconds)



*Meiner Meinung nach steht dort nichts brauchbares.*




The_S hat gesagt.:


> Kann ich jetzt aus dem Stegreif nicht sagen, aber ja, scheint so als könnte das Handy mp3 abspielen. Mach doch mal ein gigantisches try-catch um deinen Code, fange alles ab was geht und gebe dann die Fehlermeldung bspw. auf einem Alert aus.



Da das Projekt (reines Projekt zum testen vom sound um anderes auszuschließen) nur aus den 2 Zeilen besteht und um diese Zeilen herum bereits eine Exception ist habe ich das bereits erledigt:


```
try {
      Player player = Manager.createPlayer(getClass().getResourceAsStream("/01-papa_roach-burn.mp3"), "audio/mp3");
      player.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
```

Hoffe das ist so richtig da meine Programmiererfahrung in Java praktisch fast 0 ist 
Habe zwar Programmiererfahrung und somit auf Erfahrung mit Exceptions in C# oder C++ aber noch nicht bzw kaum in Java.


MfG Knexi


----------



## The_S (3. Jan 2011)

Hm, du verwendest das WTK 2.5 in Kombi mit NetBeans. Sehe da jetzt auch nichts besonderes, außer den OutOfMemoryError. Bekommst du ein HelloWorld denn zum Laufen? Schon mal versucht das ganze von Hand zu kompilieren/auszuführen?


----------



## Knexi (3. Jan 2011)

Erstmal einen generellen Dank für deine Bemühungen



The_S hat gesagt.:


> Hm, du verwendest das WTK 2.5 in Kombi mit NetBeans. Sehe da jetzt auch nichts besonderes, außer den OutOfMemoryError. Bekommst du ein HelloWorld denn zum Laufen?


Andere Programme funktionieren alle ohne Probleme.



The_S hat gesagt.:


> Schon mal versucht das ganze von Hand zu kompilieren/auszuführen?



 Von Hand zu kompilieren hab ich noch net probiert. Wie macht man das?




MfG Knexi


----------



## The_S (4. Jan 2011)

Eine Anleitung gibts hier: Java Blog Buch : 21.02 JAR, JAD und Proguard


----------



## Knexi (11. Jan 2011)

Habe nun erstmal versucht das Programm auf .wav abzuändern, leider ohne Erfolg. Aber immerhin wirft er nun eine exception. Könnte es vielleicht etwas damit zu tun haben dass die sound datei zu groß ist und somit ohne buffern die musikdatei nicht sauber abgespielt werden kann und dadurch die app gar nicht erst startet?
Ist es jetzt eigentlich nur für den Testfall möglich den code unten einfach unter startApp hineinzukopieren oder muss irgendetwas vom codeteil im Konstruktor oder der Klasse stehen?

Es könnte auch sein dass ich vergessen habe eine Klasse oder ein Paket zu importieren
Reichen folgende imports?

```
import javax.microedition.midlet.*;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import java.io.InputStream;
```
Oder bringt es vielleicht was das java SDK3.0 zu laden?

*Der code sieht im Moment so aus:*

```
public void startApp() {
         try {
      Player player = Manager.createPlayer(getClass().getResourceAsStream("/01-papa_roach-burn.wav"), "audio/x-wav");
      player.start();
    } catch (Exception e) {
      e.printStackTrace();
    }
```


*Beim Ausführen kommt nun folgendes:*

Starting emulator in execution mode
Running with storage root C:\Users\Knexi\j2mewtk\2.5.2\appdb\DefaultColorPhone
Running with locale: German_Austria.1252
Running in the identified_third_party security domain
New version Java(TM) Platform Micro Edition SDK 3.0 is available at: Download Java Platform Micro Edition Software Development Kit 3.0 for Windows RR
java.lang.IllegalArgumentException
        at javax.microedition.media.Manager.createPlayer(Manager.java:726)
        at wav_demo.startApp(wav_demo.java:16)
        at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:44)
        at com.sun.midp.midlet.Scheduler.schedule(+270)
        at com.sun.midp.main.Main.runLocalClass(+28)
        at com.sun.midp.main.Main.main(+80)
Execution completed.







MfG Knexi


----------



## The_S (12. Jan 2011)

Wie gesagt, du erhälst ja schon weiter oben irgendwo einen OutOfMemoryError. Also zu wenig Speicher verfügbar. Und dann haben die meisten Mobiltelefone auch noch eine Obergrenze für die JAR-Datei-Größe.


----------



## Knexi (12. Jan 2011)

Danke für deine Hilfe mit einer kleineren .wav datei hats super funktioniert. Weist du zufälligs das ungefähre größenlimit für .jar dateien? 



MfG Knexi


----------



## The_S (13. Jan 2011)

Hängt vom Handy ab. Reicht von einigen KB bis hin zu mehreren MB.


----------

