2

这基本上与这个问题相同,但更详细:

Soundcloud + SoundManager 错误:读取流的 eqData

所以我有一个使用 canvas / svg / what have you 的可视化工具,当它从 SoundCloud / SoundManager2 接收 EQData 时看起来很棒,但是发生了一些非常奇怪的事件,导致它不那么酷。

1.) 当您使用 SMSound.pause() 或任何变体(SoundManager.togglePause 等)然后恢复所有 EQData / WaveformData 停止进入 SoundManager2 并且它只是归零。

2.) 如果您停止跟踪并重新启动它,所有 EQData / WaveformData 都会停止。

3.) EQData/WaveformData 偶尔会在没有警告的情况下停止进入 SM2,并且可视化器只是停止,如果我转到下一首曲目,它会再次启动,但对于超过 30 秒的歌曲,它从来没有 100% 工作过。

我无法弄清楚这是 SoundCloud 还是 SoundManager2 问题,但似乎其他一些人遇到了问题,但直到现在我无法在任何地方找到任何解决方案。

此处提供链接:http: //nikru.com/viz/。它被从网站中删除,因为它是为客户的未启动网站准备的,他们不希望公众看到。:)

非常感谢任何帮助。

谢谢!

4

1 回答 1

2

好的。我敢肯定其他人也遇到过这种情况,但没有快速解决。我希望这对其他人有所帮助,因为我已经玩了一天左右的可能性,并且认为我有适合每个人的解决方法。

当 SoundManager2 第一次从http://api.soundcloud.com/tracks/9708215/stream?consumer_key= {YOUR KEY} 页面请求歌曲时,会发生什么情况。这很棒,歌曲可以播放,因为 api.soundcloud.com 有一个 crossdomain.xml 文件。糟糕的是,SoundManager2 在下一个请求(暂停/播放或下一首/上一首曲目)上只是回到它所知道的内容(这是 ec-media.soundcloud.com 上的 301 页面,正如我之前提到的 ec- media.soundcloud.com 没有 crossdomain.xml 文件)这不是很好。我的解决方法是每次重新开始一首歌曲时,我都会修改声音的 URL 以包含一个新的 ts={time} 参数,然后在 SMSound 上运行 .load() ,这会导致重新加载并修复问题。

var $track = $(this),
    data = $track.data('track'),
    playing = $track.is('.active');
newURL  = soundManager.sounds["track_" + data.id].url.split("&ts=")[0];
newURL += "&ts=" + Math.round((new Date()).getTime() / 1000);
soundManager.sounds["track_" + data.id].url = newURL;
soundManager.sounds["track_" + data.id].load();
soundManager.sounds["track_" + data.id].url = newURL;

然后为了在歌曲暂停时节省带宽,我实际上只是将其静音并保存歌曲暂停的位置。当他们取消暂停时,我会在他们停止的位置播放该曲目并取消静音......这并不漂亮,但这是我们可以用现有的东西做的最好的事情(我认为)。

希望这可以帮助某人。:)

于 2012-07-25T06:14:03.760 回答