MIDP: Music and Sound Jussi Pohjolainen Tampere University of Applied Sciences
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 = file format! – MP3, AIFF, WAF etc.
• Content types are specified 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.
Different content types
• Wave audio files: – audio/x-‐wav
• AU audio files: – audio/basic
• MP3 audio files: – audio/mpeg
• MIDI files: – audio/midi
• hHp://www.iana.org/assignments/media-‐types/
Audio Data Path
Audio Data DataSource Player
[ speaker ]
For example: applause.wav
Handles transporEng the data to the player
Interface in javax.microediEon. media
RelaEonship between classes
DataSource Player
Manager
Control
Controllers can control tone and volume
Manager creates a player with certain content types and protocols
creates
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, file, 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 specific to the content type of the data.
• Manager provides access to an implementaEon specific mechanism for construcEng Players.
• For convenience, Manager also provides a simplified method to generate simple tones.
Supported Protocols and Content types
• To find 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 hasn't tried to find 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
Player States
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 file. – 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);
OpEonal APIs
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 device's locaEon (GPS) • Tutorial – hHp://developers.sun.com/mobility/apis/arEcles/locaEon/
Mobile InternaEonalizaEon API (JSR 238)
• This JSR defines 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