多媒体插件(音频播放与录制)

该插件主要是用于在设备上录制和播放音频。

该插件提供了一个全局的Media对象,但需要deviceready事件之后才能使用。

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

    console.log(Media);

}

Media

var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);

参数

srcURI包含音频内容。(domstringmediaSuccess:(可选),执行后一个回调媒体对象已完成当前播放,录制,或停止。(function

mediaError:(可选)执行出现错误的回调方法。(function

mediaStatus:(可选)执行显示状态的变化的回调方法。(function

注意:cdvfile 路径支持src参数

var my_media = new Media('cdvfile://localhost/temporary/recording.mp3'...);

常数

下面的常数是报道的唯一参数mediastatus回调:

· media.media_none= 0;

· media.media_starting= 1;

· media.media_running= 2;

· media.media_paused= 3;

· media.media_stopped= 4;

方法

media.getcurrentamplitude:返回当前的振幅在一个音频文件。

media.getcurrentposition:返回在音频文件的当前位置。

media.getduration:返回音频文件的时间。 

media.play:开始或继续播放音频文件。

media.pause:暂停播放音频文件。 

media.pauserecord:音频文件暂停记录。

media.release:发布操作系统底层的音频资源。

media.resumerecord:恢复音频文件记录。

media.seekto:移动位置内的音频文件。

media.setvolume音频播放的音量设置。 

media.startrecord:开始录制音频文件。

media.stoprecord:停止录制音频文件。

media.stop:停止播放音频文件。

另外ReadOnly参数

position:音频播放的位置

在玩的过程中不会自动更新;可以使用getCurrentPosition方法更新。

duration:音频媒体的时间长度

media.getcurrentamplitude

返回当前的振幅在一个音频文件。

media.getCurrentAmplitude(mediaSuccess, [mediaError]);

参数

mediaSuccess:回调,通过当前幅值 (0.0 - 1.0)。

mediaError:(可选)执行如果出现错误的回调方法

例子

// Audio player
var my_media = new Media(src, onSuccess, onError);
// Record audio
my_media.startRecord();
mediaTimer = setInterval(function () {
    // get media amplitude
    my_media.getCurrentAmplitude(
        // success callback
        function (amp) {
            console.log(amp + "%");
        },
        // error callback
        function (e) {
            console.log("Error getting amp=" + e);
        }
    );
}, 1000);

media.getcurrentposition

返回在一个音频文件的当前位置,同时更新了Media对象的position参数

media.getCurrentPosition(mediaSuccess, [mediaError]);

参数

mediaSuccess:回调,返回当前位置秒

mediaError:(可选)执行如果出现错误的回调方法

例子

// 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);

media.getduration

返回在一个音频文件的持续时间(音频时长),如果时间长度是未知的,则返回的值为-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);

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();
 
    // 10秒后暂停播放音频
    setTimeout(function () {
        my_media.pause();
    }, 10000);
}

media.pauseRecord     仅支持IOS

暂停录制音频文件。

例子
// Record audio
function recordAudio() {
    var src = "myrecording.wav";
    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();
 
    // Pause Recording after 5 seconds
    setTimeout(function() {
        mediaRec.pauseRecord();
    }, 5000);
}

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();
}

IOS平台注意:

numberOfLoops:通过这个option的play音频文件指定的次数,如:

var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
  myMedia.play({ numberOfLoops: 2 })
playAudioWhenScreenIsLocked:通过这个option进行播放 可以指定是否允许播放时锁定屏幕。如果设置为true(默认值),手机设备的静音按钮的设置将会被忽略。如:
 var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3");
  myMedia.play({ playAudioWhenScreenIsLocked : true });
  myMedia.setVolume('1.0');
order of file search: 当只有一个文件名或路径提供简单的搜索,IOS会在 www文件中搜索文件,然后再在app应用的documents/tmp目录中
搜索
 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

释放操作系统底层的音频资源。尤其是Android,由于没有数量的示例OpenCore是有限的,应用程序应该调用release功能释放不再需要的任何媒体资源。

// Audio player
//
var my_media = new Media(src, onSuccess, onError);
 
my_media.play();
my_media.stop();
my_media.release();

media.resumeRecord   仅支持IOS

恢复录制音频文件

// 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();
 
    // Pause Recording after 5 seconds
    setTimeout(function() {
        mediaRec.pauseRecord();
    }, 5000);
 
    // Resume Recording after 10 seconds
    setTimeout(function() {
        mediaRec.resumeRecord();
    }, 10000);
}

media.seekTo

设置音频的文件播放位置

media.seekTo(milliseconds);

参数 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);

media.setVolume

设置音频的文件播播放的音量大小

media.setVolume(volume);

参数volume 是音量大小,必须在0.0-1.0之间

// 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);
}

media.startRecord

开始录制音频

// 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();
}

注意:一旦media对象使用了release()方法,音乐控制恢复到默认值。IOS仅支持录制.wav 格式和.m4a 格式,否则会报错无法录制

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);
}

media.stopRecord

停止录制音频

// 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);
}

MediaError

MediaError对象是mediaerror 回调方法触发时返回的,包括code(错误代码)和message(错误信息)两个属性

常数:
mediaerror.media_err_aborted= 1
mediaerror.media_err_network= 2
mediaerror.media_err_decode= 3
mediaerror.media_err_none_supported= 4