13093


monacaで開発しています。

audioだとアンドロイドでサポートしないという事でしたので、  
PhoneGap の Media APIを使用してmp3をBGMとして再生したい  
と思っています。

・参考にしたサイト  
<https://blog.e2info.co.jp/2014/06/30/monaca%E3%81%A7iphone%E3%82%A2%E3%83%97%E3%83%AA/>

head内に下記を入れてみましたがエラーで画面すら開かなくなりました。

[code]

    <script> 
     // PhoneGap event handler
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        console.log("PhoneGap is ready");
        //音楽再生関数を呼びます
        playAudio();
    }
    
    var media = null;
    var mediaTimer = null;
    
    //音楽再生関数
    function playAudio() {
        var src = 'sound.mp3';
        media = new Media ('/' + src , onSuccess, onError);
    
        //再生
        media.play({numberOfLoops:"infinite"});
    
        if (mediaTimer == null) {
            mediaTimer = setInterval(function() {
                // 再生位置を返します
                media.getCurrentPosition(
                    //成功時のコールバック関数です
                    function(position) {
                        if (position > -1) {
                            setAudioPosition((position) + " sec");
                            //端末によっては再生位置が-0.001で止まるので、その場合は再度読み込みます。
                            if(position == -0.001){
                                media.play({numberOfLoops:"infinite"});
                            }
                        }
                    },
                    //失敗時のコールバック関数です
                    function(e) {
                        console.log("Error getting pos=" + e);
                    }
                );
            }, 1000);
        }
    }
    //成功時
    function onSuccess() {
        console.log("playAudio():Audio Success");
    }
    //失敗時
    function onError(error) {
        alert('code: '    + error.code    + '\n' + 
        'message: ' + error.message + '\n');
    }
    
    //オーディオ再生位置
    function setAudioPosition(position) {
        document.getElementById('audio_position').innerHTML = position;
    }
    </script>
    
[/code]

初歩的な質問ですみませんが、ご教授下さい。


CC BY-SA 3.0
2015-08-05T22:54:07.470
13086
2015-08-06T02:37:31.420
2015-08-06T01:28:38.020
10492
10819
question
javascript monaca
BGMとして自動音声再生、ループを指示したいがJavaScriptで動かない。


再生できるサンプルを取りあえず作成してみました。  
音声パスは絶対パスでないと再生出来ないかと思います。  
`playAudio('sound.mp3',true);`でループ再生できるかと思います。  
`deviceready`時に呼び出して試してみてください。

[code]

    var media = null;       //Mediaオブジェクト
    var mediaTimer = null;  //再生位置を逐次取得する為のタイマー
    
    /**
     * 相対パスから絶対パスに変換するためにカレントパスの取得
     **/
    function getPath() {
        var str = location.pathname;
        var i = str.lastIndexOf('/');
        return str.substring(0,i+1);
    }
    
    /**
     * 再生開始
     **/
    function playAudio(audio_src, isLoop) {
        if(typeof isLoop === 'undefined'){isLoop=false;}
        //音声パス, 成功時コールバック, 失敗時コールバック
        media = new Media (getPath() + audio_src , function(){console.log("play start");}, function(error){console.log('code: ' + error.code + '\n' + 'message: ' + error.message + '\n');});
    
        if(monaca.isIOS){
            //ファイルを再生(オプション値はiOSのみ有効)
            //{numberOfLoops:"infinite"}を引数にするとループ / { playAudioWhenScreenIsLocked:false }マナーモードを有効
            if(isLoop){
                media.play({ playAudioWhenScreenIsLocked:false, numberOfLoops:"infinite"});
            }else{
                media.play({ playAudioWhenScreenIsLocked:false});
            }
    
            if(mediaTimer == null){
                mediaTimer = setInterval(function() {
                    //再生位置
                    if(isset(media)){
                        media.getCurrentPosition(
                            function(position) {
                                if(0 > position){
                                    //再生位置バグ用リロード
                                    if(isLoop){media.play();}
                                    else{stopAudio();}
                                }
                            },
                            function(e){
                                console.log("Error getting pos=" + e);
                            }
                        );
                    }
                }, 1000);
            }
        }else{
            media.play();
            if(mediaTimer == null){
                mediaTimer = setInterval(function() {
                    //再生位置を取得
                    if(isset(media)){
                        media.getCurrentPosition(
                            function(position) {
                                //再生の終了位置にバグがある為対処
                                if(0 > position){
                                    if(isLoop){media.play();}
                                    else{stopAudio();}
                                }
                            },
                            function(e){
                                console.log("Error getting pos=" + e);
                            }
                        );
                    }
                }, 100);
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-08-06T02:37:31.420
13093
2015-08-06T02:37:31.420
7676
13086
answer