Soundmanager2,在移动设备上播放不同起点的歌曲

时间:2013-12-04 13:59:18

标签: javascript html5 html5-audio soundmanager2

我想知道是否有人可以通过soundmanager2从手机上的歌曲中间给我一些建议。我需要它在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()
};

1 个答案:

答案 0 :(得分:1)

在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;
            }
    });
}