1. 程式人生 > >HTML5+規範:audio(音訊的錄製和播放功能)

HTML5+規範:audio(音訊的錄製和播放功能)

   Audio模組用於提供音訊的錄製和播放功能,可呼叫系統的麥克風裝置進行錄音操作,也可呼叫系統的揚聲器裝置播放音訊檔案。通過plus.audio獲取音訊管理物件。

1、常量

  ROUTE_SPEAKER: 裝置的揚聲器音訊輸出線路,音訊輸出線路常量,值為0。音訊播放時在裝置的揚聲器輸出。

  ROUTE_EARPIECE: 裝置聽筒音訊輸出線路,音訊輸出線路常量,值為1。音訊播放時在裝置的聽筒輸出。

2、方法

2.1、getRecorder: 獲取當前裝置的錄音物件

      AudioRecorder plus.audio.getRecorder();

說明:獲取當前裝置的錄音物件,進行錄音操作,錄音物件是裝置的獨佔資源,在同一時間僅可執行一個錄音操作,否則可能會導致操作失敗。

返回值:AudioRecorder : 錄音物件

平臺支援:Android - 2.2+ (支援): 支援錄製"amr"、"3gp"等格式檔案。iOS - 4.3+ (支援): 支援錄製"wav"、"aac"、"amr"等格式檔案。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Audio Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
var r = null;
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
r = plus.audio.getRecorder();
}
function startRecord() {
if ( r == null ) {
alert( "Device not ready!" );
return;
}
r.record( {filename:"_doc/audio/"}, function () {
alert( "Audio record success!" );
}, function ( e ) {
alert( "Audio record failed: " + e.message );
} );
}
function stopRecord() {
r.stop();
}
</script>
</head>
<body>
<input type="button" value="Start Record" onclick="startRecord();"/>
<br/>
<input type="button" value="Stop Record" onclick="stopRecord();"/>
</body>
</html>


2.2、createPlayer: 建立音訊播放物件

        AudioPlayer plus.audio.createPlayer( path );

說明:建立一個音訊檔案播放物件,用於開啟音訊檔案並播放。可通過path引數指定要播放的音訊檔案。建立後返回播放物件,通過Audio.play方法開始播放。

引數:path: ( String ) 必選 音訊檔案路徑

要播放的音訊檔案的路徑。

返回值:AudioPlayer : 音訊播放物件

平臺支援:Android - 2.2+ (支援): 支援"aac"、"3gp"、"amr"、"mp3"、"mp4"、"mid"、"ogg"、"wav"等格式檔案。 支援播放網路路徑音訊,以http/https開頭,如“http://demo.dcloud.net.cn/test/audio/apple.mp3”。iOS - 4.3+ (支援): 支援"aac"、"aiff"、"mp3"、"mid"、"wav"、"amr"等格式檔案。 暫不支援播放網路路徑音訊。

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Audio Example</title>
<script type="text/javascript">
// 擴充套件API載入完畢後呼叫onPlusReady回撥函式
document.addEventListener( "plusready", onPlusReady, false );
// 擴充套件API載入完畢,現在可以正常呼叫擴充套件API
function onPlusReady() {
}
var p = null;
function startPlay() {
if ( plus.audio == undefined ) {
alert( "Device not ready!" );
}
p = plus.audio.createPlayer( "_Doc/Audio/test.mp3" );
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play error: " + e.message );
} );
}
function stopPlay() {
p.stop();
}
</script>
</head>
<body>
<input type="button" value="Start Play" onclick="startPlay();"/>
<br/>
<input type="button" value="Stop Play" onclick="stopPlay();"/>
</body>
</html>


3、物件:

3.1、AudioRecorder: 錄音物件

interface AudioRecorder {

readonly attribute String[] supportedSamplerates;

readonly attribute String[] supportedFormats;

function record( option, successCB, errorCB );

function stop();

}

1、屬性

   supportedSamplerates: 陣列,裝置錄音支援的採用率,屬性型別為Array(String),若不支援此屬性則返回空陣列物件。支援的錄音取樣率,字串格式為“取樣頻率”,如“8000”;其單位為Hz。

   supportedFormats: 陣列,裝置錄音支援的檔案格式,屬性型別為Array(String),若不支援此屬性則返回空陣列物件。支援的錄音檔案的格式,字串格式為檔案格式字尾名,如"mp3"、"aac"、"wav"等。

2、方法

(1)、record: 呼叫裝置麥克風進行錄音操作

       void recorder.record( option, successCB, errorCB );

說明:呼叫裝置麥克風開始錄音操作,錄音完成需呼叫stop方法停止。錄音完成後將通過successCB回撥返回錄音後的檔案資料。

引數:

option: ( RecordOption ) 必選 設定錄音的引數

successCB: ( RecordSuccessCallback ) 必選 錄音操作成功回撥函式

errorCB: ( AudioErrorCallback ) 可選 錄音操作錯誤回撥函式

返回值:void : 無

示例:

// 錄音操作

var r = plus.audio.getRecorder();
r.record( {filename:"_doc/audio/"}, function () {
alert( "Audio record success!" );
}, function ( e ) {
alert( "Audio record failed: " + e.message );
} );

(2)、stop: 結束錄音操作

               void recorder.stop();

說明:結束錄音操作,通知裝置完成錄音操作。錄音完成後將呼叫record方法中傳入的successCB回撥返回錄音檔案

返回值:void : 無

示例:

// 錄音操作

var r = plus.audio.getRecorder();
r.record( {filename:"_doc/audio/"}, function () {
alert( "Audio record success!" );
}, function ( e ) {
alert( "Audio record failed: " + e.message );
} );
//.....
// 停止錄音
r.stop();


3.2、AudioPlayer: 音訊播放物件

