title: Media
description: Record and play audio on the device.
cordova-plugin-media
This plugin provides the ability to record and play back audio files on a device.
NOTE: The current implementation does not adhere to a W3C
specification for media capture, and is provided for convenience only.
A future implementation will adhere to the latest W3C specification
and may deprecate the current APIs.
This plugin defines a global Media
Constructor.
Although in the global scope, it is not available until after the deviceready
event.
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log(Media);
}
Report issues with this plugin on the Apache Cordova issue tracker
Installation
cordova plugin add cordova-plugin-media
Supported Platforms
- Android
- BlackBerry 10
- iOS
- Windows Phone 7 and 8
- Tizen
- Windows 8
- Windows
- Browser
Windows Phone Quirks
- Only one media file can be played back at a time.
Media
var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);
Parameters
-
src: A URI containing the audio content. (DOMString)
-
mediaSuccess: (Optional) The callback that executes after a Media
object has completed the current play, record, or stop action. (Function)
-
mediaError: (Optional) The callback that executes if an error occurs. (Function)
-
mediaStatus: (Optional) The callback that executes to indicate status changes. (Function)
NOTE: cdvfile
path is supported as src
parameter:
var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);
Constants
The following constants are reported as the only parameter to the
mediaStatus
callback:
Media.MEDIA_NONE
= 0;
Media.MEDIA_STARTING
= 1;
Media.MEDIA_RUNNING
= 2;
Media.MEDIA_PAUSED
= 3;
Media.MEDIA_STOPPED
= 4;
Methods
-
media.getCurrentAmplitude
: Returns the current position within an audio file.
-
media.getCurrentPosition
: Returns the current position within an audio file.
-
media.getDuration
: Returns the duration of an audio file.
-
media.play
: Start or resume playing an audio file.
-
media.pause
: Pause playback of an audio file.
-
media.pauseRecord
: Pause recording of an audio file.
-
media.release
: Releases the underlying operating system's audio resources.
-
media.resumeRecord
: Resume recording of an audio file.
-
media.seekTo
: Moves the position within the audio file.
-
media.setVolume
: Set the volume for audio playback.
-
media.startRecord
: Start recording an audio file.
-
media.stopRecord
: Stop recording an audio file.
-
media.stop
: Stop playing an audio file.
Additional ReadOnly Parameters
-
position: The position within the audio playback, in seconds.
- Not automatically updated during play; call
getCurrentPosition
to update.
-
duration: The duration of the media, in seconds.
media.getCurrentAmplitude
Returns the current amplitude of the current recording.
media.getCurrentAmplitude(mediaSuccess, [mediaError]);
Supported Platforms
Parameters
Quick Example
var my_media = new Media(src, onSuccess, onError);
my_media.startRecord();
mediaTimer = setInterval(function () {
my_media.getCurrentAmplitude(
function (amp) {
console.log(amp + "%");
},
function (e) {
console.log("Error getting amp=" + e);
}
);
}, 1000);
media.getCurrentPosition
Returns the current position within an audio file. Also updates the Media
object's position
parameter.
media.getCurrentPosition(mediaSuccess, [mediaError]);
Parameters
Quick Example
var my_media = new Media(src, onSuccess, onError);
var mediaTimer = setInterval(function () {
my_media.getCurrentPosition(
function (position) {
if (position > -1) {
console.log((position) + " sec");
}
},
function (e) {
console.log("Error getting pos=" + e);
}
);
}, 1000);
media.getDuration
Returns the duration of an audio file in seconds. If the duration is unknown, it returns a value of -1.
media.getDuration();
Quick Example
var my_media = new Media(src, onSuccess, onError);
var counter = 0;
var timerDur = setInterval(function() {
counter = counter + 100;
if (counter > 2000) {
clearInterval(timerDur);
}
var dur = my_media.getDuration();
if (dur > 0) {
clearInterval(timerDur);
document.getElementById('audio_duration').innerHTML = (dur) + " sec";
}
}, 100);
media.pause
Pauses playing an audio file.
media.pause();
Quick Example
function playAudio(url) {
var my_media = new Media(url,
function () { console.log("playAudio():Audio Success"); },
function (err) { console.log("playAudio():Audio Error: " + err); }
);
my_media.play();
setTimeout(function () {
my_media.pause();
}, 10000);
}
media.pauseRecord
Pauses recording an audio file.
media.pauseRecord();
Supported Platforms
Quick Example
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
function() {
console.log("recordAudio():Audio Success");
},
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
mediaRec.startRecord();
setTimeout(function() {
mediaRec.pauseRecord();
}, 5000);
}
media.play
Starts or resumes playing an audio file.
media.play();
Quick Example
function playAudio(url) {
var my_media = new Media(url,
function () {
console.log("playAudio():Audio Success");
},
function (err) {
console.log("playAudio():Audio Error: " + err);
}
);
my_media.play();
}
iOS Quirks
-
numberOfLoops: Pass this option to the play
method to specify
the number of times you want the media file to play, e.g.:
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
myMedia.play({ numberOfLoops: 2 })
-
playAudioWhenScreenIsLocked: Pass in this option to the play
method to specify whether you want to allow playback when the screen
is locked. If set to true
(the default value), the state of the
hardware mute button is ignored, e.g.:
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3");
myMedia.play({ playAudioWhenScreenIsLocked : true });
myMedia.setVolume('1.0');
Note: To allow playback with the screen locked or background audio you have to add audio
to UIBackgroundModes
in the info.plist
file. See Apple documentation. Also note that the audio has to be started before going to background.
-
order of file search: When only a file name or simple path is
provided, iOS searches in the www
directory for the file, then in
the application's documents/tmp
directory:
var myMedia = new Media("audio/beer.mp3")
myMedia.play() // first looks for file in www/audio/beer.mp3 then in <application>/documents/tmp/audio/beer.mp3
media.release
Releases the underlying operating system's audio resources.
This is particularly important for Android, since there are a finite amount of
OpenCore instances for media playback. Applications should call the release
function for any Media
resource that is no longer needed.
media.release();
Quick Example
var my_media = new Media(src, onSuccess, onError);
my_media.play();
my_media.stop();
my_media.release();
media.resumeRecord
Resume recording an audio file.
media.resumeRecord();
Supported Platforms
Quick Example
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
function() {
console.log("recordAudio():Audio Success");
},
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
mediaRec.startRecord();
setTimeout(function() {
mediaRec.pauseRecord();
}, 5000);
setTimeout(function() {
mediaRec.resumeRecord();
}, 10000);
}
media.seekTo
Sets the current position within an audio file.
media.seekTo(milliseconds);
Parameters
- milliseconds: The position to set the playback position within the audio, in milliseconds.
Quick Example
var my_media = new Media(src, onSuccess, onError);
my_media.play();
setTimeout(function() {
my_media.seekTo(10000);
}, 5000);
BlackBerry 10 Quirks
- Not supported on BlackBerry OS 5 devices.
media.setVolume
Set the volume for an audio file.
media.setVolume(volume);
Parameters
- volume: The volume to set for playback. The value must be within the range of 0.0 to 1.0.
Supported Platforms
Quick Example
function playAudio(url) {
var my_media = new Media(url,
function() {
console.log("playAudio():Audio Success");
},
function(err) {
console.log("playAudio():Audio Error: "+err);
});
my_media.play();
setTimeout(function() {
my_media.setVolume('0.0');
}, 2000);
setTimeout(function() {
my_media.setVolume('1.0');
}, 5000);
}
media.startRecord
Starts recording an audio file.
media.startRecord();
Supported Platforms
- Android
- iOS
- Windows Phone 7 and 8
- Windows
Quick Example
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
function() {
console.log("recordAudio():Audio Success");
},
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
mediaRec.startRecord();
}
Android Quirks
- Android devices record audio in AAC ADTS file format. The specified file should end with a .aac extension.
- The hardware volume controls are wired up to the media volume while any Media objects are alive. Once the last created Media object has
release()
called on it, the volume controls revert to their default behaviour. The controls are also reset on page navigation, as this releases all Media objects.
iOS Quirks
-
iOS only records to files of type .wav and .m4a and returns an error if the file name extension is not correct.
-
If a full path is not provided, the recording is placed in the application's documents/tmp
directory. This can be accessed via the File
API using LocalFileSystem.TEMPORARY
. Any subdirectory specified at record time must already exist.
-
Files can be recorded and played back using the documents URI:
var myMedia = new Media("documents://beer.mp3")
-
Since iOS 10 it's mandatory to add a NSMicrophoneUsageDescription
entry in the info.plist.
NSMicrophoneUsageDescription
describes the reason that the app accesses the user’s microphone. When the system prompts the user to allow access, this string is displayed as part of the dialog box. To add this entry you can pass the variable MICROPHONE_USAGE_DESCRIPTION
on plugin install.
Example: cordova plugin add cordova-plugin-media --variable MICROPHONE_USAGE_DESCRIPTION="your usage message"
If you don't pass the variable, the plugin will add an empty string as value.
Windows Quirks
-
Windows devices can use MP3, M4A and WMA formats for recorded audio. However in most cases it is not possible to use MP3 for audio recording on Windows Phone 8.1 devices, because an MP3 encoder is not shipped with Windows Phone.
-
If a full path is not provided, the recording is placed in the AppData/temp
directory. This can be accessed via the File
API using LocalFileSystem.TEMPORARY
or ms-appdata:///temp/<filename>
URI.
-
Any subdirectory specified at record time must already exist.
Tizen Quirks
- Not supported on Tizen devices.
media.stop
Stops playing an audio file.
media.stop();
Quick Example
function playAudio(url) {
var my_media = new Media(url,
function() {
console.log("playAudio():Audio Success");
},
function(err) {
console.log("playAudio():Audio Error: "+err);
}
);
my_media.play();
setTimeout(function() {
my_media.stop();
}, 10000);
}
media.stopRecord
Stops recording an audio file.
media.stopRecord();
Supported Platforms
- Android
- iOS
- Windows Phone 7 and 8
- Windows
Quick Example
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
function() {
console.log("recordAudio():Audio Success");
},
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
}
);
mediaRec.startRecord();
setTimeout(function() {
mediaRec.stopRecord();
}, 10000);
}
Tizen Quirks
- Not supported on Tizen devices.
MediaError
A MediaError
object is returned to the mediaError
callback
function when an error occurs.
Properties
Constants
MediaError.MEDIA_ERR_ABORTED
= 1
MediaError.MEDIA_ERR_NETWORK
= 2
MediaError.MEDIA_ERR_DECODE
= 3
MediaError.MEDIA_ERR_NONE_SUPPORTED
= 4