0

我曾尝试使用 html5 sudio 标签播放音频文件(我尝试过 .wav 和 .mp3 格式)。但是,当我在 Eclipse 中为 android Gingerbread 在模拟器上运行项目时,当我单击我创建的播放按钮时,它似乎没有播放。我正在使用安卓 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

Try with WebM audio. Google added WebM supported in Android 2.3 Gingerbread. A lot of people have trouble with <audio> in Android 2.2.

于 2012-08-16T16:51:20.683 回答
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

我在 Gingerbread (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 回答