interface AudioPlayer {

function void play( successCB, errorCB );

function void pause();

function void resume();

function void stop();

function void seekTo( position );

function Number getDuration();

function Number getPosition();

function void setRoute( route );

}

說明:音訊播放物件,用於音訊檔案的播放。不能通過new方法直接建立,只能通過audio.createPlayer方法建立。

1、方法

(1)、play: 開始播放音訊

          void player.play( successCB, errorCB );

引數:

successCB: ( PlaySuccessCallback ) 必選 播放音訊操作成功回撥函式,當音訊檔案播放完成時回撥。

errorCB: ( AudioErrorCallback ) 可選 播放音訊操作錯誤回撥函式,當音訊檔案播放發生錯誤時回撥。

返回值:void : 無

示例:

// 播放操作
var p = plus.audio.createPlayer();
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play failed: " + e.message );
} );


(2)、pause: 暫停播放音訊

        void player.pause();

說明:需先呼叫createPlayer方法建立音訊播放物件,並開始播放。音訊播放物件在播放狀態才能暫停,在其它狀態呼叫此方法無任何作用。

返回值:void : 無

示例:

// 播放操作
var p = plus.audio.createPlayer();
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play failed: " + e.message );
} );
// ......
// 暫停播放
p.pause();


(3)、resume: 恢復播放音訊

            void player.resume();

說明:音訊播放物件在暫停狀態才能恢復播放,在其它狀態呼叫此方法無任何作用。

返回值:void : 無

示例:

// 播放操作
var p = plus.audio.createPlayer();
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play failed: " + e.message );
} );
// ......
// 暫停播放
p.pause();
// ......
// 恢復播放
p.resume();


(4)、stop: 停止播放音訊

             void player.stop();

說明:停止播放音訊,音訊播放物件在播放或暫停狀態才能停止播放,在其它狀態呼叫此方法無任何作用。 停止播放後如果需要繼續播放,則需呼叫play方法重新開始播放。

返回值:void : 無

示例:

// 播放操作
var p = plus.audio.createPlayer();
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play failed: " + e.message );
} );
// ......
// 停止播放
p.stop();


(5)、seekTo: 跳到指定位置播放音訊

         void player.seekTo( position );

說明:跳到指定位置播放音訊,音訊播放物件在播放或暫停狀態才能跳到指定播放音訊,在其它狀態呼叫此方法無任何作用。

引數:position: ( Number ) 必選 音訊播放要跳到的位置,單位為s

返回值:void : 無

(6)、getDuration: 獲取音訊流的總長度

        Number player.getDuration();

說明:獲取音訊流的總長度,單位為秒,若長度未知則返回-1。如果還未獲取到音訊流資訊則返回NaN,此時需要延遲獲取此資訊。

返回值:Number : 音訊流的總長度

(7)、getPosition: 獲取音訊流當前播放的位置

         Number player.getPosition();

說明:獲取音訊流當前播放的位置(已播放的長度),單位為s。

返回值:Number : 當前音訊播放的位置,單位為s,如果音訊檔案未準備好則返回0。

(8)、setRoute: 設定音訊輸出線路

          void player.setRoute( route );

說明:可在音訊檔案開始播放前或播放的過程中改變音訊輸出線路,預設使用揚聲器(plus.audio.ROUTE_SPEAKER)輸出線路。

引數:route: ( Number ) 必選 音訊播放時輸出線路常量,可設定audio的ROUTE_*常量值,設定後立即生效。

返回值:void : 無

示例:

// 播放操作
var p = plus.audio.createPlayer();
// 切換到聽筒線路
p.setRoute( plus.audio.ROUTE_EARPIECE );
p.play( function () {
alert( "Audio play success!" );
}, function ( e ) {
alert( "Audio play failed: " + e.message );
} );
//...
// 切換到揚聲器線路
p.setRoute( plus.audio.ROUTE_SPEAKER );


3.3、RecordOption: JSON物件,呼叫麥克風裝置進行錄音的引數

JSON物件,呼叫麥克風裝置進行錄音的引數

屬性:

   filename: (String 型別 )保存錄音檔案的路徑,可設定具體檔名,也可只設置路徑,如果以“/”結尾則表明是路徑,檔名由錄音程式自動生成。 如未設定則使用預設目錄生成隨機檔名稱,預設目錄為應用%APPID%下的documents目錄。

   samplerate: (String 型別 )錄音檔案的取樣率,需通過supportedSamplerates屬性獲取裝置支援的取樣率,若設定無效的值,則使用系統預設的取樣率。

   format: (String 型別 )錄音檔案的格式,需通過supportedFormats屬性獲取裝置支援的錄音格式,若設定無效的值,則使用系統預設的錄音格式。平臺支援:Android - 2.2+ (支援): Android平臺支援"amr""3gp"格式,預設為"amr"iOS - 4.5+ (支援): iOS平臺支援"wav""aac""amr"格式,預設為"wav"

4、回撥方法:

4.1、RecordSuccessCallback: 錄音操作成功回撥

void onSuccess( recordFile ) {
// Get record file code.
}

說明:麥克風錄音操作成功的回撥函式,在錄音操作完成呼叫stop()方法時呼叫。

引數:recordFile: ( String ) 必選 錄音操作儲存的音訊檔案路徑

返回值:void : 無

4.2、PlaySuccessCallback: 播放音訊檔案操作成功回撥

void onCompleted() {
// Play audio file completed code.
}

說明:麥克風錄音操作成功的回撥函式,在錄音操作完成呼叫stop()方法時呼叫。

返回值:void : 無

4.3、AudioErrorCallback: 音訊操作失敗回撥

void onError( error ) {
// Handle audio error
}

引數:error: ( DOMException ) 必選 音訊操作的錯誤資訊

返回值:void : 無