PhoneGap (JS) - 多个音频流
Posted
技术标签:
【中文标题】PhoneGap (JS) - 多个音频流【英文标题】:PhoneGap (JS) - multiple audio streams 【发布时间】:2013-02-03 13:31:34 【问题描述】:我一直在使用 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();
这很好,但我想播放多个流并通过参数“名称”控制它们。
所以我改变了我的代码:
// 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('file1');
// 播放和停止文件2:
playAudio('file2','http://example.com/file2.mp3');
stopAudio('file2');
我收到的唯一消息是应用程序崩溃,有人有在 PhoneGap 上播放多个媒体文件的经验吗?
谢谢!
【问题讨论】:
【参考方案1】:基于 Cordova 2.3 文档:
Media 对象构造函数期望第一个参数为“src”,但您使用它来设置媒体的名称,播放器将您的名称视为媒体源并尝试使用“file1”作为媒体文件
补充: phonegap Media play() 和 stop() 方法不需要参数,因此您在这些方法调用中提供的名称将被忽略
您可以尝试创建一个二维媒体播放器数组,其中每行的第一个元素是名称,第二个元素是媒体对象。比在您的 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();
这段代码可能不是最好的,但它可以工作(对我来说) 对不起我的英语 希望这有帮助! :)
【讨论】:
【参考方案3】:你可以添加
window.location.reload();
在stopAudio()
,玩multiple audio
是工作
function stopAudio()
if (my_media)
my_media.stop();
window.location.reload();
clearInterval(mediaTimer);
mediaTimer = null;
【讨论】:
以上是关于PhoneGap (JS) - 多个音频流的主要内容,如果未能解决你的问题,请参考以下文章
Javascript / HTML5 - 用于网络桌面/移动应用程序的音频流录制
iPhone 上来电后,Phonegap HTML5 音频无法恢复播放