在 cordova-plugin-media 的基础上修改的插件
2018-11-13 在停止录制音频的方法里,添加了返回 duration 的功能。 注意:在stopRecorder之后不要马上调用 release 方法,不然会导致资源释放获取不到duration。
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);
}
cordova plugin add cordova-plugin-media
- Android
- BlackBerry 10
- iOS
- Windows Phone 7 and 8
- Tizen
- Windows 8
- Windows
- Browser
-
Only one media file can be played back at a time.
-
There are strict restrictions on how your application interacts with other media. See the Microsoft documentation for details.
var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);
-
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)
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;
-
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.release
: Releases the underlying operating system's audio resources. -
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.
-
position: The position within the audio playback, in seconds.
- Not automatically updated during play; call
getCurrentPosition
to update.
- Not automatically updated during play; call
-
duration: The duration of the media, in seconds.
Returns the current position within an audio file. Also updates the Media
object's position
parameter.
media.getCurrentPosition(mediaSuccess, [mediaError]);
-
mediaSuccess: The callback that is passed the current position in seconds.
-
mediaError: (Optional) The callback to execute if an error occurs.
// Audio player
//
var my_media = new Media(src, onSuccess, onError);
// Update media position every second
var mediaTimer = setInterval(function () {
// get media position
my_media.getCurrentPosition(
// success callback
function (position) {
if (position > -1) {
console.log((position) + " sec");
}
},
// error callback
function (e) {
console.log("Error getting pos=" + e);
}
);
}, 1000);
Returns the duration of an audio file in seconds. If the duration is unknown, it returns a value of -1.
media.getDuration();
// Audio player
//
var my_media = new Media(src, onSuccess, onError);
// Get duration
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);
Pauses playing an audio file.
media.pause();
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media(url,
// success callback
function () { console.log("playAudio():Audio Success"); },
// error callback
function (err) { console.log("playAudio():Audio Error: " + err); }
);
// Play audio
my_media.play();
// Pause after 10 seconds
setTimeout(function () {
media.pause();
}, 10000);
}
Starts or resumes playing an audio file.
media.play();
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media(url,
// success callback
function () {
console.log("playAudio():Audio Success");
},
// error callback
function (err) {
console.log("playAudio():Audio Error: " + err);
}
);
// Play audio
my_media.play();
}
-
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 totrue
(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 : false })
-
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'sdocuments/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
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();
// Audio player
//
var my_media = new Media(src, onSuccess, onError);
my_media.play();
my_media.stop();
my_media.release();
Sets the current position within an audio file.
media.seekTo(milliseconds);
- milliseconds: The position to set the playback position within the audio, in milliseconds.
// Audio player
//
var my_media = new Media(src, onSuccess, onError);
my_media.play();
// SeekTo to 10 seconds after 5 seconds
setTimeout(function() {
my_media.seekTo(10000);
}, 5000);
- Not supported on BlackBerry OS 5 devices.
Set the volume for an audio file.
media.setVolume(volume);
- volume: The volume to set for playback. The value must be within the range of 0.0 to 1.0.
- Android
- iOS
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media(url,
// success callback
function() {
console.log("playAudio():Audio Success");
},
// error callback
function(err) {
console.log("playAudio():Audio Error: "+err);
});
// Play audio
my_media.play();
// Mute volume after 2 seconds
setTimeout(function() {
my_media.setVolume('0.0');
}, 2000);
// Set volume to 1.0 after 5 seconds
setTimeout(function() {
my_media.setVolume('1.0');
}, 5000);
}
Starts recording an audio file.
media.startRecord();
- Android
- iOS
- Windows Phone 7 and 8
- Windows
// Record audio
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// success callback
function() {
console.log("recordAudio():Audio Success");
},
// error callback
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
// Record audio
mediaRec.startRecord();
}
- Android devices record audio in Adaptive Multi-Rate format. The specified file should end with a .amr 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 only records to files of type .wav 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 theFile
API usingLocalFileSystem.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")
-
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 usingLocalFileSystem.TEMPORARY
or 'ms-appdata:///temp/' URI. -
Any subdirectory specified at record time must already exist.
- Not supported on Tizen devices.
Stops playing an audio file.
media.stop();
// Play audio
//
function playAudio(url) {
// Play the audio file at url
var my_media = new Media(url,
// success callback
function() {
console.log("playAudio():Audio Success");
},
// error callback
function(err) {
console.log("playAudio():Audio Error: "+err);
}
);
// Play audio
my_media.play();
// Pause after 10 seconds
setTimeout(function() {
my_media.stop();
}, 10000);
}
Stops recording an audio file.
media.stopRecord();
- Android
- iOS
- Windows Phone 7 and 8
- Windows
// Record audio
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// success callback
function() {
console.log("recordAudio():Audio Success");
},
// error callback
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
}
);
// Record audio
mediaRec.startRecord();
// Stop recording after 10 seconds
setTimeout(function() {
mediaRec.stopRecord();
}, 10000);
}
- Not supported on Tizen devices.
A MediaError
object is returned to the mediaError
callback
function when an error occurs.
-
code: One of the predefined error codes listed below.
-
message: An error message describing the details of the error.
-
MediaError.MEDIA_ERR_ABORTED
= 1 -
MediaError.MEDIA_ERR_NETWORK
= 2 -
MediaError.MEDIA_ERR_DECODE
= 3 -
MediaError.MEDIA_ERR_NONE_SUPPORTED
= 4