2013年3月24日 星期日

音效檔播放的問題

PhoneGap提供的播放音樂API似乎存在一些效能和相容性問題,在Windows Phone上會明顯延遲;在Android上的播放次數有限制,超過便無法播放;在IOS上則是單純播放都有問題(1.8.1版)。因此須另找替代方案:

Windows Phone上的專案若只有播放單一音效的需求,可考慮採用播放系統提示聲的API,因為此API不會造成延遲問題,而且可以自行更換提示聲音效檔:

navigator.notification.beep( 1 );  // 播放提示音效一次

至於其他平台,可以先將要播放的音效檔定義在html檔,而後再呼叫使用。譬如說要播放click.wav這個音效檔,可以在html檔這麼定義:

<audio id="clickAudio" src="click.wav" preload="auto"></audio>

然後在要播放的地方加入下面這一句:

document.getElementById( "clickAudio" ).play(); // 播放物件

如此便能播放了。實測下來,在Chrome和Firefox OS上播放順暢,不過在IOS上第一次播放會略有延遲,仍不夠理想,需要再想辦法改進改進。

至於Android系統,很遺憾不支援上面的做法,需要呼叫PhoneGap API,操作如下:

1. 撰寫取得檔案路徑的javascript funciton:
1
2
3
4
5
6
7
// 取得Phonegap可識別的檔案路徑 .
function getPhoneGapPath() 
{
    var path = window.location.pathname;
    path = path.substr( path, path.length - 10 );
    return 'file://' + path;
}


2. 撰寫透過PhoneGap API播放音效的javascript function:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// 藉由PhoneGap API來播放音效檔
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 );
    } );

    my_media.play(); // 開始播放

    //my_media.stop();
    //my_media.release();
}


3. 將音效檔(範例中的檔名為click.wav)丟入存放index.html的資料夾,而後在需要播放音效的地方呼叫剛剛寫的function:
playAudio( getPhoneGapPath() + "click.wav" ); 




沒有留言:

張貼留言