2009-01-23 10 views
5

Was ist der beste Weg, Audio über die J2ME Media-Bibliothek abzuspielen? Zum Beispiel, sollte ich die MMAPI verwenden oder sollte ich nur die PlatformRequest (String s) Methode des Midlets verwenden?Wiedergabe von Audiodateien mit J2ME

+0

Es hängt wirklich davon ab, was Sie tun möchten ... Sie sollten viel genauer sein, was Sie suchen. Wenn Sie einen MP3 abspielen möchten, ist es ziemlich einfach. Wenn Sie Audio über das Internet streamen möchten, ist das nahezu unmöglich. – joeforker

Antwort

3

Von beste, was meinst du? Höchste Qualität? Beste Benutzererfahrung? Meisten Standards?

Im Grunde (das ist nicht die beste Art von Antwort, die ich kenne), hängt es von der Plattform ab - etwas, das ein vertrautes Thema mit J2ME ist - da Implementierungen sehr unterschiedlich sein können und das MMAPI normalerweise native Media Player Software/Hardware nutzt . Auf dem BlackBerry funktioniert das MMAPI gut, mit ein paar Macken.

Mein Rat ist, die MMAPI zu verwenden, wo es gut funktioniert - es wird Ihnen die portabelste Anwendung geben. Experimentieren Sie oder durchsuchen Sie die Entwicklerboards nach Ihrem spezifischen Zielgerät, um zu sehen, wie gut es auf den Mobilteilen funktioniert, die Sie unterstützen möchten.

7

Der folgende Code sollte für 90-95% der Mobiltelefone funktionieren, die JSR-135 unterstützen. Die Reihenfolge der verschiedenen Methodenaufrufe ist der Schlüssel dafür, dass es tragbar ist. Dies ist für lokale Sounds in Ihrem JAR. Alle gestreamten Audio wäre ein anderes Problem insgesamt :)

// loads the InputStream for the sound 
InputStream inputStream = this.getClass().getResourceAsStream(musicFile); 

// create the standard Player 
musicPlayer = Manager.createPlayer(inputStream, musicEncoding); 
musicPlayer.prefetch(); 

// add player listener to access sound events 
musicPlayer.addPlayerListener(this); 

if(loopMusic) 
{  
    // use the loop count method for infinite looping 
    musicPlayer.setLoopCount(-1); 
} 

// The set occurs twice to prevent sound spikes at the very 
// beginning of the sound. 
VolumeControl volumeControl = 
    (VolumeControl) musicPlayer.getControl("VolumeControl"); 
volumeControl.setLevel(curVolume); 

// finally start the piece of music 
musicPlayer.start(); 

// set the volume once more 
volumeControl = (VolumeControl) musicPlayer.getControl("VolumeControl"); 
volumeControl.setLevel(curVolume); 

// finally, delete the input stream to save on resources 
inputStream.close(); 
inputStream = null; 
0

Auf einigen Geräten eine Plattform Anfrage mit verursacht Ihre Anwendung zu schließen und auf andere bestimmte Plattformanforderungen stürzt das Gerät (etwas anderes als HTTP-URLs auf einigen Geräten) .

Sie müssen also möglicherweise beide Ansätze verwenden und anhand der Gerätetests auswählen, welche verwendet werden soll.

-1

Lokales Audio (in Jar-Datei) ist einfacher zu unterstützen, wie in Shanes Antwort oben erklärt. Für Inhalte über das Internet wird es viel schwieriger, da viele Faktoren wie Probleme mit der Serverkonnektivität, der Speicher der Mobilgeräte usw. ins Spiel kommen. Wenn Sie eine große Anzahl von Mobilteilen unterstützen müssen, ist es ratsam, 2-3 Implementierungstechniken zu verwenden und entsprechend zu verwenden.