我想知道是否有人能给我一些建议,让我从一首歌中间用SoundManager 2在手机上播放。我需要它在android 4+和IOS6以及IOS7上运行。我有一个解决办法,但并不完美。
我发现soundmanager2在从歌曲的不同起点播放音乐时会产生意想不到的效果,而且不同设备的行为也会有所不同。
我也尝试过使用.currentTime的纯HTML5音频的相同解决方案,但是我对HTML5音频有完全相同的问题,而且由于soundmanager2使用HTML5,我觉得这个问题是相关的。
到目前为止我的解决方案是:
我发现确保歌曲从正确的起点开始播放的最好方法是在歌曲开始播放之后而不是在歌曲开始播放之前更改位置。然而,不希望的效果是,这首歌短暂播放之前,改变位置踢。我试图将音量设置为0,并设置为100以“屏蔽”此问题,但有些移动设备忽略了此问题。这个解决方案在桌面上运行得很好,但这还不够好。
在soundManger中,onplay事件不会在播放歌曲时触发,因为它在我调用.play()时会立即触发。为此,我需要使用soundManager.onPosition('scAudio',500,function..)我发现500个足够在大多数地方捡起来。如果我做得比那少,它就不会在IOS6中被捡起来,
有谁能帮我找到一个更好的解决方案,不意味着这首歌会在换位开始前播放?
这是我目前的代码:
soundManager.setup({
url: '/js/soundmanager2_flash9.swf',
flashVersion: 9,
preferFlash: false,
debugMode: false,
onready: function() {
scAudio = soundManager.createSound({
id: 'scAudio',
url: audioUrl,
autoLoad: true,
volume: 0,
position: startPoint
});
soundManager.onPosition('scAudio', 500, function() {
scAudio.setPosition(startPoint)
soundManager.setVolume('scAudio', 100)
});
}
});
function onThumbnailTouch() {
scAudio.play()
};
最佳答案
在iOS 7中测试,我成功地使用了SoundManager的onPosition事件触发器。所以我在我的“点击”按钮事件中附加了这样的内容。
var mobileAudioLoaded = false;
if (!mobileAudioLoaded) {
soundPlayer.play();
soundPlayer.onPosition(0, function () {
if (!mobileAudioLoaded) {
this.setPosition(50000); // start at 50 seconds
mobileAudioLoaded = true;
}
});
}