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 : 無