0

html5 sudio タグを使用してオーディオ ファイル (.wav および .mp3 形式を試しました) を再生しようとしました。しかし、Android GingerbreadのEclipseでシミュレーターでプロジェクトを実行すると、作成した再生ボタンをクリックしても再生されないようです。Android 4.0 API を使用しています。これはなぜですか?シミュレーターがトーンを再生するのを妨げるものを見逃していませんか?

以下は私のhtmlコードです:

$('#page-home').live('pageinit', function(event){  
    $('.api-div').hide();
    $('.api-div#api-intro').show();

    $('#intro').click(function() {
        $('.api-div').hide();
        $('.api-div#api-intro').show();
        $.mobile.silentScroll(0);            
    });

    $('div ul li a').click(function(event) {
        event.preventDefault();
        //alert('clicked : ' + $(this).attr('id'));
        var attrId = $(this).attr('id');

        if (attrId.indexOf("click") !== 0) {
            return;
        }

        var api = '#api' + attrId.substring(attrId.indexOf('-'));

        // hide all div's, show only this one
        $('.api-div').hide();
        $(api).show();

        // if small screen and portrait - close after tap
        var disp = $('ul #listdivider').css("display");
        //alert(disp + ' : ' + api);
        if (disp === 'none') {
            $('div.ui-collapsible').trigger("collapse");
        } else {
            $.mobile.silentScroll(0);            
        }
    }); 

    $('#listdivider').click(function(event) {
        event.preventDefault();
        $('.api-div').hide();
        $('.api-div#api-intro').show();
        $.mobile.silentScroll(0);
    });

    $("#playaudio").live('tap', function() {
        var src = 'tone1K.mp3';
        // Note: two ways to access media file: web and local file        
        //var src = 'http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3';

        // local (on device): copy file to project's /assets folder:
        // var src = '/android_asset/spittinggames.m4a';

        playAudio(src);
    });

    $("#pauseaudio").live('tap', function() {
        pauseAudio();
    });

    $("#stopaudio").live('tap', function() {
        stopAudio();
    });


});

以下は、クリック時にトーンを再生するための私の JavaScript です。

$('#page-home').live('pageinit', function(event){  
    $('.api-div').hide();
    $('.api-div#api-intro').show();

    $('#intro').click(function() {
        $('.api-div').hide();
        $('.api-div#api-intro').show();
        $.mobile.silentScroll(0);            
    });

    $('div ul li a').click(function(event) {
        event.preventDefault();
        //alert('clicked : ' + $(this).attr('id'));
        var attrId = $(this).attr('id');

        if (attrId.indexOf("click") !== 0) {
            return;
        }

        var api = '#api' + attrId.substring(attrId.indexOf('-'));

        // hide all div's, show only this one
        $('.api-div').hide();
        $(api).show();

        // if small screen and portrait - close after tap
        var disp = $('ul #listdivider').css("display");
        //alert(disp + ' : ' + api);
        if (disp === 'none') {
            $('div.ui-collapsible').trigger("collapse");
        } else {
            $.mobile.silentScroll(0);            
        }
    }); 

    $('#listdivider').click(function(event) {
        event.preventDefault();
        $('.api-div').hide();
        $('.api-div#api-intro').show();
        $.mobile.silentScroll(0);
    });

    $("#playaudio").live('tap', function() {
        var src = 'tone1K.mp3';
        // Note: two ways to access media file: web and local file        
        //var src = 'http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3';

        // local (on device): copy file to project's /assets folder:
        // var src = '/android_asset/spittinggames.m4a';

        playAudio(src);
    });

    $("#pauseaudio").live('tap', function() {
        pauseAudio();
    });

    $("#stopaudio").live('tap', function() {
        stopAudio();
    });


});
4

4 に答える 4

0

私はジンジャーブレッド(2.3.6)で同様の問題を抱えていましたが、このテストページに出くわしました: http://hpr.dogphilosophy.net/test/

これは 2.3.6 では正常に機能していましたが、元のコード (他の場所では正常に機能していました) は機能しませんでした。このページの JS を見ると、私がしていないことがいくつか起こっていました。これは私がネットアウトした場所です:

JS:

$(function(){
    $('#play').on('click',function(e){
        e.preventDefault();
        var mediaObj = $('#audioMeme').get(0);
        $('#audioMeme').attr('src','bounce.mp3');
        mediaObj.pause()
        mediaObj.currentSrc = 'bounce.mp3';
        mediaObj.load();
        playAudio();

        function playAudio(){
            var audioReady = mediaObj.readyState;
            if(mediaObj.error) {
                alert('no dice');
            }
            if(audioReady>2) {
                mediaObj.play();
            }
            else{
                setTimeout(play,500);                   
            }
        }
    });
});

HTML:

<audio id="audioMeme" autoplay preload="auto" loop src="">
<source src="bounce.mp3">
</audio>

<a href="#" id="play">play</a>

そして今、2.3.6ですべてがうまくいっています。

于 2012-12-21T23:29:16.783 に答える
0

これは、Google がまだ修正していない次のバグに遭遇したためです。

https://code.google.com/p/android/issues/detail?id=10546

それまでの間、Media API があるのはそのためです。

http://docs.phonegap.com/en/2.0.0/cordova_media_media.md.html#Media

于 2012-08-17T03:25:24.733 に答える
0

指定した mp3 ファイルを含めるのを忘れていませんか?

実際のデバイスでこれを試しましたか?これについてエミュレータに問題があるかどうかはわかりません。エミュレータでオーディオを試しませんでした。それは私が思うにそれでうまくいくはずです。

とにかくあなたの問題のために私がお勧めするのはphonegap media apiを使うことです

于 2012-08-16T18:06:42.560 に答える
0

WebM オーディオで試してください。Google は、Android 2.3 Gingerbread でサポートされている WebM を追加しました。多くの人が<audio>Android 2.2 で問題を抱えています。

于 2012-08-16T16:51:20.683 に答える