Titanium 无法在Ti.Media.createSound()上设置该事实之后的URL

Titanium 无法在Ti.Media.createSound()上设置该事实之后的URL,titanium,titanium-mobile,appcelerator,appcelerator-mobile,Titanium,Titanium Mobile,Appcelerator,Appcelerator Mobile,我可以通过Titanium.Media.Sound对象成功播放远程mp3,但有一个问题。第一个剪辑总是播放得很好。但每次我尝试播放不同的剪辑时,第一个剪辑会再次播放。这是100%可重复的 因此,在我的js文件的顶部,我正在执行以下操作: var soundPlayer=Ti.Media.createSound({allowBackground:false}) 然后在事件侦听器中单击按钮,我将URL设置为: soundPlayer.setUrl(mp3URL) 我甚至尝试过这种方法: soundP

我可以通过Titanium.Media.Sound对象成功播放远程mp3,但有一个问题。第一个剪辑总是播放得很好。但每次我尝试播放不同的剪辑时,第一个剪辑会再次播放。这是100%可重复的

因此,在我的js文件的顶部,我正在执行以下操作:

var soundPlayer=Ti.Media.createSound({allowBackground:false})

然后在事件侦听器中单击按钮,我将URL设置为:

soundPlayer.setUrl(mp3URL)

我甚至尝试过这种方法:

soundPlayer.url=mp3URL

但它们都有相同的缺陷:音频始终是第一个剪辑,而不是我随后设置的任何剪辑。我已经通过控制台日志验证了,事实上,一个新的url被交给了声音播放器,并且事实上,新的url指向了一个有效的mp3。似乎一旦我为声音播放器设置了一个url,它就被一成不变地设置好了,无法更改——只是重播而已

于是我尝试了一种完全不同的方法。在我的button click listener中,我每次都重新创建声音对象并提交新的URL:

soundPlayer=Ti.Media.createSound({allowBackground:false,url:mp3URL})

这实际上是可行的,每次都会播放新的url,但它有一个可怕的副作用:任何附加的事件侦听器都不再触发。我需要跟踪播放器中的状态变化,例如当它完成时,等等。但是当我采用这种方法时,这些事件侦听器不再触发

奇怪的是,AudioPlayer对象在各个方面的行为都是正确的,允许我设置新的URL等。但问题是AudioPlayer绝对拒绝播放任何小于40Kb的mp3文件。我已经在这个论坛和其他论坛上发布了关于这个问题的问题,根据回复和实验,我有很多关于40Kb限制的证据,没有相反的证据

那么为什么我不能在声音对象上创建对象后更改url呢?提前感谢您的建议。

我会将其归入“已知错误”类别,请参见此处:标记为“不会修复”

错误报告:

var-sound=tianium.Media.createSound(); sound.url='../cricket.wav';声音。播放(); 但如果我在那之后尝试更改url,声音仍然会播放cricket.wav 声音

Appcelerator(?)的响应:

“客户问题TIMOB-1488的副本。这很容易实现 通过创建一个新的声音对象。此外,这将创建一个 平台奇偶校验问题,并将使任何未来的API复杂化,例如 例如,将支持声音通道等。声音对象应 被认为是构建后的不可变对象。”

因此,创建一个新的声音对象并重新添加事件侦听器是我认为的解决方案:

var sampleListener = function(){
 alert('something happened'); 
}

var sound = Ti.Media.createSound({url:myURL});
sound.addEventListener('complete', sampleListener);
sound.play();

//later on, make a new sound object:

sound = Ti.Media.createSound({url:anotherURL});
sound.addEventListener('complete', sampleListener);
sound.addEventListener('someevent', anotherSampleListener);
sound.play();
我把它放在“已知bug”类别中,请看这里:标记为“不会修复”

错误报告:

var-sound=tianium.Media.createSound(); sound.url='../cricket.wav';声音。播放(); 但如果我在那之后尝试更改url,声音仍然会播放cricket.wav 声音

Appcelerator(?)的响应:

“客户问题TIMOB-1488的副本。这很容易实现 通过创建一个新的声音对象。此外,这将创建一个 平台奇偶校验问题,并将使任何未来的API复杂化,例如 例如,将支持声音通道等。声音对象应 被认为是构建后的不可变对象。”

因此,创建一个新的声音对象并重新添加事件侦听器是我认为的解决方案:

var sampleListener = function(){
 alert('something happened'); 
}

var sound = Ti.Media.createSound({url:myURL});
sound.addEventListener('complete', sampleListener);
sound.play();

//later on, make a new sound object:

sound = Ti.Media.createSound({url:anotherURL});
sound.addEventListener('complete', sampleListener);
sound.addEventListener('someevent', anotherSampleListener);
sound.play();
我把它放在“已知bug”类别中,请看这里:标记为“不会修复”

错误报告:

var-sound=tianium.Media.createSound(); sound.url='../cricket.wav';声音。播放(); 但如果我在那之后尝试更改url,声音仍然会播放cricket.wav 声音

Appcelerator(?)的响应:

“客户问题TIMOB-1488的副本。这很容易实现 通过创建一个新的声音对象。此外,这将创建一个 平台奇偶校验问题,并将使任何未来的API复杂化,例如 例如,将支持声音通道等。声音对象应 被认为是构建后的不可变对象。”

因此,创建一个新的声音对象并重新添加事件侦听器是我认为的解决方案:

var sampleListener = function(){
 alert('something happened'); 
}

var sound = Ti.Media.createSound({url:myURL});
sound.addEventListener('complete', sampleListener);
sound.play();

//later on, make a new sound object:

sound = Ti.Media.createSound({url:anotherURL});
sound.addEventListener('complete', sampleListener);
sound.addEventListener('someevent', anotherSampleListener);
sound.play();
我把它放在“已知bug”类别中,请看这里:标记为“不会修复”

错误报告:

var-sound=tianium.Media.createSound(); sound.url='../cricket.wav';声音。播放(); 但如果我在那之后尝试更改url,声音仍然会播放cricket.wav 声音

Appcelerator(?)的响应:

“客户问题TIMOB-1488的副本。这很容易实现 通过创建一个新的声音对象。此外,这将创建一个 平台奇偶校验问题,并将使任何未来的API复杂化,例如 例如,将支持声音通道等。声音对象应 被认为是构建后的不可变对象。”

因此,创建一个新的声音对象并重新添加事件侦听器是我认为的解决方案:

var sampleListener = function(){
 alert('something happened'); 
}

var sound = Ti.Media.createSound({url:myURL});
sound.addEventListener('complete', sampleListener);
sound.play();

//later on, make a new sound object:

sound = Ti.Media.createSound({url:anotherURL});
sound.addEventListener('complete', sampleListener);
sound.addEventListener('someevent', anotherSampleListener);
sound.play();

要知道,这也发生在Ti.Media.AudioPlayer上。在这种情况下,建议的解决方案也能很好地工作。

大家知道,Ti.Media.AudioPlayer也是如此。在这种情况下,建议的解决方案也能很好地工作。

大家知道,Ti.Media.AudioPlayer也是如此。在这种情况下,建议的解决方案也能很好地工作。

大家知道,Ti.Media.AudioPlayer也是如此。建议的解决方案在这种情况下也可以正常工作。

您可以添加更多信息,如OS+SDK版本您可以添加更多信息,如OS+SDK版本您可以添加更多信息,如OS+SDK版本您可以添加更多信息,如OS+SDK版本如果您可以告诉我如何使事件侦听器工作,我将为您打分。我已经试过了,但它们不起作用。当然,我会更新答案,我不知道