首页 文章

PhoneGap(JS) - 多个音频流

提问于
浏览
1

我一直在使用PhoneGap文档(http://docs.phonegap.com/en/2.3.0/cordova_media_media.md.html#media.play)中的代码来播放音频文件:

// Audio player
    //
    var my_media = null;
    var mediaTimer = null;

    // Play audio
    //
    function playAudio(src) {
        if (my_media == null) {
            // Create Media object from src
            my_media = new Media(src, onSuccess, onError);
        } // else play current audio
        // Play audio
        my_media.play();

    // Stop audio
    // 
    function stopAudio() {
        if (my_media) {
            my_media.stop();
        }
        clearInterval(mediaTimer);
        mediaTimer = null;
    }

所以我可以用onclick事件播放音频:

playAudio('http://example.com/file.mp3');

并阻止它:

stopAudio();

这工作正常,但我想播放多个流并通过参数“name”控制它们 .

所以我改变了我的代码:

// Audio player
    //
    var my_media = null;
    var mediaTimer = null;

    // Play audio
    //
    function playAudio(name,src) {
        if (my_media == null) {
            // Create Media object from src
            my_media = new Media(name, src, onSuccess, onError);
        } // else play current audio
        // Play audio
        my_media.play(name);

    // Stop audio
    // 
    function stopAudio(name) {
        if (my_media) {
            my_media.stop(name);
        }
        clearInterval(mediaTimer);
        mediaTimer = null;
    }

//播放并停止文件1:playAudio('file1','http://example.com/file.mp3');

stopAudio( '文件1');

//播放和停止文件2:

playAudio('file2','http://example.com/file2.mp3');

stopAudio( '文件2');


我收到的唯一一件事是应用程序崩溃,有没有人有在PhoneGap上播放多个媒体文件的经验?

谢谢!

3 回答

  • 0

    基于Cordova 2.3文档:

    Media对象构造函数期望第一个参数为'src',但是您使用它来设置播放器的媒体名称而不是将您的名称视为媒体源,并尝试使用'file1'作为媒体文件的路径

    附加:phonegap Media play()和stop()方法不期望参数,因此您在这些方法调用中提供的名称将被忽略

    您可以尝试创建一个二维媒体播放器阵列,其中每行中的第一个元素是名称,第二个元素是Media对象 . 比在你的playAudio和stopAudio函数中按名称扫描数组并在正确的对象上调用play()和stop()方法

    在复制和粘贴下面的代码之前,请记住我完全不能确保在phonegap中播放多个音频文件 . 我知道移动safari音频元素不支持:http://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Using_HTML5_Audio_Video.pdf#page21

    var my_medias = new Array();
    ...
    playAudio(name,arc){
        var createnew = true;
        for(var i=0;i<my_medias.length;I++){
            if(my_medias[0]==name){
                my_medias[1].play();
                createnew=false;
            }
        }
        if(createnew){
            my_medias.push([name,new Media(src,onError,onSuccess)]);
        }
    }
    
    stopAudio(name){
        for(var i=0;i<my_medias.length;I++){
            if(my_medias[0]==name){
                my_medias[1].stop();
            }
        }
    ...
    
    }
    
  • 2

    我是phonegap的新手,我也想播放像你这样的多个媒体文件 . 这是我的解决方案,它对我有用 .

    var mediaObjects;
    var currentSound;
    
    // where list is an array of sound name like this ['foo.mp3', 'bar.mp3']
    function playSound(list){
        mediaObjects = [];
        currentSound = 0;
        for(var i = 0; i< list.length; i++){
            var mediaObject = new Media('/android_asset/www/sounds/' + list[i], onSuccess, onError);
            mediaObjects.push(mediaObject);
        }
        mediaObjects[0].play();
    }
    

    在第一个媒体对象播放后 . 将调用回调函数'onSuccess',这是函数的代码

    function onSuccess() {
        currentSound++;
        if(mediaObjects.length <= currentSound){
            return;
        }
        mediaObjects[currentSound].play();
    }
    

    这段代码可能不是最好的,但它适用(对我来说),对不起我的英文希望这个帮助! :)

  • 0

    你可以加

    window.location.reload();
    

    stopAudio() ,这是工作 multiple audio

    function stopAudio() {
        if (my_media) {
            my_media.stop();
            window.location.reload();
        }
        clearInterval(mediaTimer);
        mediaTimer = null;
    }
    

相关问题