MIDP: Music and Sound Jussi Pohjolainen Tampere University of Applied Sciences
Sound and Music, the Basics • MIDP 2.0 includes basic audio capabiliEes • Media API in MIDP 2.0 is a subset of the MMAPI (Mobile Media API). – MMAPI: hHp://jcp.org/en/jsr/detail?id=135 • Subset of the MMAPI that is included in MIDP 2.0 is called Audio Building Block (ABB). – Features: Playing simple tones and sampled audio • Media API can also be used as playing all kinds of media, for example movies.
MIDP 2.0 Media Concepts • Audio data comes in variety of content types. • Content type = ﬁle format! – MP3, AIFF, WAF etc. • Content types are speciﬁed using MIME types, which use a string to specify a 1) primary and 2) secondary type. – Example: "audio/x-‐wav" • Content type tells how to translate bits into sound.
Audio Data Path For example: Handles Interface in applause.wa transporEng the javax.microediEon. data to the v media player Audio DataSource Player Data [ speaker ]
RelaEonship between classes Manager creates a player with certain content types and protocols Manager creates DataSource Player Controllers can control tone and volume Control
Supported Content Types and Protocols • MIDP 2.0 spec: if sampled audio is supported at all, then 8-‐bit PCM WAV must be supported. – WAV is guaranteed.. your mobile phone can support other content types, for example mp3. • It is possible to ask (runEme) from Manager which content types and protocols it can handle. • Protocol, for example: hCp, ﬁle, capture.
Manager-‐class • javac.microedition.media.Manager is the access point for obtaining system dependent resources such as Players for mulEmedia processing. • A Player is an object used to control and render media that is speciﬁc to the content type of the data. • Manager provides access to an implementaEon speciﬁc mechanism for construcEng Players. • For convenience, Manager also provides a simpliﬁed method to generate simple tones.
Supported Protocols and Content types • To ﬁnd out at runEme what content types and protocols are supported: – Manager-‐class • public static String getSupportedContentTypes(String protocol)! • public static String getSupportedProtocols(String content_type)!• See example: MediaInformaEonMIDlet.java
Player Life Cycle • Player has detailed life cycle • Life cycle has states: – UNREALIZED • Player is created, but it hasnt tried to ﬁnd audio data. – REALIZED • Media data is located. – PREFETCHED • Audio data is fetched and ready to go – STARTED • Audio data is playing – CLOSED • All resources are released
CreaEng a Player • Player is created using by Manager class • public static Player createPlayer(InputStream stream, String type)!• Example • Player player = Manager.createPlayer(...);!• Parameters – Stream to the data ﬁle. – String type = content type, example: "audio/x-‐ wav"
Example of creaEng Player instance • Example • InputStream in = getClass().getResourceAsStream("/ relax.wav");! • Player player = Manager.createPlayer(in, "audio/x-wav");!• ExcepEon handling is necessary, use try catch. • Example: SimpleGameWithSounds.java – (Maybe the most irritaEng game of all Eme)
Controlling Players • Player has following methods that control played sound: – setMediaTime(long now) -‐ jump directly to parEcular point in an audio clip – setLoopCount(int count) -‐ loop
Player Controls • Control classes can control Players • You can obtain a list of Controls for a Player by calling getControls(). • MIDP 2.0 has only two Controls for the Player: – VolumeControl – ToneControl!• Example of usage: – VolumeControl vc = (VolumeControl) player.getControl("VolumeControl");! – vc.setLevel(50);
Mobile Media API (JSR 135) • Playing sounds and tones • Also capturing media – MMAPI supports capturing audio and video from onboard hardware – Recording sound, video and taking pictures • hHp://today.java.net/pub/a/today/ 2005/09/27/j2me4.html
Wireless Messaging API (JSR 205) • Common API for sending and receiving text and binary messages. • hHp://developers.sun.com/mobility/midp/ arEcles/wma/
Bluetooth API (JSR 82) • ConnecEng via Bluetooth • Tutorial – hHp://developers.sun.com/mobility/midp/ arEcles/bluetooth2/
JAXP XML Parser (JSR 172) • This JSR is designed to provide a general purpose XML API for the next generaEon of mobile devices • Supports – SAX 2 event handler-‐based parsing
LocaEon API (JSR 179) • Enables developers to write mobile locaEon-‐ based applicaEons for resource-‐limited devices • Determining devices locaEon (GPS) • Tutorial – hHp://developers.sun.com/mobility/apis/ arEcles/locaEon/
Mobile InternaEonalizaEon API (JSR 238) • This JSR deﬁnes an API that provides culturally correct data formakng, sorEng of text strings and applicaEon resource processing for J2ME MIDlets running in MIDP over CLDC. • Tutorial – hHp://www.ibm.com/developerworks/wireless/ library/wi-‐midapi/
Scalable 2D Vector Graphics API for J2ME (JSR 226) • Scalable 2D Vector Graphics API for J2ME (JSR 226) provides MIDlets with an API for displaying SVG content. • Tutorial – hHp://developers.sun.com/mobility/midp/ arEcles/s2dvg/index.html